RavenDB映射/减少300万条记录的批量插入的索引性能

时间:2012-09-15 11:23:11

标签: mapreduce ravendb

我目前在简单的仪表板应用程序的概念验证中使用RavenDB,该应用程序提供对系统中传入事件的聚合视图。让我们说例如用户可以看到按小时(一天),一天,一个月或一年的粒度。

我有300万个现有事件要导入&索引和我正在寻找最佳/最佳性能的方法,在经过一些不成功的尝试之后这样做。

请注意,这个问题与生成数据和索引后应用程序的性能无关,该部分非常好。

所以我有:

  • 表示事件的单个类,包含发生的事件和时间的字段(DateTime + 3字符串字段)。
  • 根据当时的事件日期和事件类型,映射/减少小时,日,月和年的索引。
  • 应用程序查询索引的每小时,每日,每月和每年值
  • 历史上,小时聚合至少需要(不是个别事件)。

如果索引不存在,我可以毫无问题地导入数据,但是如果索引存在,我会在约45分钟的索引处理后始终获得OutOfMemoryExceptions。

可以调整索引过程以及合适的值吗?

或者乐意让它建议以不同的方式解决问题。

1 个答案:

答案 0 :(得分:1)

我发现将导入过程分成批次(比如说一次一个月的所有数据),使用raven中存在的索引导入,然后等待,直到不再有任何过时的索引产生最稳定的结果。

我使用GetStatistics()。StaleIndexes结合Thread.Sleep让进程在批处理之间等待。我仍然将会话批量大小保留为每个会话1024个文档。