2012-09-15 57 views
2

我目前在簡單儀表板應用程序的概念證明中使用RavenDB,該應用程序提供了對傳入事件進入系統的聚合視圖。比方說,例如,用戶可以看到按小時(一天),日,月或年的粒度。爲300萬條記錄批量插入RavenDB map/reduce index性能

我有300萬個現有活動來導入&索引,我正在尋找最佳/最高性能的方式去完成這一嘗試。

請注意,這個問題不是關於應用程序的性能,一旦數據和索引已經生成,那部分是非常好的。

所以我必須:

  • 表示事件,發生了什麼事域和時(日期時間+ 3個字符串字段)的類。
  • 基於當時的事件日期和事件類型來映射/減少小時,天,月和年的索引。
  • 該應用程序查詢小時,每日,每月和每年的指標
  • 從歷史上看,每小時需要的聚合最少(不是個別事件)。

我可以在沒有問題的情況下導入數據,前提是索引不存在,但是如果索引存在,那麼在大約45分鐘的索引處理後,我會一直得到OutOfMemoryExceptions。

索引過程是否可以調整?適合的值是什麼?

或者很樂意讓它從不同的方式來解決問題。

+0

您的進程是以32位還是64位運行? –

+0

馬特,其32位上都Win2k3R2&Win2k8R1 –

+0

測試RavenDB不能與32位很好的工作,但你可以調整一些設置,以使其更好地工作。請參閱http://ravendb.net/docs/faq/low-memory-footprint和http://ravendb.net/docs/server/administration/configuration –

回答

1

我發現,分離導入過程成批(比方說在一個時間的所有數據爲一個月),與索引以現有的烏鴉,然後等待,直到不再有任何過時的指標進口生產的最穩定的結果。

我使用GetStatistics().StaleIndexes與Thread.Sleep相結合,讓批量間的過程等待。我仍然將會話批量大小保留爲每個會話1024個文檔。