2012-09-15 61 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个文档。