我有一個asp.net網站,存儲數據庫表中的事件。然後我有一個Windows服務應用程序讀取這些事件並執行適當的操作。目前,兩個進程可能同時插入和刪除同一個表中的記錄。如何區分這兩個過程?
什麼是更好的模式來開發這樣一個系統,以確保兩個人不會同時在同一張桌子上工作?
我有一個asp.net網站,存儲數據庫表中的事件。然後我有一個Windows服務應用程序讀取這些事件並執行適當的操作。目前,兩個進程可能同時插入和刪除同一個表中的記錄。如何區分這兩個過程?
什麼是更好的模式來開發這樣一個系統,以確保兩個人不會同時在同一張桌子上工作?
我不確定模式,但我會做一個WCF服務,讓兩者都使用它來訪問數據。然後在改變(或讀取)表格內容的所有方法之間共享一個通用鎖定對象。
我可以將asp.net應用程序調用Web服務方法調用到同一臺機器上的WCF服務,還是WCF機器必須位於單獨的服務器上? – Roman
它可以在同一臺機器上。它只會在不同的端口上。 –
對於這種情況,我使用一種模式來確保數據不能同時更新。
我總是在表中添加一個特殊列,通常是'timestamp'類型的'LastModified'。添加或插入行時,我總是設置此列。
當我來更新記錄時,我確保存儲過程檢查我傳入的數據庫中存儲的值。如果這些不同,則另一個用戶或進程已更改此行,並引發併發性錯誤。
這可以合併到調用過程或在您的服務中處理。
這可能是一個體繫結構問題,而不是其他任何事情。
爲什麼你需要兩個刪除記錄的進程?
您通常不需要兩個不同的進程來對同一個表中的CRUD數據進行處理。你可以做的一件事是用服務包裝數據庫/表,然後讓需要使用數據的所有進程使用該服務。然後該服務可以處理呼叫的序列化。無論哪種方式,直接使用數據庫將只有一個進程。
此外,這聽起來像你對我在事件外包類型的架構,這讓我不知道爲什麼你需要刪除擺在首位的記錄是......
我是事件採購,但我不是那種類型的建築師,這個問題適合這種類型的設計。也不是兩個進程都刪除記錄。只有一個。感謝您的迴應。 – Roman
做什麼DBMS使用? – abatishchev
@abatishchev我使用mysql – Roman