質問

用していただきたいと思い、コミュニティの視点です。している場合はプロセスに深くDB/IO行き、どのスマートされているの並列化に個々のプロセス経路のタスク並列のですか?

また利用したいと思い一例---している場合は束の項目は、以下の様なオペレーションを行っ

  1. クエリのDBリストの項目
  2. いくつかの集計作業グループに所定の事項に基づく動的パラメータのリストに追加します
  3. 各グループ化の結果、データベースに問い合わせのために何かに基づく集計結果です。
  4. 各グループ化の結果、いくつかの数値計算(3と4のような出来事が起きないようにと順次).
  5. いくつかの挿入や更新の結果を計算し#3
  6. いくつかの挿入と更新のための各項目に戻#1

論理的に言えば、並列化グラフの作業手順#3,#5,#6つの項目がないのにしていけるようになっています。しかし、それぞれの待ってるデータベースのsqlサーバーを細やかにできるでし処理などのSQLサーバましょう。

していきたいと思っている論理的に分配する作業の機械で処理することで検索したい単語を入力して下データベースのリレーを待たずしも当社ます。もちろん、一部の模擬試作し代替dbに電話ます。眠いもう一変する。SpinWait、百倍高速の並列版waaaaayよりも早く現在の実装で完全にシリアルな並列。

何が私たのかひずみのSQLサーバーの...ある配慮ばいいのかを検討しながりかねないと思いますのでこですか。

役に立ちましたか?

解決

は別のオプションは、最初のグループのためのステップ4と同時に起こって第二のグループのために、ステップ3にパイプラインを作成するであろう。手順5でアップデートを重ねることができた場合や、あまりにもそれを行います。あなたは、同時SQLのアクセスと処理を行うことができますが、2つのだけの同時操作が一度に行く必要があるため、データベースを過剰に課税していないこの方法。

ですから、さらに処理を必要とするグループのコレクションを取得するには、ステップ1と2を順次(私は推測)を行います。その後。あなたのメインスレッドが開始されます:

for each group
  query the database
  place the results of the query into the calc queue

第二のスレッドサービスの結果キューます:

while not end of data
  Dequeue result from calc queue
  Do numeric calculations
  place the results of the query into the update queue

第三のスレッドサービス更新キューます:

while not end of data
  Dequeue result from update queue
  Update database

System.Collections.Concurrent.BlockingCollection<T>は、この種のもののために非常に有効なキューです。

ここでいいことは、あなたがしたい場合は、SQL Serverはより多くの同時トランザクションを処理できる場合は、複数の計算スレッドやクエリ/更新スレッドを追加することによって、それを拡張することができた場合ということです。

私は非常に良い結果で、毎日マージ/アップデートプログラムではこれに非常に似たものを使用します。その特定のプロセスは、SQLサーバーを使用するのではなく、標準的なファイルI / O、その概念は非常にうまく変換されません。

他のヒント

パラレルバージョンがはるかに高速シリアルバージョンよりもある場合はもちろんのタスクで、実行している場合を除き、

、私はいくつかの他の重要なまたはタイムクリティカルな業務に比べて優先度が低いです...あなたのSQLサーバーへの負担を心配しないだろうそれはまた、DBサーバ上で実行されます。

タスクのご説明はよく私が理解したが、それはほとんどより多くのこれらのタスクのデータベースで直接実行されている必要がありますように聞こえるされていません(私はそれは不可能で作る細部がある推測?)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top