0

並行してクエリする長い文字列があります。私がやりたかったのは、文字列を小さな単位に解析し、各単位をリモート データベースに送信して、それぞれのクエリ結果を取得することです。

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

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

残念ながら、スレッドプールの実装によってクエリ速度が向上することはありません。1 つのクライアント/インスタンスしか使用していないためではないかと考えていました。その場合、接続プールを実装する必要がありますか? リモート データベースとして CouchDB を使用しています。接続プールに関する推奨事項はありますか?

4

1 に答える 1

3

スレッドの実装が正しいと仮定すると、問題は、すべてのクエリがDBへの同じ接続を共有していることである可能性があります。独自の個別のDB接続(必要に応じてプールから)をすべてのクエリ専用にすることができます。

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

于 2012-04-18T14:20:28.493 に答える