sql >> データベース >  >> RDS >> PostgreSQL

ビッグデータをPostgreSQLからAWSs3にエクスポートする

    大きなデータダンプをエクスポートする場合、最大の懸念事項は障害の軽減です。 GBネットワーク接続を飽和させることができたとしても、10TBのデータの移動には24時間以上かかります。障害(データベース接続のタイムアウトなど)が原因で再起動する必要はありません。

    これは、エクスポートを複数の部分に分割する必要があることを意味します。これを行うには、コピー内のselectステートメントにID範囲を追加します(例を編集したばかりなので、エラーが発生する可能性があります):

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

    もちろん、短いプログラムでこれらのステートメントを生成します。それぞれの出力ファイルの名前を変更することを忘れないでください。出力ファイルごとにギガバイト程度のID範囲を選択することをお勧めします。これにより、10,000個の中間ファイルが作成されます。

    これらのファイルをどこに書き込むかはあなた次第です。 S3FSの信頼性が十分であれば、それは良い考えだと思います。

    アンロードを複数の小さな部分に分割することで、複数のEC2インスタンスに分割することもできます。おそらく、少数のリーダーだけでデータベースマシンの帯域幅を飽和させるでしょう。また、AWSはAZ間データ転送にGBあたり0.01ドル(10 TBは100ドル)を請求することに注意してください。したがって、これらのEC2マシンがデータベースマシンと同じAZにあることを確認してください。

    また、データベースが他の方法でビジーでない間(つまり、通常の勤務時間外)にアンロードを実行できることも意味します。

    最後に、プロセスをテストでき、エクスポート全体を実行せずにデータエラーを修正できることを意味します(または修正ごとに10 TBのデータを処理します)。

    インポート側では、Redshiftは複数をロードできます並列ファイル 。これで全体の時間が改善されるはずですが、実際にどれだけの時間を言うことはできません。

    注意点:マニフェストファイルを使用する オブジェクト名のプレフィックスではなく。 S3の結果整合性により、ロード中にファイルがドロップされる場合があります。



    1. JavaMySQL更新クエリ

    2. スキーマスイッチ-A-Roo:パート2

    3. このデータベースをクエリするためにselectステートメントを正しくするにはどうすればよいですか?

    4. openerp:ubuntuの内部サーバーエラー