1

Mysql を使用しており、大量のデータを挿入する必要があります。データは、5k 行のリストの形式でサーバーにストリーミングされます。3k 以上のリクエストを挿入する必要があります。つまり、3k リクエスト * 5k 行 = 15 000 000 行です。

私が行ったことは、非同期イベントでデータが 5k のパケットになるため、スレッドを作成し、それらのスレッドを使用して挿入することでした。私の要求に応じてデータ応答が生成されます。

このシナリオを念頭に置いて、それを行うための最良の方法は何ですか?

スレッド管理または単純なマルチスレッド アプリケーション用の ThreadPooling と、単一のテーブル (Innodb エンジン) に挿入する必要があるため、スレッドは挿入に適しています。

4

1 に答える 1

1

着信要求をサーバーにキャッシュできます。N 個のリクエストを取得するまで、バッファリングされたデータをメモリ内に保持します (後で微調整できます)。それらを取得したら、一括挿入ルーチンを使用してデータを MySql にフラッシュするだけです。一般に、多数の小さな挿入よりも 1 つの大きな挿入を行う方がはるかに高速です。

ConcurrentBagクラスを使用して、サーバー上にデータを保持できます。これはスレッドセーフなコレクションです。

さらに、時間に基づいてキャッシュを期限切れにする必要がある場合があります。これは、いくつかのリクエストn < Nを受け取り、その後クライアントがデータの送信を停止するケースをカバーします。とにかくそれをフラッシュし、次の今後のリクエストがキャッシュを完全に満たすまで永遠に待たないようにします。

于 2012-09-14T22:04:22.370 に答える