私は大規模なデータ収集に関連するプロジェクトを書いています。 現在、.NET Framework 4.8 と Mysql パッケージを使用して接続を開始し、データベース サーバーにデータを挿入しています。
約 400,000 行/秒を挿入します。 SQL 接続がプログラムのボトルネックになるのではないかと心配しています。 SQL を使用してマルチスレッド接続を作成し、コンシューマ キューを使用してデータを挿入すると、高速化され、それだけの価値がありますか (メリットとデメリット) を知りたいです。
私の直感では、そのほうが速いと思いますが、スレッドのオーバーヘッドの点でどの程度のパフォーマンスが得られるかはわかりません。私は SQL の専門家ではないので、複数のスレッドで SQL への複数の接続を開くことの長所と短所を誰かが説明できれば幸いです。
噂、意見、伝聞、事実、バージョン関連のベンチマーク、個人的な経験など...
複数のスレッドによりスループットが向上しますが、制限があります:
LOAD DATA- は、単一スレッドから一度に多数の行を
BULK INSERT- が続きます。ただし、特定の制限または「利益逓減」に達すると、行数は「数百」に制限されます。
バッチ挿入は、 INSERT- クエリごとに 1 行を挿入するよりも 10 倍高速です。したがって、これ (または
データソース:
INSERT
する最速の方法です。ただし、ファイルをLOAD
に書き込むコストを含めると、一括挿入よりも遅くなる可能性があります。LOAD DATA
) は高速取り込みに使用する価値があります。 (出典: 多数の異なる
時間制限テスト)#標準化を参照してください-
パーティショニング
最終的に古いデータを消去することを除いて、ほとんど役に立ちません。 - #パーティション
-
上記の処理を行った後、元のデータを破棄することもできます。 1 日あたり 1 テラバイトのデータを取得しているようです。
を参照してください。 巨大な「ファクト」テーブルは検索が困難です。取り込むときに概要データを構築することを検討してください: 概要テーブル