質問の1ºparte:
私のアプリケーションはTCPソケットから大量のデータを受信しており、そのデータをMySQLデータベースに保存する必要があります。これで、DBにクエリを実行するたびに新しい接続を作成し、クエリの後で接続を閉じます。
データを受信してデータベースに格納するスレッドは1つだけですが、データベースをクエリしている他のスレッドがあります(新しい接続も作成します)が、それらのスレッドは低速です(クエリはより複雑です)。問題は:
- データを受信して保存するためのスレッドだけがある場合、データは比較的高速に保存されます(より高速になる可能性があると思います)。
- クエリが遅いスレッドもあると、ストレージが遅くなりすぎます...
接続がブロックされている可能性はありますか?(DBにアクセスするたびに接続を作成して閉じています)。
質問の2ºパート:
上記の問題を解決するための私の調査では、データベースへのアクセス時間を改善できるため、接続プールを使用する必要があることがわかりました。
だから私はそれを実装する5つの可能性を見つけました:
- http://commons.apache.org/dbcp/
- http://www.mchange.com/projects/c3p0/
- http://www.javamex.com/tutorials/synchronization_concurrency_semaphore2.shtml
- http://www.snaq.net/java/DBPool/
- http://www.roseindia.net/tutorial/java/jdbc/jdbcconnectionpooling.html
それぞれをテストする時間がないので、(あなたの意見では)どれがより良いパフォーマンスを示し、解決すべき問題が少ないか知りたいです...(私はWebのどこかでdbcp
より多くの問題を引き起こす可能性があるのを見ましたそれらを解決する代わりに...)