Ein Problem mit Ihrem Schema ist, dass alle wiederholten Zeilen würde eine wiederholte Hash haben; Sie konnte nie erkennen, wenn einer dieser Zeilen hinzugefügt oder gelöscht wurde
Sehr guter Punkt, aber kein Problem. Eine wiederholte Zeile ist ein Duplikat und alle Duplikate in der nächsten Stufe der Verarbeitung gelöscht. Also ja, Sie haben Recht, aber es ist kein Problem.
„Diff“ Link führt mir eine Seite mit einer Beschreibung dessen, was ich davon ausgehen, ist eine Anwendung? Es gibt keinen Download-Link gibt es keinen Code in jeder Sprache ist ... Was ich hier fehlt?
Einige von Ihnen haben über Byte-Ebene Granularität gesprochen. Dies ist nicht erforderlich. nur Line-Level-Granularität ist erforderlich, da, wenn etwas auf der Linie geändert wurde, die gesamte Zeile (Datensatz) muss erneut verarbeitet werden becasue jede Änderung innerhalb der Linie, die die ganze Linie auswirkt.
So sind wir Linien von ca. 1000 Zeichen zu vergleichen (nicht binär), in zwei Dateien (heutige Snapshot und yesterdays Snapshot), die jeweils ca. 1 m Linien sind.
So mit einem sicheren Hash wie SHA256 (MD5 hat Kollisionen und ist langsam im Vergleich) Ich kann über 30 MB / s auf meinem Laptop HO verarbeiten. Der Server wird natürlich viel schneller durch kauen.
Also, wenn die Datei arond 1 GB ist, dann alle machen HASEn dauert ca. 33sec und Fenster Seitenspeicher dauert etwa 30 Sekunden mit 1 GB-Datei zu lesen. nicht schrecklich
Jetzt haben wir zwei Arrays von Hashes, die die Zeilen in jeder Datei. Wenn wir sie sortieren, können wir nun eine binäre Suche verwenden, so dass wir iterieren unseren Weg durch die neuen Dateien hashs für eine Übereinstimmung in den alten Dateien hashs suchen. Wenn wir es nicht finden, wird diese Zeile auf die Änderungen Datei hinzugefügt.
Beachten Sie, dass das Buch von Linien (Legacy-Datenbank) in jeder Hinsicht unbekannt ist. Es gibt keine Garantie für die Bestellung von Linien, die Lage der Änderungen, die Art der Änderungen.
Die Vorschläge des Lesens foreward Seite für Seite ist gut, geht aber davon aus, dass die beiden Dateien im smae um bis, bis die erste Veränderung. Dies kann nicht übernommen werden. Die Linien (Zeilen) können in beliebiger Reihenfolge angegeben werden. Auch die Wahl eines beliebigen Block verletze die Granularität einer Zeile. Für die Zwecke dieser Aufgabe sind, Linien unveränderlich.
Von diesem hervorragenden Link auf invrementa Laden: Dateivergleich Aufnahme: Diese Methode wird auch als Snapshot-Differenzverfahren bekannt. Diese Methode funktioniert, indem vor zu halten und nach Bildern von Dateien, die von Bedeutung für das Data Warehouse sind. Aufzeichnungen verglichen werden Änderungen zu finden, und Satzschlüssel verglichen werden Einfügungen und Löschungen zu finden. Diese Technik ist am besten geeignet für den Fall von Legacy-Systemen aufgrund der Tatsache, die normalerweise nicht existieren löst und Transaktionsprotokolle sind entweder nicht vorhanden oder in einem proprietären Format. Da die meisten Legacy-Datenbanken für Dumping-Daten in Dateien einen Mechanismus haben, schafft diese Technik regelmäßig Snapshots und vergleicht dann die Ergebnisse Änderungssätze zu erzeugen. Gewiss, alle Probleme der statischen Erfassung sind hier vorhanden. Zusätzliche Komplexität wird durch die Herausforderung des Vergleichens ganze Reihen von Informationen und durch Schlüsselidentifikation und Matching eingeführt. Diese Technik ist komplex in der Natur und in der Regel nicht wünschenswert, aber in einigen Fällen können die einzige Lösung sein.
Dies ist vor allem relevant hier: Wie wir in den Bereich der Terabyte-Datenlager gehen, die Fähigkeit, die Data Warehouse von Grund auf einer nächtlichen Basis gehen den Weg der Dinosaurier neu zu erstellen. Der logische und effizienter Ansatz das Data Warehouse der Aktualisierung beinhaltet eine Form von inkrementeller Update-Strategie.
Also ich denke, ich auf dem richtigen Weg bin dann? Ein btree Index würde keinen Vorteil leisten?