eコマースシステムがあり、別の在庫システムがあります. 私たちはphpとmysqlを使用しています。在庫の詳細を e コマース サーバーに送信する必要があります。1 時間ごとに約 7500 のレコードをサーバーにプッシュする必要があります。在庫を追加するための E コマース システム上に API を作成しました。ただし、両方のサーバーが別の場所にあるため、時間がかかります。このインベントリをサーバーにプッシュするより高速な方法はありますか? つまり、サーバー上の特定のテーブルにレコードを 2 列だけ追加します。
4 に答える
それらは、rsync、LOAD DATA INFILE、INSERT MULTIPLE ROWS(Thomasが言うように)などのMySQL側の多くのオプションでなければなりません。
PHP側では、より高速なプリペアドステートメントを使用できます。ここでは、パラメータをバインドしてループで実行するだけです。クエリ定義がループの外にある間。しかし、それでもMySQLソリューションはあなたの場合により効果的でなければなりません。
ボトルネックがどこにあるのか教えていただけますか? API がデータベースによって停止されていませんか? 1 回の呼び出しで API を介してプッシュするアイテムの数は?
テーブルの行ごとに 1 つの API リクエストを実行しています。これにより、多くのオーバーヘッドが発生します。
代わりに、7,500 行以上の巨大なリクエスト (良くはありませんが、それでも 1/1 よりはましです) を行うか、複数のn
レコードをリクエストしてください。性能n
に合わせて調整します。
編集
あなたは e コマース ソリューションに名前を付けていないので、それは社内のものであり、API をいじることができると思います。これが正しくない場合は、お知らせください。
MySQL では、1 つのテーブルに大量のデータを追加すると、1 つのテーブルINSERT
に対して複数のテーブルを作成できますROWS
。その方がはるかに高速です。
INSERT INTO inventory VALUES (2, 'Lamp'), (1, 'Bike'), (8, 'TV');
INSERT
最適化に関するドキュメントは、 MySQL ドキュメントにあります。
ドキュメントには、検討する必要がある代替ソリューションも示されています。