Strategia ottimale per spingere i dati nel DB per gli aggiornamenti ripetuti, considerando che solo una minima parte dei record modifica i valori

1

Milioni di dati di posizione stanno arrivando in un sistema che deve essere memorizzato in un database. I dati arrivano in formati delimitati da tubi in file flat, su base regolare dicono due volte al giorno. E, soprattutto, su un milione di record solo il 5% avrebbe alcun cambiamento. Altri record rimangono gli stessi del feed precedente. Suggerire una strategia ottimale per inserire rapidamente questi dati nel database. Considera che solo il 5% dei dati in entrata avrebbe delle modifiche rispetto alla versione precedente nel database.

Ho controllato una domanda simile come discusso qui . Ma riguarda l'operazione di inserimento in blocco, che può essere eseguita prima con il chunking e poi con l'inserimento bulk su DB.

Ma l'idea qui è di scoprire in qualche modo se alcuni record sono davvero cambiati, se sì, quindi solo inserire o aggiornare, altrimenti basta lasciare quel record. In questo modo potrebbe risparmiare molto tempo.

Qualche suggerimento?

    
posta andromeda 21.02.2017 - 14:30
fonte

1 risposta

4

Per ottenere una soluzione più veloce di quella ovvia, devi scambiare qualcosa per la velocità acquisita.

Potrebbe essere la memoria (mettere in cache i record esistenti e fare il confronto nella RAM piuttosto che sul disco), potrebbe essere la complessità della programmazione (calcolare un checksum e confrontarlo invece di confrontare interi record) o una combinazione di questi. Potrebbe anche essere la correttezza (non imbrogliare - esistono molti scenari di vita reale in cui sacrificare un po 'di% di correttezza per il doppio della velocità di elaborazione è un ottimo compromesso!)

Nella vita reale, mi aspetto che il compromesso sia contrario alla definizione dell'interfaccia dati. Nessuna organizzazione sana di mente continua a scambiare regolarmente i propri interi dati. Qualsiasi collaboratore che apporti regolarmente modifiche a un enorme insieme di dati già conosce quali record sono cambiati e quali no, quindi loro dovrebbero essere accusati del rilevamento!

In altre parole, un'importazione completa perodica è quasi sempre una soluzione cattiva e non necessaria. Implementa invece un'importazione delta.

    
risposta data 21.02.2017 - 14:43
fonte

Leggi altre domande sui tag