Ho large datasets con milioni di record in formato XML. Questi set di dati sono discariche complete di dati di un database fino a un certo momento.Come posso determinare la differenza tra due grandi set di dati?
Tra due dump potrebbero essere state aggiunte nuove voci e quelle esistenti potrebbero essere state modificate o eliminate. Supponiamo che lo schema rimanga invariato e che ogni voce abbia un ID univoco.
Quale sarebbe il modo migliore per determinare il delta tra due di questi set di dati (incluse eliminazioni e aggiornamenti)?
Il mio piano è caricare tutto su un RDBMS e andare da lì.
Innanzitutto, caricare la discarica precedente. Quindi, caricare il dump più recente in uno schema diverso, ma nel farlo verificherò se la voce è nuova o è un aggiornamento di una voce esistente. Se sì, registrerò l'ID su una nuova tabella (s) chiamata "modifiche".
Al termine, passerò al vecchio dump passando attraverso tutte le voci e vedremo se hanno un record corrispondente (es: stesso ID) sul nuovo dump. In caso contrario, accedere alle modifiche.
Supponendo di cercare un record per ID è un'operazione O(log n)
, questo dovrebbe consentirmi di fare tutto in tempo O(n log n)
.
Perché posso determinare la differenza osservando la presenza o l'assenza di record con solo l'ID e l'ultima data di modifica, potrei anche caricare tutto nella memoria principale. La complessità del tempo sarà la stessa, ma con l'ulteriore vantaggio di un minore I/O del disco, che dovrebbe rendere più veloce questo ordine di grandezza.
Suggerimenti? (Nota: questa è più una questione di prestazioni che altro)
"Perché posso determinare ... che dovrebbe rendere questo processo più rapido di ordini di grandezza". "Questa è più una questione di prestazioni che altro". ...così facendo in memoria sarà molto più veloce, e ti preoccuperai principalmente delle prestazioni. Sembra che tu abbia risposto alla tua stessa domanda. – Gerrat