4

サーバーが使用できるアプリケーションを作成しました。このアプリケーションは情報を収集し、サーバーに送信します。これは 10 秒ごとに行われます。データ量はプレイするプレイヤーによって異なりますが、約 50 サーバーでそれぞれ 100 個のデータを送信します (10 秒ごとに合計 5000 個)。

これらのデータは、SQLクエリ (PreparedStatement構文)、Object[]SQL クエリの値、およびサーバー ID に存在します。
今、私はすべてのデータを処理したいと思います。そして、これが私にとってうまくいかないことです。5 つのテーブルを持つ MySQL サーバーがあります。3 つのテーブルは常に更新されており、データ フローについていくことができません。テーブルは InnoDB テーブルです。これは主に、テーブル ロックではなく、そのように行レベルでロックできるためです。UPDATEとにかく、ほとんどのクエリはクエリであり、INSERTステートメントはほとんどありません。

すべてのクエリをすぐに実行しようとしましたが、接続サーバーもそれが完了するまで待たなければならなかったため、パフォーマンスが低下しました。
また、すべてのクエリを bigConcurrentLinkedQueueに入れて、数秒ごとにこのキューを空にしてみました。パフォーマンスは向上しましたが、これは遅すぎました。
次に、テーブルごとのソリューションを試しましたが、これもわずかに優れていました。まだ遅すぎる。
現在、サーバーごとのセットアップを使用しています (サーバーthreadごとに新しいものを作成し、そこですべてのクエリを実行します)。これはまだ遅すぎます。それは追いつくことができません。

ご覧のとおり、私は多くのことを試しました。また、現在のセットアップでも使用されている を使用してみaddBatch()ました。executeBatch()もちろん、こちら、Google なども調べました。役立つ情報がいくつかありますが、ほとんどの場合、PreparedStatements を追加して BatchUpdates を使用するだけです。

これを行う方法についてのアイデアはありますか?

4

1 に答える 1