O problemă cu schema dumneavoastră este că orice linii repetate ar avea un hash repetat; nu ai putea identifica atunci când s-a adăugat una dintre aceste linii sau șterse
Punct foarte bun, dar nu este o problemă. O linie repetată este un duplicat și toate duplicatele sunt șterse în următoarea etapă de prelucrare. Deci, da, ai dreptate, dar nu este o problemă.
„Dif“ link-ul mă duce la o pagină cu o descriere a ceea ce presupun este o aplicație? Nu există nici o legătură de descărcare, nu există nici un cod în orice limbă ... Ce sunt eu lipsesc aici?
Unii dintre voi ați vorbit despre nivel de octet granularitate. Acest lucru nu este necesar. este necesară numai granularitate nivel de linie pentru că dacă ceva pe linie a fost modificată, întreaga linie (înregistrare) trebuie să fie reprocesate becasue orice modificare în cadrul liniei afectează întreaga linie.
Deci comparăm liniile de aproximativ 1000 de caractere (fără binare), în două fișiere (direct instantaneu și instantaneu yesterdays), care sunt fiecare linii de 1m aprox.
Deci, folosind un hash securizat ca SHA256 (MD5 are coliziuni și este lent prin comparație) pot procesa aproximativ 30 MB / sec pe laptop-ul meu HO. Serverul desigur, va mesteca prin ea mult mai repede.
Deci, dacă fișierul este AROND de 1 GB, atunci ceea ce face toate hases durează aproximativ 33sec, și citirea fișierului 1Gb folosind ferestre de memorie pagină durează aproximativ 30 sec. Nu este oribil
Acum avem două matrici de hashs reprezentând liniile din fiecare fișier. Dacă le vom sorta, putem folosi acum o căutare binară, așa că ne-am iteram drumul nostru prin noile fișiere hashs în căutarea unui meci în fișierele vechi hashs. Dacă noi nu se pare, se adaugă această linie la fișierul modificări.
Rețineți că cartea linii (baze de date vechi) nu este cunoscută în fiecare aspect. Nu există nici o garanție de ordine liniilor, localizarea modificărilor, tipul de modificări.
Sugestiile de citire pagina CUVÂNT de pagină este bună, dar presupune că cele două fișiere sunt în ordinea smae pana ii prima schimbare. Acest lucru nu poate fi asumată. Liniile (rândurile) pot fi în orice ordine. De asemenea, alegerea unui blocksize arbitrar încalcă granularitatea unei linii. În sensul acestei sarcini, liniile sunt imuabile.
De la care se leagă excelent la încărcare invrementa: Fișier de comparare Captură: Această metodă este, de asemenea, cunoscut sub numele de metoda diferențială instantaneu. Această metodă funcționează prin păstrarea înainte și după imagini de fișiere care sunt de interes pentru depozitul de date. Înregistrările sunt comparate pentru a găsi modificările și cheile de înregistrare sunt comparate pentru a găsi inserări și ștergeri. Aceasta tehnica este cea mai potrivită în cazul sistemelor existente, datorită faptului că declanșează de obicei, nu există și registrele de tranzacții sunt fie inexistente sau într-un format proprietar. Deoarece cele mai multe baze de date moștenite au un mecanism de dumping de date în fișiere, această tehnică creează instantanee periodice și apoi se compară rezultatele pentru a produce înregistrări de schimbare. Desigur, toate problemele de captare statice sunt prezente aici. complexitate suplimentară este introdusă prin provocarea de a compara rânduri întregi de informații și prin identificarea și potrivirea cheie. Această tehnică este de natură complexă și de obicei nu este de dorit, dar, în unele cazuri, poate fi singura soluție.
Acest lucru este cel mai relevant aici: Așa cum am proceda în domeniul depozitelor de date terabyte, capacitatea de a reconstrui depozitul de date de la zero pe o bază de noapte va merge pe calea dinozaur. Abordarea logică și eficientă de a actualiza depozitul de date implică o anumită formă de strategie de actualizare incrementală.
Deci, cred ca sunt pe drumul cel bun, atunci? Un indice de btree nu ar da un avantaj?