2012-04-18 6 views
0

私は並列に照会する長い文字列を持っています。私がしたかったのは、文字列をより小さな単位に解析し、各ユニットをリモートデータベースに送り、それらのそれぞれについてクエリ結果を得ることでした。スレッドプールを使用してリモートデータベースを照会する

私の並列化は次のように動作します:パースされた各文字列はリモートデータベースを照会する必要があるため、スレッドプールを作成し、パースされた文字列ごとにデータベースにクエリを実行するいくつかのランナブルを追加しました。しかし、私はその場合に1つのデータベースインスタンスしか持っていません。だから、コードは、おおよそ次のようになります。

for (String s : bigQuery) 
    // this function connects to that database instance and queries the string "s" 
    queryMyDatabase(s, databaseInstance); 

残念ながら、私はただ1つのクライアント/インスタンスを使用しているため、それがあるかどうか私のスレッドプールの実装では、私のクエリの速度を増加させない、と私は思っていました。その場合に接続プールを実装する必要がありますか?リモートデータベースとしてCouchDBを使用していますが、接続プールの推奨事項はありますか?

+0

私は、すべてのスレッドで同じことをクエリしている場合は、一度に実行すれば速くなると思います。スレッドの作成、ステートメントの準備、データベースへの移動時間などのために、実際にパラレルで実行するのは実際には遅くなります。 – mezzie

答えて

3

スレッドの実装が正しいと仮定すると、すべてのクエリがDBと同じ接続を共有している可能性があります。あなたはそれが所有しているすべてのクエリを専用にしてみることができます(必要に応じてプールからDB接続を分離してください)。

もう1つの可能性は、DBがあなたの要求を十分に速く処理できないため、あなたの側の並列性があまりあなたに与えるものではないということです。

+0

返信いただきありがとうございます!はい、すべてのクエリが同じdb接続を使用しています。私はdbプールを作成しようとします。あなたはそれについて何かお勧めしますか? javaは接続プールの実装をサポートしていますか? – anvarik

+0

クイックテストでは、各スレッドで新しいDB接続を手動で開くことができます。利用可能なJava接続プールの実装はほとんどありません。http://www.tomcatexpert.com/blog/2010/03/12/explaining-jdbc-pool-high-concurrency-alternative-connection-pooling-module – maximdim

関連する問題