2012-05-01 31 views
0

問題文の解決策を見つけようとしています。簡単にするため、アプリケーションはコンソールアプリケーションになります。データベースには約10000行が含まれています。私は10スレッドを生成し、各スレッドはデータベースから5レコードを処理するC#アプリケーションを開発する必要があります。今は、別のマシンで同じアプリケーションを実行します。したがって、アプリケーションのインスタンスが2つあり、各アプリケーションは5000行を処理する必要があり、レコードに重複しないようにしてください。また、私は各アプリケーションで実行されているスレッドIDを表示する必要がある中央コントローラを持つ必要があります。この問題を解決するためのここのポインタは素晴らしいでしょう。分散並列バッチ処理

+0

どのようにマシン間で通信する予定ですか、WCFは合理的な出発点のようです – Jodrell

答えて

3

DBに「処理ステータス」列を作成し、各インスタンスはレコードのステータスを変更して処理中のレコードをマークします。

もう1つの解決策は、キューまたはService Brokerを使用し、各インスタンスがメッセージを選択して共通キューからレコードを処理することです。ここにキューを移入する別のプロセスが必要です。

WCFを使用して作業を同期させるためにマシン間で通信することは、IMHOが複雑すぎて正しく動作するのは難しいです。

+0

データキーが一様に分散される方法を知っている場合、レコードのIDに基づいてスレッド間でデータセットを分割することもできます。 – nicodemus13

+0

@ nicodemus13 - 良い点。 –

2

私はJakubに同意します。別々のインスタンスが互いに直接通信するようにするには、Two Generalsの問題(http://en.wikipedia.org/wiki/Two_Generals%27_Problem)を読んで、非ブロッキングをどのように設計するかを考えてくださいレースなしのランデブー。