Un problema con il vostro schema è che le linee ripetute avrebbero un hash ripetuto; non si potrebbe mai identificare quando una di queste linee è stato aggiunto o eliminato
Molto buon punto, ma non è un problema. Una linea ripetuta è un duplicato e tutti i duplicati vengono eliminati nella prossima fase di lavorazione. Quindi sì hai ragione, ma non è un problema.
Link "diff" mi porta a una pagina con la descrizione di quello che presumo è un'applicazione? Non v'è alcun link per il download, non esiste un codice in qualsiasi lingua ... Che cosa manco qui?
Alcuni di voi hanno parlato di livello di byte granularità. Questo non è necessario. è richiesto solo granularità a livello di linea, perché se qualcosa sulla linea è stata modificata, l'intera linea (record) deve essere ritrattato becasue ogni cambiamento all'interno della linea colpisce l'intera linea.
Quindi stiamo confrontando linee di circa 1000 caratteri (senza binari), in due file (oggi snapshot e snapshot di ieri) che sono ciascuno circa linee 1m.
Quindi, utilizzando un hash sicuro come SHA256 (MD5 ha collisioni ed è lento in confronto) posso processare circa 30MB / sec sul mio portatile HO. Il server naturalmente masticare attraverso di essa molto più veloce.
Quindi, se il file è arond 1GB, poi fare tutte le hases dura circa 33sec, e la lettura di file da 1 Gb di memoria utilizzando Windows pagina richiede circa 30 secondi. non orribile
Ora abbiamo due array di hashs che rappresentano le linee in ogni file. Se li ordiniamo, ora possiamo usare una ricerca binaria, così abbiamo iterare il nostro modo attraverso i nuovi file hashs alla ricerca di una corrispondenza nei file vecchi hashs. Se noi non trovarlo, si aggiunge che la linea al file modifiche.
Tenete a mente che il libro di linee (database legacy) è sconosciuta in ogni aspetto. Non v'è alcuna garanzia di ordine delle linee, la posizione di cambiamenti, tipo di modifiche.
I suggerimenti di lettura pagina per pagina foreward è buono, ma si presume che i due file sono nell'ordine smae up fino alla prima modifica. Questo non può essere assunto. Le linee (righe) potrebbe essere in qualsiasi ordine. scegliendo anche una dimensione del blocco arbitrario viola la granularità di una linea. Ai fini di questa operazione, le linee sono immutabili.
Da quel eccellente collegamento sul invrementa carico: file di confronto Capture: Questo metodo è noto anche come il metodo snapshot differenziale. Questo metodo funziona mantenendo prima e dopo le immagini di file che sono fonte di preoccupazione per il data warehouse. I record sono confrontati per trovare i cambiamenti, e le chiavi di registrazione vengono confrontate per trovare inserti ed eliminazioni. Questa tecnica è più appropriato nel caso di sistemi legacy a causa del fatto che si innesca in genere non esistono e registri delle transazioni sono o inesistenti o in un formato proprietario. Poiché la maggior parte dei database legacy hanno un qualche meccanismo per il dumping dei dati in file, questa tecnica crea istantanee periodiche e quindi confronta i risultati per la produzione record di modifica. Certo, tutti i problemi di cattura statica sono qui presenti. complessità è introdotto dalla sfida di confrontare intere righe di informazioni e di identificazione chiave e di corrispondenza. Questa tecnica è di natura complessa e tipicamente non desiderabile, ma, in alcuni casi, può essere l'unica soluzione.
Questo è più rilevante qui: Come si procede nel regno di data warehouse terabyte, la possibilità di ricostruire il data warehouse da zero su base giornaliera farà la fine dei dinosauri. L'approccio logico ed efficiente per l'aggiornamento del data warehouse comporta qualche forma di strategia di aggiornamento incrementale.
Quindi credo che io sono sulla strada giusta, allora? Un indice btree non offrirebbe un vantaggio?