我正在設計一組WCF服務的體系結構。由於部署這些服務的性質(遠程部署到客戶端站點上的許多不可管理的系統上,因此我們無法承擔數據庫服務器的管理開銷),數據存儲必須基於文件(我們正在傾向於用於文件格式的XML)。基於文件的服務和併發問題
服務的性質再次意味着單個文件中存在併發問題的可能性,並且我試圖想出一個系統,該系統在所有情況下都將正確運行,並避免嘗試在那裏讀取數據是掛起的寫入操作。
我目前的想法是採取兩種可能的路線之一。
鎖定文件
這將通過以下方式進行操作。 所有的文件操作都會有一個鎖定機制。讀取將檢查以確保在請求數據之前所需的文件當前未被鎖定。如果文件被鎖定,服務應該休眠幾毫秒(在尚未確定的範圍內)。寫入操作將設置鎖定,提交數據,然後解鎖文件。在後臺
額外的程序提供數據服務
這個版本會在後臺輔助應用程序,揭露各種公共靜態方法,通過服務調用。後臺應用程序將全權負責維護數據的內存中表示,向服務提供數據,並使文件副本與內存對象保持同步。在這方面,它的行爲就好像它是一個交易化數據庫服務器。
實現創建這些類型的服務,其中選擇將提供併發衝突的機會最小最大性能爲目標的兩個(或其他可能的)方法嗎?選項1設計的簡單性意味着我更喜歡那個選項,但我擔心由於「睡眠」操作而導致性能可能受損。
SQL Server Express的管理開銷太高? – 2009-12-17 11:26:58
只是一個想法,但據稱SQL Server Compact支持多個併發連接和事務,應該可以通過xcopy或類似的工具進行部署:http://www.microsoft.com/sqlserver/2008/en/us/compact.aspx – Murph 2009-12-17 11:30:18
我同意一個數據庫將會是一個更好的解決方案,但是這種權力要求在後端不會有平面文件以外的數據存儲。我試圖說服他們,否則,它不會發生。 :( – ZombieSheep 2009-12-17 11:37:44