/ /パフォーマンスの向上を考慮して、複数のスレッドで1つのデータベース結果セットを読むことは賢明ですか?[閉じる] - データベース、マルチスレッド、パフォーマンス、Oracle

パフォーマンスの向上を考慮して、複数のスレッドで単一のデータベース結果セットを読むことが賢明ですか?[閉じる] - データベース、マルチスレッド、パフォーマンス、Oracle

私は、単一の接続を使用してJavaでOracleデータベースのクエリを実行します。この単一の結果セットから読み込むのではなく、複数のスレッドを使用する方が速いでしょうか?

私は自分自身の読み取り操作のスレッドの安全性を実装すると考えています。

単に私は、複数のスレッドとの単一の接続で単一の結果セットから何らかの性能向上を読み取ることができるのだろうか?

回答:

回答№1は2

複数のスレッドとの単一の接続で単一の結果セットから何らかの性能向上を読み取ることはできますか?

これらのスレッドがすべて読んでいる場合は、いいえ。複数のスレッドでは、同時読み込みを防ぐために何らかの同期をとる必要があるため、速度を遅くすることさえありますので、複数のスレッドが順番に実行されてしまうことになります。それを作成した人。

今、あるデータベースから読み込みたいプロデューサはデータベースから読み込み、データをキューに入れます。コンシューマスレッドは、キューから読み取り、他のデータベースに書き込みます。

したがって、プロデューサはこれを行います:

while not end of data
read record
put record on input queue
end-while
mark end of queue

消費者:

while not end of queue
remove item from input queue
write record to database
end-while

この構成では、非常に大きなスレッドは互いに独立して動作するため、通常はこのような並行アクセス用に最適化されたデータ構造である共有キューを除いて、パフォーマンスの向上が得られます。 BlockingCollection このため。他の環境では、まったく同じようなものがあります。