2012-04-17 113 views
2

我有一個有趣的情況,那就是在我們公司的項目中使用RavenDB原型的評估期結束時。有趣的是,99.99%的時間,我認爲它適合Raven的甜蜜點;它會經常以小批次重複查詢新數據(一次有< 1000個文檔)。RavenDB適合我的情況嗎?

但是,我們確實有一個初始加載期,我們需要加載兩天的數據,在某些情況下可能需要加載三百萬條(或更多)的數據。

的圖可以幫助:

enter image description here

它的傳輸服務,它負責獲取正確的數據出來的三個生產數據庫,並將其存儲在RavenDB。 WCF服務將查詢這些數據並將其提供給客戶端。

一旦我們將數百萬條記錄/文檔加載到RavenDB中,我們很少再需要這樣做。

作爲初始負載測試,在具有4GB RAM和兩個處理器的計算機上,讀取初始數據需要超過23分鐘。在這種情況下,它只有大約128萬條記錄。我從這個初始加載中消除了所有的異步操作,因爲我希望每個讀操作都不會受到其他讀操作的干擾。我通過這種方式找到了最好的結果。

enter image description here

我知道這是不推薦,但要做到這一切,我不得不改變那些不建議更改的設置:

我不得不增加超時:

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是否合適?

回答

1

從你告訴我們在其他的答案意見,我相信以服務WCF客戶端足夠快的唯一的好辦法,是實際存儲在內存中的一切,所以只是你現在做的方式。

的問題,如果RavenDB是一個非常適合這種情況取決於是否從面向文檔性質等方式你的數據模型的好處。因此,如果您的動態數據需要關係數據庫中的某種EAV和大量連接,那麼RavenDB可能是一個非常好的解決方案。但是,如果您只需要一些可以輸入平坦數據的東西,那麼我會在這裏使用關係數據庫。在許可成本和易用性方面,您可能還想看看PostgreSql,因爲這是一個非常棒的數據庫,它完全免費。

+0

謝謝。我想我們在初始加載之後會從Raven中受益,特別是因爲我們不需要創建數十個表格。看起來我們要使用它,但它還不是最終的。 – 2012-04-18 20:06:15

2

很適合什麼

全文檢索?是。背景聚合(地圖/縮小)?是。容易複製和分片,比例縮放?是...

臨時報告?不支持可能有數千種第三方工具嗎?沒有...

如果你在談論性能,你可能想看看Orens最新的文章。他的號碼與您的號碼非常相似:http://ayende.com/blog/154913/ravendb-amp-freedb-an-optimization-story

+0

一個不錯的選擇,以作爲WCF服務的數據源。當WCF服務啓動時,它需要從Raven加載大量數據。之後,每隔幾分鐘就會收到少量數據。 – 2012-04-18 01:43:49

+0

啊,對不起。我沒有意識到每次服務啓動時都需要加載數據。我只是認爲這是一次性的最初導入,你正在測量性能指標......對此抱歉。 – 2012-04-18 07:18:36

2

從我對您的問題的理解中,您需要「準備」WCF Web服務。要做到這一點,你閱讀1。2M文檔從RavenDB(大約23分鐘),並將其保存在內存中,以便WCF服務可以從它們提供查詢,是嗎?或者我錯過了什麼?

爲什麼不能讓WCF服務發送它的查詢烏鴉一個-AT-A-時間?即對於從客戶端獲取的每個查詢,請要求RavenDB進行查詢?

+0

這是正確的。你的建議是有道理的,它可能有用。但是,我的理解是,我們可以有12個客戶同時訪問該服務,每個客戶都需要相當大量的數據。隨着我們從瑞文看到的閱讀時間,這會造成不可接受的延遲。 – 2012-04-18 01:40:47

+0

鮑勃,你爲什麼需要在內存中的所有數據,我的意思是,你不能在他們一個WCF服務請求的客戶端的客戶,無論如何,對不對?你真的需要客戶端的所有數據還是隻需要聚合它們? – 2012-04-18 07:27:41

+0

@BobHorn客戶端將執行什麼類型的查詢,他們可以爲每個查詢拉回多少數據?客戶查詢是否已分頁? – 2012-04-18 08:58:57