web-dev-qa-db-ja.com

Pythonスクリプトを使用してAWS PostgreSQL挿入を高速化します

AWS EC2インスタンス内に120,000のcsvがあり、それぞれに120,000行が含まれています。それぞれをそのままAWS RDS postgresql DBに挿入することはできません。120,000^ 2 = 14,400,000,000レコードになります。各csvは約2 MBです。

私のアプローチは:

  • pandasライブラリを使用して、csvごとに120,000レコードを1つのレコード(ディクショナリのリスト)に変換するPythonスクリプト(データの圧縮後は5 MB)
  • pythonスクリプトは、次にpandas.to_sqlsqlalchemy
  • python multiprocessing moduleを使用してAWS EC2を完全に活用し、データ挿入を高速化します
  • データ挿入を高速化するために追加のインデックスを作成しなかった
  • 最大25GBのネットワーク接続でAWS EC2インスタンスを使用しています

私の観察は:

  • 最初に、私のコードは1分あたり50 csvを挿入します。これは適切な速度です。
  • ただし、現在、50kのcsvが挿入されているため、5時間で1kのcsvのみが挿入されます。
  • 私はpsql \copyを使用してみましたが、1つのcsvを挿入するのに30〜50秒かかることに気付きました。

どうすればスピードアップできるかわかりません。

1
shawnngtq

t2クラスは、設計上、高い作業負荷には適していません。すべてのCPUクレジットを使い果たすと、パフォーマンスはひどいものになります。繰り返しますが、仕様によるものです。

パフォーマンスを重視する場合は、t2(または任意のt *)インスタンスを使用しないでください。

私の知る限り、RDSでCPUクレジットを監視する方法はありません(EC2でできる方法)

2
jjanes