Un problème avec votre système est que toutes les lignes répétées auraient un hachage répété; vous ne pourriez jamais identifier quand l'une de ces lignes a été ajouté ou supprimé
Très bon point, mais pas un problème. Une ligne répété est un doublon et tous les doublons sont supprimés dans l'étape suivante du traitement. Alors oui, vous avez raison, mais ce n'est pas un problème.
lien « diff » me amène à une page avec une description de ce que je suppose est une application? Il n'y a pas de lien de téléchargement, il n'y a pas de code dans toutes les langues ... Qu'est-ce que je manque ici?
Certains d'entre vous ont parlé de granularité de niveau octet. Ce n'est pas nécessaire. seule granularité de niveau de ligne est nécessaire parce que si quoi que ce soit sur la ligne a été modifiée, la ligne entière (enregistrement) doit être retraitée becasue tout changement au sein de la ligne affecte toute la ligne.
Donc, nous comparons les lignes d'environ 1000 caractères (pas binaires), dans deux fichiers (aujourd'hui instantané et instantané) Yesterdays qui sont chaque ligne de 1 m d'env.
Donc, en utilisant un hachage sécurisé comme SHA256 (MD5 a des collisions et est lent par comparaison) Je peux traiter environ 30 Mo / s sur mon ordinateur portable HO. Le serveur bien sûr de mâcher à travers elle beaucoup plus rapide.
Donc, si le fichier est arond 1 Go, puis faire tous les hases prend environ 33sec, et la lecture de fichiers 1Go en utilisant des fenêtres mémoire de page prend environ 30 secondes. pas terrible
Maintenant, nous avons deux tableaux de hashs représentant les lignes de chaque fichier. Si nous les trions, nous pouvons maintenant utiliser une recherche binaire, donc nous réitérons notre chemin à travers les nouveaux fichiers hashs à la recherche d'un match dans les anciens fichiers hashs. Si nous ne le trouver, cette ligne est ajoutée au fichier des modifications.
Gardez à l'esprit que le livre de lignes (base de données héritée) est inconnue dans tous les aspects. Il n'y a aucune garantie de l'ordre des lignes, la localisation des changements, le type de changements.
Les suggestions de lecture Page foreward par la page est bonne, mais suppose que les deux fichiers sont dans l'ordre smae jusqu'à jusqu'à ce que le premier changement. Cela ne peut pas supposer. Les lignes (rangées) pourraient être dans un ordre quelconque. choisir également un blocksize arbitraire constitue une violation de la granularité d'une ligne. Pour les besoins de cette tâche, les lignes sont immuables.
De cet excellent lien sur le chargement de invrementa: Fichier Comparaison Capture: Cette méthode est également connu comme la méthode différentielle de l'instantané. Cette méthode fonctionne en gardant avant et après les images de fichiers qui préoccupent l'entrepôt de données. Les enregistrements sont comparés à trouver des changements, et les clés d'enregistrement sont comparés pour trouver des insertions et des suppressions. Cette technique est la plus appropriée dans le cas des systèmes existants en raison du fait que les déclencheurs généralement n'existent pas et les journaux de transactions sont soit inexistants, soit dans un format propriétaire. Comme la plupart des bases de données existantes ont un mécanisme pour les données du dumping dans les fichiers, cette technique crée des instantanés périodiques et compare ensuite les résultats pour produire les documents de changement. Certes, tous les problèmes de capture statique sont présents ici. la complexité ajoutée est introduite par le défi consistant à comparer des lignes entières d'information et par l'identification et la clé correspondant. Cette technique est complexe dans la nature et généralement pas souhaitable, mais, dans certains cas, peut être la seule solution.
Ceci est le plus pertinent ici: Alors que nous poursuivons dans le domaine des entrepôts de données téraoctet, la capacité de reconstruire l'entrepôt de données à partir de zéro sur une base quotidienne sera le chemin du dinosaure. L'approche logique et efficace pour mettre à jour l'entrepôt de données implique une certaine forme de stratégie de mise à jour incrémentale.
Donc, je suppose que je suis sur la bonne voie alors? Un indice de btree n'offrirait un avantage?