2012-04-02 38 views
3

我們爲我們的網站使用RavenDB。該網站將所有數據加載到內存(不是很多),以便能夠處理大量負載。我們將數據加載到後臺線程中,後臺線程會定期檢查數據庫(RavenDB + sqlserver)是否存在任何新數據,以及是否將數據加載到內存中。ravendb長時間運行會話

我們已經嘗試了很多東西來解決每個會話30次查詢到RavenDB的煩人請求限制。由於Raven沒有任何機制在完成檢查/加載循環的一次迭代後「重置」會話,並且由於無法告訴Structuremap,所以我們確實想要新的會話,即使我們是仍然像以前一樣,我們有點卡住了。

最後,我重新設計了一個架構,使得我們的倉庫現在使用RavenSessionProxy,該架構映射爲我們加載,可以通過加載/獲取循環重置(當我們重置它時手動創建新的documentsession)。

這真的是唯一的方法嗎? Raven中沒有任何機制可以說:「嘿,先生,Session,我現在和你在一起,自己刷新,準備下一次給你打電話,並且準備好新鮮」)或者告訴Structuremap「Hey,SM!Next當我問你一個IDocumentSession,給我一個新的,我厭倦了這個舊的「

回答

1

AndreasKnudsen, RavenDB會話被設計爲相對短暫的。如果你需要讓他們保持一段時間,你可能做錯了什麼。 請注意,RavenDB已經做了很多工作以確保它很快速,因此不需要將內容加載到內存中。

您可以設置session.Advanced.MaxNumberOfRequests,這會增加您可以執行的請求數量,但這也意味着您將在內存中保留更多內容。

+0

MaxNumberOfRequests只會推遲問題,重點是我希望會話永遠持續下去,只是定期重置自己。不是所有*用例都是針對單個請求執行多達30個查詢然後死亡的。我的背景加載是*假設*永遠生活 – AndreasKnudsen 2012-04-02 11:28:39

4

正如Ayende指出的,會議應該是短暫的。取代依賴於會話的後臺作業,讓它依賴於IDocumentStore,然後爲每次運行創建/處理會話。在啓動時,IDocumentStore可以是插入到容器中的單例。