PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Exporte big data do PostgreSQL para AWS s3


Ao exportar um grande dump de dados, sua maior preocupação deve ser a mitigação de falhas. Mesmo se você pudesse saturar uma conexão de rede GB, mover 10 TB de dados levará> 24 horas. Você não quer ter que reiniciar isso devido a uma falha (como um tempo limite de conexão de banco de dados).

Isso implica que você deve dividir a exportação em várias partes. Você pode fazer isso adicionando um intervalo de ID à instrução select dentro da cópia (acabei de editar seu exemplo, portanto, pode haver erros):

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

Você, é claro, geraria essas instruções com um programa curto; não se esqueça de alterar o nome do arquivo de saída para cada um. Eu recomendo escolher um intervalo de ID que forneça um gigabyte ou mais por arquivo de saída, resultando em 10.000 arquivos intermediários.

Onde você escreve esses arquivos é com você. Se o S3FS for suficientemente confiável, acho que é uma boa ideia.

Ao dividir o descarregamento em várias partes menores, você também pode dividi-lo entre várias instâncias do EC2. Você provavelmente saturará a largura de banda da máquina de banco de dados com apenas alguns leitores. Esteja ciente também de que a AWS cobra US$ 0,01 por GB para transferência de dados entre AZs -- com 10 TB que são US$ 100 -- portanto, certifique-se de que essas máquinas EC2 estejam na mesma AZ que a máquina do banco de dados.

Isso também significa que você pode realizar o descarregamento enquanto o banco de dados não estiver ocupado (ou seja, fora do horário normal de trabalho).

Por fim, significa que você pode testar seu processo e corrigir quaisquer erros de dados sem precisar executar toda a exportação (ou processar 10 TB de dados para cada correção).

No lado da importação, O Redshift pode carregar vários arquivos em paralelo . Isso deve melhorar seu tempo geral, embora eu não possa dizer quanto.

Uma ressalva:use um arquivo de manifesto em vez de um prefixo de nome de objeto. Eu me deparei com casos em que a consistência eventual do S3 fez com que os arquivos fossem descartados durante um carregamento.