我有一個有趣的情況,那就是在我們公司的項目中使用RavenDB原型的評估期結束時。有趣的是,99.99%的時間,我認爲它適合Raven的甜蜜點;它會經常以小批次重複查詢新數據(一次有< 1000個文檔)。RavenDB適合我的情況嗎?
但是,我們確實有一個初始加載期,我們需要加載兩天的數據,在某些情況下可能需要加載三百萬條(或更多)的數據。
的圖可以幫助:
它的傳輸服務,它負責獲取正確的數據出來的三個生產數據庫,並將其存儲在RavenDB。 WCF服務將查詢這些數據並將其提供給客戶端。
一旦我們將數百萬條記錄/文檔加載到RavenDB中,我們很少再需要這樣做。
作爲初始負載測試,在具有4GB RAM和兩個處理器的計算機上,讀取初始數據需要超過23分鐘。在這種情況下,它只有大約128萬條記錄。我從這個初始加載中消除了所有的異步操作,因爲我希望每個讀操作都不會受到其他讀操作的干擾。我通過這種方式找到了最好的結果。
我知道這是不推薦,但要做到這一切,我不得不改變那些不建議更改的設置:
我不得不增加超時:
documentStore.JsonRequestFactory.ConfigureRequest += (e, x) => ((HttpWebRequest)x.Request).Timeout = ravenTimeoutInMilliseconds;
在Raven.Server.exe.config,我不得不增加頁面大小(以int.MaxValue):
<add key="Raven/MaxPageSize" value="2147483647"/>
而在我的檢索方法,我只好用取(int.MaxValue):
return session.Query<T>().Where(whereClause).Take(int.MaxValue).ToList();
記住,這是所有爲一次性的,初始加載。之後,很快就會有很多查詢,而且經常發生。我還應該注意到,每個文檔都是RavenDB中獨立的。沒有可管理的關係。
知道這一切,RavenDB是否合適?
謝謝。我想我們在初始加載之後會從Raven中受益,特別是因爲我們不需要創建數十個表格。看起來我們要使用它,但它還不是最終的。 – 2012-04-18 20:06:15