私は大規模なデータ収集に関連するプロジェクトを書いています。 現在、.NET Framework 4.8 と Mysql パッケージを使用して接続を開始し、データベース サーバーにデータを挿入しています。
約 400,000 行/秒を挿入します。 SQL 接続がプログラムのボトルネックになるのではないかと心配しています。 SQL を使用してマルチスレッド接続を作成し、コンシューマ キューを使用してデータを挿入すると、高速化され、それだけの価値がありますか (メリットとデメリット) を知りたいです。
私の直感では、そのほうが速いと思いますが、スレッドのオーバーヘッドの点でどの程度のパフォーマンスが得られるかはわかりません。私は SQL の専門家ではないので、複数のスレッドで SQL への複数の接続を開くことの長所と短所を誰かが説明できれば幸いです。
P粉3735968282024-03-31 00:42:10
噂、意見、伝聞、事実、バージョン関連のベンチマーク、個人的な経験など...
複数のスレッドによりスループットが向上しますが、制限があります:
INSERT
する最速の方法です。ただし、ファイルを LOAD
に書き込むコストを含めると、一括挿入よりも遅くなる可能性があります。
BULK
バッチ挿入は、LOAD DATA
) は高速取り込みに使用する価値があります。 (出典: 多数の 異なる
時間制限テスト)
一部のデータ ソースは、一度に 1 行のみを送信する必要があります (例: N 秒ごとに車両からのセンサー データ)。これには、データをバッチ処理するための中間層が必要です。
正規化はディスクの占有領域を縮小するのに役立ちます。バッチで行うのが最適です。
を参照してください。
巨大な「ファクト」テーブルは検索が困難です。取り込むときに概要データを構築することを検討してください: 概要テーブル