2011-09-30 113 views
2

我有一個爲用戶提供需要完成的當前任務列表的項目。任何用戶都可以完成任何任務,以確保只有一個用戶正在處理某項任務,而我需要能夠「鎖定」它。我爲此使用了SignalR,因此用戶請求鎖定任務,並且如果它們成功(即,如果沒有其他人鎖定它),則他們將能夠訪問他們需要的更多信息。ASP.NET MVC 3內存數據存儲

我的問題是如何存儲鎖定任務的列表。最初的計劃只是在Task表中添加一個額外的位字段'IsLocked',並在用戶請求鎖定和任務解鎖時更新此字段。然而,我們有大約300個併發用戶,而一個任務只需要大約3-4分鐘,這意味着數據庫上的大量額外的和微小的查詢。因此,我們想知道內存中的存儲,只需將一個任務標識列表存儲在'lockedTasks'列表中。

我曾考慮過使用緩存,但我不確定最佳的方法來做到這一點,或者即使存在更好的替代方法。如果有人在這則任何經驗的一些建議將是巨大的感謝

回答

2

我會避免內存完全因爲IIS是不與它是偉大的,如果你發現在IIS需要你的自我刷新的應用程序池的一些有點理由,你的名單已經不復存在了!

也許是MemCache系統?如果它不以上述方式鬆動的東西,但...

我會建議在中間,IO文件是快速的請求數據到數據庫,特別是如果它不在同一臺機器(女巫for安全的原因,它永遠不應該),所以......爲什麼不呢,只是爲了保留你的列表,你不使用目前着名的NoSQL數據庫

MongoDB是一個文檔數據庫,它有一個.NET Library,它很容易使用,它不像Memmory那麼快,但是比物理數據庫要快得多。

通常情況下,NoSQL數據庫將在App_Data文件夾託管,因此這將是非常快的訪問,你可以牽住存在的所有鎖定任務task_iduser_id

0

很抱歉,如果您的應用無法每隔3-4分鐘處理一次單個查詢x 300個用戶,那麼您的做法非常錯誤。只是瀏覽一個網站通常會產生比此更多數量級的查詢。

+0

BTW:計數爲3到4分鐘之間的300個查詢,而不能一個單一的查詢,他們必須更多,'GET_USER','GET_TASK_DETAILS'等...... :)但如果它**正確**設置,除了需要改進已經很好的工作,我沒有看到任何問題;) – balexandre

+0

不,我意識到單獨並不是一個巨大的數額,但所有這些額外的電話是額外的負載,應用程序已經在做的頂部。我不想給數據庫增加額外的負擔,如果我不需要 –

+0

我同意@MystereMan。你不是過早優化嗎? – JefClaes