2012-05-01 49 views
0

我想弄清楚問題陳述的解決方案。爲了簡單起見,應用程序將成爲控制檯應用程序。一個數據庫包含大約10000行。我有一個開發一個C#應用程序,它將產生10個線程,每個線程將從數據庫處理5條記錄。現在的事情是我將在另一臺機器上運行相同的應用程序。所以我們有兩個應用程序實例,每個應用程序應該處理5000行,並且它們不應該在記錄上重疊。另外我需要一箇中央控制器,它需要顯示每個應用程序上運行的線程ID。任何在這裏解決這個問題的指針都會很棒。分佈式並行批處理

+0

你打算如何在機器之間進行通信,WCF看起來像是一個明智的起點 – Jodrell

回答

3

我會在數據庫中創建一個「處理狀態」列,每個實例將通過更改記錄的狀態來標記正在處理的記錄。

另一種解決方案是使用隊列或Service Broker,並且每個實例將挑選消息來處理來自公共隊列的記錄。您將需要另一個進程來填充隊列。

使用WCF在機器之間進行通信以同步工作是恕我直言,太複雜和棘手以至於無法正常工作。

+0

如果他/她知道數據密鑰是如何均勻分佈的,他們還可以根據記錄的id在線程之間對數據集進行分區。 – nicodemus13

+0

@ nicodemus13 - 好點。 –

2

我同意Jakub。如果你希望單獨的實例直接相互通信,你應該閱讀關於兩個常規問題(http://en.wikipedia.org/wiki/Two_Generals%27_Problem),並考慮你將如何設計一個非阻塞沒有比賽的會合。