2011-06-29 33 views
0

我有一個asp.net網站,存儲數據庫表中的事件。然後我有一個Windows服務應用程序讀取這些事件並執行適當的操作。目前,兩個進程可能同時插入和刪除同一個表中的記錄。如何區分這兩個過程?

什麼是更好的模式來開發這樣一個系統,以確保兩個人不會同時在同一張桌子上工作?

+0

做什麼DBMS使用? – abatishchev

+0

@abatishchev我使用mysql – Roman

回答

1

我不確定模式,但我會做一個WCF服務,讓兩者都使用它來訪問數據。然後在改變(或讀取)表格內容的所有方法之間共享一個通用鎖定對象。

+0

我可以將asp.net應用程序調用Web服務方法調用到同一臺機器上的WCF服務,還是WCF機器必須位於單獨的服務器上? – Roman

+0

它可以在同一臺機器上。它只會在不同的端口上。 –

0

對於這種情況,我使用一種模式來確保數據不能同時更新。

我總是在表中添加一個特殊列,通常是'timestamp'類型的'LastModified'。添加或插入行時,我總是設置此列。

當我來更新記錄時,我確保存儲過程檢查我傳入的數據庫中存儲的值。如果這些不同,則另一個用戶或進程已更改此行,並引發併發性錯誤。

這可以合併到調用過程或在您的服務中處理。

0

這可能是一個體繫結構問題,而不是其他任何事情。

爲什麼你需要兩個刪除記錄的進程?

您通常不需要兩個不同的進程來對同一個表中的CRUD數據進行處理。你可以做的一件事是用服務包裝數據庫/表,然後讓需要使用數據的所有進程使用該服務。然後該服務可以處理呼叫的序列化。無論哪種方式,直接使用數據庫將只有一個進程。

此外,這聽起來像你對我在事件外包類型的架構,這讓我不知道爲什麼你需要刪除擺在首位的記錄是......

+0

我是事件採購,但我不是那種類型的建築師,這個問題適合這種類型的設計。也不是兩個進程都刪除記錄。只有一個。感謝您的迴應。 – Roman