2012-02-22 10 views
7

Sto usando Perl per connettersi a 2 diversi database (MySQL e Sybase) usando DBI, ci sono circa 700.000 record su ciascuno e ho bisogno che siano uguali (molto probabilmente ci saranno alcuni record diversi ogni settimana o giù di lì) , per la prima volta fare questo sarebbe semplicemente una questione di copiare il tavolo, ma questo deve essere fatto su base regolare (almeno una volta alla settimana), e semplicemente cadere la tabella e copiare di nuovo ogni volta non è una buona soluzione, quindi mi stavo chiedendo: Qual è il modo più veloce per confrontare circa 700.000 righe da 2 diversi database usando Perl?Qual è il modo più veloce per confrontare circa 700.000 righe da 2 diversi database usando Perl?

Nota: Le tabelle hanno 5 campi (tutti loro tipo di carattere tra cui la chiave primaria)

risposta

4

carico ogni tabella, ordinate, a Perl nella sua interezza, quindi eseguire Algorithm:Diff sulle due liste. Alla fine otterrai un bel elenco di righe da eliminare e righe da inserire. Alcune righe possono essere cancellate e reinserite (se hai delle chiavi esterne che pendono da quelle file, dovrai fare un aggiornamento piuttosto che un delete/insert).

700.000 righe non sono molti dati su macchine moderne, né molta memoria.

Se è necessaria solo l'esistenza di righe (vale a dire che le righe esistono o non sostituiscono le effettive modifiche di riga), è sufficiente eseguire una differenza sui tasti, quindi recuperare le righe necessarie da lì.

+0

Se i campi non chiave sono grandi, è possibile scaricare la chiave e solo l'hash sha1 degli altri campi e confrontarli con quelli precedenti. I galleggianti –

+1

possono essere un problema durante il confronto - potrebbe essere necessario limitare la precisione. (hehe 700K è niente, 240 milioni di file possono essere divertenti) – Rich

Problemi correlati