2016-03-21 11 views
3

私はこれらの質問をしてきた - choose a db connection poolIs DB connection pooling all that importantjava - DataSource for standalone application - no application serverスタンドアロンJavaマルチスレッドアプリケーション用のDb接続プールは意味がありますか?

、それらは私の好奇心を答えていません。

私が持っているものは、オフロードウィンドウまたはローロードウィンドウでDBへのデータロードを実行するが、限られた時間内に完了するのに十分速くなければならないスタンドアロンのマルチスレッドJavaアプリケーションです。

Javaスレッドの数は設定可能ですが、最大数に制限されています。

DB接続に関しては、現在、スレッドごとに新しい接続を取得しており、そのスレッドが完了すると閉じます。私のサードパーティDB接続プールをしている使用しない理由、

最大Javaスレッドの1.Numberが一定限度に制限され、その限界は2.Avoid不要DB(そのDB2データベース)

によって管理可能です

(場合には、プール には接続が無料ではない)DBプールからの接続を待つとの衝突を回避したり、複数のスレッド間で回を待つので、私のシナリオでは、DB接続プールは、本当に必要とされるであろうか、私はどんな課題に直面しています長期的には、それはちょうど機能を持っていいですか?

リクエスト/スレッドの数が事前にわからないため、接続プールはウェブアプリケーションの場合に意味がありますが、固定された最大スレッドを持つスタンドアロンアプリの利点についてはわかりません。

私は、必要に応じてC3P0接続プールを使用することを考えています。

+0

潜在的重複; http://stackoverflow.com/questions/27318792/would-a-connection-pool-benefit-a-multithreaded-java-program?rq=1 –

答えて

2

接続プールを使用すると、接続プールを使用しない場合に比べていくつかの利点があります。プールで接続が利用可能あるスレッド開始時には

  1. 場合、スレッドは、起動時に新しい接続を開くためにブロックされません。
  2. スレッドのいずれかが完了したときに接続をプールに戻すことができるため、(アプリケーションの実行によって)クライアント接続が維持されるため、データベースサーバーの負荷が軽減されます。代わりに複数回を設定し、解体されたの

単にC3P0と私はあなただけclose信じて(自分の述べたデータベースの制限に合わせ、プールを確認してくださいあなたの接続を返す作るためにあなたのプール内の接続の最大数を制限Connection、これはPooledConnectionで囲まれています)。

1

一般に、接続プールは、接続を再利用するため、接続のオープンやクローズの代わりに複数の接続を開き、これらの接続を管理します(たとえば、特定の時間、常に利用可能な接続のプールを持っている、...)。

あなたのアプリケーションが接続プールから恩恵を受けるかどうかはわかりません(ベンチマークしたいかもしれません)。固定数のスレッドを持つスタンドアロンアプリケーションを使用している場合は、接続を再利用できる場合など、アプリケーションのパフォーマンスには接続プールが役立ちます。つまり、アプリケーションが最初にすべてのスレッドを開始し、各計算を終了して接続を閉じると、接続プールは役に立たない可能性があります。しかし、スレッドがランダムに開始され、閉じられていると、メリットがあります。

使用する接続プールの実装に関して、私はC3P0とHikariCP(https://brettwooldridge.github.io/HikariCP/)を個人的に使用しました。私は非常に後者をお勧めすることができます - しかしそれは単なる個人的な意見です。

+0

接続のオープンとクローズの時間を指摘してくれてありがとう。すべてのアプリケーションスレッドは始めに開始され、ターゲットマシンの最適なスレッド数を確定すると、スレッド数が多かれ少なかれ固定されます。 –

関連する問題