私は、単一の接続を使用して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
このため。他の環境では、まったく同じようなものがあります。