PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Exportez le Big Data de PostgreSQL vers AWS s3

Lors de l'exportation d'un vidage de données volumineux, votre plus grande préoccupation devrait être d'atténuer les échecs. Même si vous pouviez saturer une connexion réseau Go, le déplacement de 10 To de données prendra> 24 heures. Vous ne voulez pas avoir à redémarrer cela en raison d'un échec (tel qu'un délai de connexion à la base de données).

Cela implique que vous devez diviser l'exportation en plusieurs parties. Vous pouvez le faire en ajoutant une plage d'ID à l'instruction select dans la copie (je viens de modifier votre exemple, il peut donc y avoir des erreurs) :

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

Vous généreriez bien sûr ces instructions avec un programme court; n'oubliez pas de changer le nom du fichier de sortie pour chacun. Je vous recommande de choisir une plage d'ID qui vous donne environ un gigaoctet par fichier de sortie, ce qui donne 10 000 fichiers intermédiaires.

L'endroit où vous écrivez ces fichiers dépend de vous. Si S3FS est suffisamment fiable, je pense que c'est une bonne idée.

En divisant le déchargement en plusieurs morceaux plus petits, vous pouvez également le répartir entre plusieurs instances EC2. Vous saturerez probablement la bande passante de la machine de base de données avec seulement quelques lecteurs. Sachez également qu'AWS facture 0,01 $ par Go pour le transfert de données entre AZ ; avec 10 To, cela représente 100 $. Assurez-vous donc que ces machines EC2 se trouvent dans le même AZ que la machine de base de données.

Cela signifie également que vous pouvez effectuer le déchargement alors que la base de données n'est pas autrement occupée (c'est-à-dire en dehors des heures normales de travail).

Enfin, cela signifie que vous pouvez tester votre processus et corriger les erreurs de données sans avoir à exécuter l'intégralité de l'exportation (ou à traiter 10 To de données pour chaque correction).

Du côté de l'importation, Redshift peut charger plusieurs fichiers en parallèle . Cela devrait améliorer votre temps global, même si je ne peux pas vraiment dire combien.

Une mise en garde :utilisez un fichier manifeste plutôt qu'un préfixe de nom d'objet. J'ai rencontré des cas où la cohérence éventuelle de S3 provoquait la suppression de fichiers lors d'un chargement.