サーバーが使用できるアプリケーションを作成しました。このアプリケーションは情報を収集し、サーバーに送信します。これは 10 秒ごとに行われます。データ量はプレイするプレイヤーによって異なりますが、約 50 サーバーでそれぞれ 100 個のデータを送信します (10 秒ごとに合計 5000 個)。
これらのデータは、SQL
クエリ (PreparedStatement
構文)、Object[]
SQL クエリの値、およびサーバー ID に存在します。
今、私はすべてのデータを処理したいと思います。そして、これが私にとってうまくいかないことです。5 つのテーブルを持つ MySQL サーバーがあります。3 つのテーブルは常に更新されており、データ フローについていくことができません。テーブルは InnoDB テーブルです。これは主に、テーブル ロックではなく、そのように行レベルでロックできるためです。UPDATE
とにかく、ほとんどのクエリはクエリであり、INSERT
ステートメントはほとんどありません。
すべてのクエリをすぐに実行しようとしましたが、接続サーバーもそれが完了するまで待たなければならなかったため、パフォーマンスが低下しました。
また、すべてのクエリを bigConcurrentLinkedQueue
に入れて、数秒ごとにこのキューを空にしてみました。パフォーマンスは向上しましたが、これは遅すぎました。
次に、テーブルごとのソリューションを試しましたが、これもわずかに優れていました。まだ遅すぎる。
現在、サーバーごとのセットアップを使用しています (サーバーthread
ごとに新しいものを作成し、そこですべてのクエリを実行します)。これはまだ遅すぎます。それは追いつくことができません。
ご覧のとおり、私は多くのことを試しました。また、現在のセットアップでも使用されている を使用してみaddBatch()
ました。executeBatch()
もちろん、こちら、Google なども調べました。役立つ情報がいくつかありますが、ほとんどの場合、PreparedStatements を追加して BatchUpdates を使用するだけです。
これを行う方法についてのアイデアはありますか?