0

私は、より多くのストレージ オブジェクト (それぞれが多数の単純な変数を格納する) を管理するアプリケーションを使用しています。これらのオブジェクトは、外部データベース、つまり MySQL と SQlite を介して保存されます。

私が現在行っていることは、起動時にすべてのオブジェクトをメモリにロードすることです (少なくとも現時点では、直接アクセスが必要です。遅延ロードはオプションではありません)。オブジェクトの値が変更されると、新しいスレッドで対応する update ステートメントを呼び出すことにより、データベース内のオブジェクト自体が自動的に更新されます。データベース通信はPreparedStatements、 を使用して純粋な JDBC で処理されます。接続はプールされません。アクティブな接続は一度に 1 つだけです。

前述のように、複数の操作をデータベースに書き込む必要がある場合は遅くなる傾向があるため、プロセス全体に満足していません。これを改善する方法を探しています。一度に複数の更新を処理するバッチ操作を使用するキューを実装しようとしましたが、これは、更新値ごとに個別のキューがあり、少しオーバーヘッドがあるように見える場合にのみ可能であるようです。接続プールを追加すると、MySQL が高速化される可能性がありますが、SQLite に関しては何も変わりません。

この場合、ベストプラクティスのようなものはありますか? ORM への切り替えは役に立ちますか?

4

1 に答える 1

0

あなたは、パフォーマンスを大幅に改善するために修正できるいくつかのことについて言及しました。

  1. オブジェクトの更新ごとに新しいスレッドを作成しないでください (たとえば、ExecutorService を使用してスレッドのプールを管理します)。
  2. オブジェクトの更新ごとに新しい接続を作成しないでください。接続プールを使用します。
  3. 更新には複数のスレッド/接続を使用します (上記の #1 を参照)。
  4. JDBC バッチ処理を使用します (更新のセマンティクスにより、更新をまとめてより大きなトランザクションにできる場合)。

最初の 3 つを実行するだけでも、10 倍のスピードアップが得られる可能性があります。

于 2013-08-17T19:53:39.730 に答える