2

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

我有 300 万个现有事件要导入和索引,我正在寻找最好/最高效的方法来做这件事,经过几次不太成功的尝试。

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

所以我有:

  • 代表事件的单个类,具有发生的事件和时间的字段(DateTime + 3 个字符串字段)。
  • 根据当时的事件日期和事件类型映射/减少小时、日、月和年的索引。
  • 该应用程序查询索引以获取每小时、每天、每月和每年的值
  • 从历史上看,至少需要每小时汇总(而不是单个事件)。

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

可以调整索引过程吗?合适的值是多少?

或者很高兴它建议以不同的方式解决问题。

4

1 回答 1

1

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

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

于 2012-09-22T04:47:43.813 回答