sql >> Database >  >> RDS >> PostgreSQL

Big data exporteren van PostgreSQL naar AWS s3

Bij het exporteren van een grote datadump zou uw grootste zorg het beperken van fouten moeten zijn. Zelfs als u een GB-netwerkverbinding zou kunnen verzadigen, duurt het verplaatsen van 10 TB aan gegevens> 24 uur. U wilt dat niet opnieuw moeten starten vanwege een storing (zoals een time-out voor een databaseverbinding).

Dit houdt in dat u de export in meerdere stukken moet opsplitsen. U kunt dit doen door een ID-bereik toe te voegen aan de select-instructie in de kopie (ik heb zojuist uw voorbeeld bewerkt, dus er kunnen fouten zijn):

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

U zou deze verklaringen natuurlijk genereren met een kort programma; vergeet niet de naam van het uitvoerbestand voor elk bestand te wijzigen. Ik raad aan een ID-bereik te kiezen dat ongeveer een gigabyte per uitvoerbestand oplevert, wat resulteert in 10.000 tussenbestanden.

Waar u deze bestanden schrijft, is aan u. Als S3FS voldoende betrouwbaar is, denk ik dat het een goed idee is.

Door de lossing in meerdere kleinere stukken te splitsen, kunt u deze ook verdelen over meerdere EC2-instanties. U zult waarschijnlijk de bandbreedte van de databasemachine verzadigen met slechts een paar lezers. Houd er ook rekening mee dat AWS $ 0,01 per GB in rekening brengt voor cross-AZ-gegevensoverdracht -- met 10 TB is dat $ 100 -- dus zorg ervoor dat deze EC2-machines zich in dezelfde AZ bevinden als de databasemachine.

Het betekent ook dat u het uitladen kunt uitvoeren terwijl de database op een andere manier niet bezet is (dwz buiten de normale werkuren).

Ten slotte betekent dit dat u uw proces kunt testen en dat u eventuele gegevensfouten kunt herstellen zonder dat u de volledige export hoeft uit te voeren (of 10 TB aan gegevens voor elke reparatie hoeft te verwerken).

Aan de importkant kan Redshift meerdere bestanden parallel . Dit zou je totale tijd moeten verbeteren, hoewel ik niet echt kan zeggen hoeveel.

Een waarschuwing:gebruik een manifestbestand in plaats van een voorvoegsel voor de objectnaam. Ik ben gevallen tegengekomen waarin de uiteindelijke consistentie van S3 ervoor zorgde dat bestanden werden weggelaten tijdens het laden.



  1. Gegevens bijwerken via een functie met tabelwaarde in SQL Server

  2. Hoe vind je rijen die gedupliceerd zijn door een sleutel, maar geen duplicaten in alle kolommen?

  3. Datetime Equivalent van Date(Now()) voor Insert

  4. PostgreSQL-groeperingsfout