我正在爲Sql Server中的C#Asp.Net MVC3網站實現內容數據庫。從SQL Server 2008 R2優化內存中的分層結構緩存
表結構基本上是鄰接表,但是我的文件和文件夾分成FileSystem
:這樣我就可以分離單個用戶/帳戶內容:
FileSystem:
[ID]
Folder:
[ID]
[FileSystemID]
[ParentFolderID] (null)
[Name]
File:
[ID]
[FileSystemID]
[ParentFolderID]
[Name]
[Content]
允許這裏的低效正常化,這是很基本的東西。
我也有專欄[Created]
和[Modified]
在適用情況下。
這些文件將用於在Asp.Net MVC 3站點中執行頁面的動態標記,其中每個請求都將根據原始Asp查找更具體的css/image文件的品牌版本。網絡MVC內容網址 - 例如"~/Content/Site.css"
可能會變成"~/[dynamic content root]/[accountid]/[theme]/Site.css"
。
這個基本機制已經可以工作了,我主要關心的是緩存和版本控制。
顯而易見,不是一直在爲相同的文件和文件夾探測數據庫,而是建立內容文件系統的內存緩存以加速內容查找和傳送。但是,我需要一種有效的方法來確保Web場中的所有Web服務器都檢測到帳戶虛擬文件系統(更改/刪除/創建的任何文件或文件夾)的更改,以確保主題更改立即反映在所有服務器上,下一個請求。
由於分層查詢可能很昂貴,因此我每次都打折運行所有在文件系統中創建的/上次修改的日期的健全性檢查。然而,我所考慮的是整個文件系統上的一個級聯版本號。
因此,任何文件系統中的更改會導致文件系統本身上的版本號增加,並且可能會從更改的項上增加所有父文件夾。因此,讀者可以簡單地附加到整個文件系統或其特定部分,並且每次運行一個便宜的查詢以根據緩存版本檢查當前版本。
這確實會減慢更新速度,但我期望文件系統很少發生變化,而且它會被頻繁讀取。我唯一關心的就是更新的併發性,以及如何管理它。
這會是一個好方法嗎?有什麼更好的,我可以考慮?
任何想法歡迎!
嗯,是的,我確實懷疑這種使用是否會成爲答案。我已經看過它,並在db修改中被阻止,儘管這是一個全新的數據庫,所以我可以逃避它。我會有一個戲,看看我如何繼續,謝謝。 – 2011-04-18 20:11:58
@Andras Zoltan我用這些功能取得了相當大的成功。我從來沒有遇到過啓用經紀人服務的麻煩,或者當然我不需要親自接觸任何DBA的圈子,因爲我在一家小公司。 – Quesi 2011-04-18 20:53:54
我需要更多地考慮這一點:我正在使用Repository模式;所以我很有興趣看看我是如何將這一特定功能納入其中的 - 存儲庫接口將不得不公開緩存依賴端點;但這是特定於ASP.net的。啊多層設計的詛咒。 – 2011-04-19 20:42:06