2017-03-11 11 views
0

私はOracle 12cデータベースを使用していますが、選択クエリの結果に対してC#でどの処理を最適な方法で繰り返すのが最適かは疑問です。私は行の値を取得した後、私はいくつかの仕事をするためにそれを使用します。C#マルチスレッドでOracleの行を反復処理する最適な方法

私の考えは、CPUのコアごとに1つのスレッドが必要だと思っていたので、各スレッドは独自の接続を持っていました(テーブルから条件(*)を選択する)/コア)行を作成し、各スレッドが作業を行います。

各テーブルには500000以上の行があります。

私はそうでしょうか、これを行うには良い方法がありますか?

ありがとうございます、私は私の英語のために謝罪しています。

+0

データで何をしようとしていますか? – tbone

+0

これは、ユーザーが何をしたいかによって異なります。たとえば、データが方程式のxである場合があります。この結果は、データベースから取得した行の値を更新するために使用され、別の表に挿入されます。 – JhonB

答えて

0

すべてが言及しています。

すべてが同じボックスにありますか? Oracleとあなたのプログラム?

もしそうでなければ、接続の数はCPUコア数の関数であってはならない(SHOULD NOT)。これは、ネットワークインフラストラクチャ、プログラムとボックスとデータベースとの間の接続数によって異なります。時には1つの物理接続でも複数のDB接続でより高いスループットを得ることは可能ですが、独自の制限があり、DBが1つの要求に最大リソースを提供せず、複数の要求にリソースを共有し、要求を生​​成するには、結果の各行ごとに時間がかかります。しかし、これはベンチマークによって最もよく決定されます。

プログラムとデータベースが同じボックスを共有している場合は、別のシナリオです。このような場合、私は一般的にアプリケーションの側で利用可能なコアの半分以下を使用します.DBは処理のためにコアを必要とし、結果行の数が連続して多くなります。

Itあなたが行で次に何をするかによっても異なります。

+0

私の開発環境では、すべて同じ箱に入っていますが、実際には、少なくとも1つのデータベースボックスが必要です。 私が上記のtboneにコメントしたように、私が行を使って次に何をするかは、ユーザーが何をしたいかによって異なります。 ご返信ありがとうございます。 – JhonB

+0

処理するアプリケーションに500,000行を戻す必要がありますか?データベースでの処理はどうですか? – BobC

+0

多分、データベース上でそれを行う可能性があるかもしれませんが、最終的なユーザがDSL上で指定できるすべての処理魔法を簡単に指定することはできません。私はPL/SQLプログラミングについて話していると考えていますか? – JhonB

関連する問題