0

私のJavaアプリケーションは、起動時にさまざまなMySQLテーブルから情報を収集する必要があります。データベース情報がないと、アプリケーションを使用できません。したがって、起動には最大で数秒かかります(可能な場合はキャッシュを使用してこの時間を短縮します)。

  1. これらのSQLクエリのそれぞれを別々のスレッドで実行して、複数のCPUコアを搭載したコンピューターが最終的にアプリケーションをさらに高速に起動できるようにすることは悪い習慣でしょうか(保証はありません)。
  2. この「システム」を実装する前に知っておく必要のある短所はありますか?
4

5 に答える 5

1

接続プールとスレッドプールのサイズが適切に調整されていることを確認してください

于 2012-09-07T12:28:29.303 に答える
1

いいえ、確かに違います。たとえば、TomcatのようなJava Webサーバーは、複数のユーザーがWebアプリケーションに同時にアクセスする場合に常にそれを実現します。

トランザクションを使用してデータの整合性を適切に管理していることを確認してください。

于 2012-09-07T12:23:55.883 に答える
1

それはあなたが試さなければならないものです。

各テーブルから比較的少数の行を戻す場合、各スレッド (または jdbc 接続プール) でデータベース接続を確立するのに、1 回確立してクエリを実行するよりも時間がかかる可能性があります。

幸いなことに、コードはそれほど多くないので、すぐに試すことができるはずです。

于 2012-09-07T13:52:50.820 に答える
1

データベース セッションは、比較的高価なオブジェクトです。少数のスレッドに並列化することは問題ありませんが、1000 個のテーブルがある場合は 1000 個のスレッドを作成しないでください。

さらに、マルチスレッド化には複雑さが伴い、メンテナンス コストが膨大になる可能性があります (たとえば、競合状態に起因する再現不可能な問題)。したがって、測定を行い、速度が数パーセントしか向上していないことがわかった場合は、すべて元に戻してください。

表示される遅延を回避する方法は他にもあります。たとえば、1 つのコマンド バッチで複数のクエリを送信できるため、コードとデータベース間の往復回数を減らすことができます。

于 2012-09-07T12:30:20.587 に答える
1

要求をシリアルに実行するのではなく、並列化して実行することをお勧めします。

データソースを使用するように注意してください。各リクエストは、データベースへの独自の接続を使用する必要があります (異なるスレッド間で接続を同時に共有しないでください)。

于 2012-09-07T12:25:28.097 に答える