PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Esporta big data da PostgreSQL ad AWS s3

Quando esporti un dump di dati di grandi dimensioni, la tua più grande preoccupazione dovrebbe essere la mitigazione degli errori. Anche se potessi saturare una connessione di rete GB, lo spostamento di 10 TB di dati richiederà> 24 ore. Non vuoi doverlo riavviare a causa di un errore (come un timeout di connessione al database).

Ciò implica che dovresti suddividere l'esportazione in più parti. Puoi farlo aggiungendo un intervallo di ID all'istruzione select all'interno della copia (ho appena modificato il tuo esempio, quindi potrebbero esserci degli errori):

COPY (SELECT (ID, NAME, ADDRESS) FROM CUSTOMERS WHERE ID BETWEEN 0 and 1000000) TO ‘CUSTOMERS_DATA_0.CSV WITH DELIMITER '|' CSV;

Naturalmente, genereresti queste affermazioni con un programma breve; non dimenticare di cambiare il nome del file di output per ciascuno. Ti consiglio di scegliere un intervallo di ID che ti dia circa un gigabyte per file di output, risultando in 10.000 file intermedi.

Dove scrivere questi file dipende da te. Se S3FS è sufficientemente affidabile, penso che sia una buona idea.

Suddividendo lo scarico in più parti più piccole, puoi anche dividerlo tra più istanze EC2. Probabilmente saturerai la larghezza di banda della macchina del database con solo pochi lettori. Tieni inoltre presente che AWS addebita $ 0,01 per GB per il trasferimento di dati tra la A alla Z (con 10 TB sono $ 100), quindi assicurati che queste macchine EC2 si trovino nella stessa AZ della macchina del database.

Significa anche che puoi eseguire lo scarico mentre il database non è altrimenti occupato (cioè al di fuori del normale orario di lavoro).

Infine, significa che puoi testare il tuo processo e correggere eventuali errori di dati senza dover eseguire l'intera esportazione (o elaborare 10 TB di dati per ogni correzione).

Sul lato dell'importazione, Redshift può caricare più file in parallelo . Questo dovrebbe migliorare il tuo tempo complessivo, anche se non posso davvero dire quanto.

Un avvertimento:usa un file manifest piuttosto che un prefisso del nome dell'oggetto. Mi sono imbattuto in casi in cui l'eventuale coerenza di S3 ha causato l'eliminazione dei file durante un caricamento.