2017-01-04 3 views
1

私は、RDS Postgresからデータをストリーミングし、データに対して比較的高価なCPU操作を実行し、それを別のデータベースに挿入する必要のあるNodeJSアプリケーションを持っています。 CPU集中的な部分私は、AWS Lambdaにオフロードしました.Nodeアプリケーションは行のバッチを取得し、処理のためにすぐにLambdaに渡します。ボトルネックは、Postgresからデータを受信できる速度のようです。Postgresテーブルのすべてのデータを処理する最速の方法は?

DBへの複数の接続を利用するために、並べ替えられたIDを効果的に飛躍させるアルゴリズムを使用しているので、多くの同時接続を維持できます。例:1つの接続がids 1-100をフェッチし、2つ目がids 101-200などをフェッチし、最初の戻り値がids 1001-1100をフェッチする場合があります。これは比較的標準的な方法ですか?処理のためにデータを引き出すためのより速い方法がありますか?

私はデータベースのmax_connections以下であれば、追加の同時アプリケーションとしてデータをストリーミングすることは、おそらくもっと有益でしょうか?アプリケーションとRDSの両方が現在VPCにあり、RDSのCPU使用率は約30%、メモリは60%になります。

+0

{構築+解析+実行}クエリ+ 2 *ネットワークトラフィックは、100行だけで大量の作業です。 – wildplasser

+0

100行ではなく、ちょうど飛び跳ねるメカニズムを示す例を挙げていただけです。 – ralusek

+0

あなたはコードの人で、データの人ではないようです。それ以外にも、ボトルネックがCPUを大量に消費するものなら、なぜビターですか? – wildplasser

答えて

1

PostgresデータベースをCSVファイルにダンプしたり、フラットファイルに直接エクスポートしたり、フラットファイルを分割してS3にダンプしたり、各ファイルのバッチを独自に処理したりするのはおそらく非常に早いでしょう。

Postgresからのストリーミングデータ(特に何百万ものアイテムを扱う場合)は、多くのIOと非常に長い時間がかかります。

関連する問題