毎秒約 5 回、大量のデータを MySQL データベースに書き込む必要があります。最速の方法は何ですか: 1/5 秒ごとに挿入するか、キューを作成して保存されているすべてのデータを ~5 秒ごとに挿入しますか? 2番目の方法の方が良い場合、1回のリクエストで数行を1つのテーブルに挿入することは可能ですか?
5 に答える
挿入の頻度を考慮すると、一度に追加するよりも、キューイングである 2 番目のアプローチを使用する方が適切です。
ただし、次のシナリオを最初に検討する必要があります。
あなたのシステムはリアルタイムですか?はい、許容できる最大遅延はいくらですか (次の挿入とデータが永続化/利用可能になるまでに最大 5 秒かかるため)?
クエリが失敗する必要がある場合、1 つのデータが正しくない場合、残りのすべてが失われるため、データに不正な値/エラーが発生する可能性はどのくらいですか。
で複数のバッファ プールを使用するinnodb_buffer_pool_instances
。マシン上のコア数に依存する場合があります。Partitioning
テーブルの使用。
を使用してデータをまとめて挿入できますXML
。
各トランザクションには固定コストがかかるため、数秒ごとに複数行の挿入を行う方が良いと言えます。私たちが仕事で使用しているシステムの中には、一度にすべてを挿入する前に数百行をキャッシュするものがあります。
MySQLのドキュメントから、次のように複数行の挿入を行うことができます。
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
私の経験では、MySQL データベースにデータを挿入するときは、バッチを使用する方が高速です。
したがって、より遅いオプションは、複数の挿入クエリを実行することです。
INSERT INTO my_table VALUES (1, "a"); INSERT INTO my_table VALUES (2, "b");
より高速なオプションは次のとおりです。
INSERT INTO my_table VALUES (1, "a"), (2, "b");
次のようなものを使用して、すべてのデータを挿入できます。
INSERT INTO table (field1, field2,... , fieldN )
VALUES
(value1_1', value1_2,... , value1_N),
(value2_1', value2_2,... , value2_N),
...
(valueM_1', valueM_2,... , valueM_N);