PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Exportieren Sie Big Data von PostgreSQL nach AWS s3

Beim Exportieren eines großen Datendumps sollte Ihr größtes Anliegen die Minderung von Fehlern sein. Selbst wenn Sie eine GB-Netzwerkverbindung sättigen könnten, dauert das Verschieben von 10 TB Daten> 24 Stunden. Sie möchten das nicht aufgrund eines Fehlers (z. B. einer Zeitüberschreitung der Datenbankverbindung) neu starten müssen.

Dies bedeutet, dass Sie den Export in mehrere Teile aufteilen sollten. Sie können dies tun, indem Sie der select-Anweisung innerhalb der Kopie einen ID-Bereich hinzufügen (ich habe gerade Ihr Beispiel bearbeitet, daher können Fehler auftreten):

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

Sie würden diese Anweisungen natürlich mit einem kurzen Programm generieren; Vergessen Sie nicht, den Namen der Ausgabedatei für jede zu ändern. Ich empfehle, einen ID-Bereich auszuwählen, der Ihnen etwa ein Gigabyte pro Ausgabedatei bietet, was zu 10.000 Zwischendateien führt.

Wohin Sie diese Dateien schreiben, bleibt Ihnen überlassen. Wenn S3FS ausreichend zuverlässig ist, halte ich es für eine gute Idee.

Indem Sie das Entladen in mehrere kleinere Teile aufteilen, können Sie es auch auf mehrere EC2-Instances aufteilen. Wahrscheinlich sättigen Sie die Bandbreite der Datenbankmaschine mit nur wenigen Lesern. Beachten Sie auch, dass AWS 0,01 $ pro GB für die AZ-übergreifende Datenübertragung berechnet – bei 10 TB sind das 100 $ – stellen Sie also sicher, dass sich diese EC2-Maschinen in derselben AZ wie die Datenbankmaschine befinden.

Das bedeutet auch, dass Sie das Entladen durchführen können, während die Datenbank nicht anderweitig beschäftigt ist (dh außerhalb der normalen Arbeitszeiten).

Schließlich bedeutet dies, dass Sie Ihren Prozess testen und Datenfehler beheben können, ohne den gesamten Export ausführen zu müssen (oder 10 TB Daten für jede Korrektur verarbeiten).

Auf der Importseite kann Redshift mehrere laden Dateien parallel . Dies sollte Ihre Gesamtzeit verbessern, obwohl ich nicht wirklich sagen kann, wie sehr.

Eine Einschränkung:Verwenden Sie eine Manifestdatei anstelle eines Objektnamenpräfixes. Ich bin auf Fälle gestoßen, in denen die letztendliche Konsistenz von S3 dazu führte, dass Dateien während eines Ladevorgangs gelöscht wurden.