ProgrammazioneSviluppatore Backend, Data Engineer, DBA

Parlaci di come organizzare l'elaborazione e la trasmissione di grandi volumi di dati tra server SQL. Quali meccanismi esistono per la trasmissione batch dei dati, come prevenire la perdita/danneggiamento dei dati? Fornisci un esempio di soluzione software.

Supera i colloqui con l'assistente IA Hintsage

Risposta

Per la trasmissione di grandi volumi di dati tra server SQL vengono utilizzate diverse strategie, tra cui bulk insert, processi ETL (Extract-Transform-Load), replicazione, così come meccanismi di backup/ripristino, db-link e strumenti integrati di esportazione-importazione.

È consigliabile utilizzare meccanismi di trasmissione batch. Un esempio su SQL Server è BULK INSERT per il caricamento di grandi file, oppure SSIS/Integration Services per scenari ETL complessi. In varianti più portabili vengono utilizzati script con logica LIMIT/OFFSET e registrazione della posizione di trasmissione. Per affidabilità si utilizzano spesso:

  • Trasmissione di dati a lotti con checksum,
  • Tabelle di staging temporanee con successivo controllo dell'integrità (vincoli di controllo, hash),
  • Registrazione delle fasi di trasmissione.

Esempio

-- Trasmissione di dati a lotti tra database (PostgreSQL) INSERT INTO target_db.public.data_table (col1, col2) SELECT col1, col2 FROM source_db.public.data_table WHERE transferred = FALSE LIMIT 10000;

Domanda insidiosa

Qual è la differenza tra replicazione ed esportazione-importazione, e perché la replicazione non è sempre adatta per la migrazione di grandi archivi storici?

Risposta: La replicazione supporta la sincronizzazione dei cambiamenti attuali e funziona in modo efficiente per i dati "vivi". Per la migrazione di archivi storici, la replicazione può essere insufficiente in termini di velocità e flessibilità, poiché non supporta trasformazioni personalizzate e non risolve il problema della trasmissione batch una tantum — qui si utilizzano più frequentemente ETL.

Esempi di errori reali


Storia

L'azienda ha integrato diversi database regionali in un'unica archiviazione. Durante un'importazione massiva senza batch, il sistema si "bloccava" a causa della mancanza di memoria, portando a commit parziali e a un ripristino manuale dello stato. Risolto passando a un'esportazione batch con registrazione dei progressi tramite tabelle di staging.


Storia

A causa di un controllo della somma di controllo non corretto durante la trasmissione di grandi file con BULK INSERT, parte delle informazioni è stata danneggiata, ma questo fatto è stato scoperto solo alcune settimane dopo. La soluzione è stata il ricalcolo delle somme di controllo prima e dopo ogni batch con ripetizione automatica in caso di non conformità.


Storia

Nel tentativo di migrare 100+ milioni di righe tramite l'esportazione-importazione standard, un sviluppatore non ha considerato il gestione dei lock: il blocco delle tabelle sul server di destinazione ha portato a un'interruzione delle operazioni aziendali per diverse ore. Conclusione — per tali compiti utilizzare solo finestre notturne e copia graduale con riindicizzazione temporanea.