我有一个有趣的情况,我即将结束一个 RavenDB 原型的评估期,该原型可用于我们公司的一个项目。有趣的原因是 99.99% 的时间,我相信它符合 Raven 的最佳点;它经常以小批量(一次< 1000个文档)重复查询新数据。
但是,我们确实有一个初始加载期,我们需要加载两天的数据,在某些情况下可能是 300 万(或更多)条记录。
图表可能会有所帮助:
传输服务负责从三个生产数据库中获取正确的数据并将其存储在 RavenDB 中。WCF 服务将查询此数据并将其提供给其客户端。
一旦我们将数百万条记录/文档初始加载到 RavenDB 中,我们将很少需要再次这样做。
作为初始负载测试,在具有 4GB RAM 和两个处理器的机器上,读取初始数据只需要 23 多分钟。在这种情况下,它只有大约 128 万条记录。我从这个初始加载中消除了所有异步操作,因为我希望每次读取都不会受到其他读取操作的干扰。我以这种方式找到了最好的结果。
我知道不建议这样做,但要完成这一切,我必须更改不建议更改的设置:
我不得不增加超时:
documentStore.JsonRequestFactory.ConfigureRequest += (e, x) => ((HttpWebRequest)x.Request).Timeout = ravenTimeoutInMilliseconds;
在 Raven.Server.exe.config 中,我不得不增加页面大小(到 int.MaxValue):
<add key="Raven/MaxPageSize" value="2147483647"/>
在我的检索方法中,我不得不使用 Take(int.MaxValue):
return session.Query<T>().Where(whereClause).Take(int.MaxValue).ToList();
请记住,这只是一次性的初始加载。在那之后,它是许多查询,快速且经常。我还应该注意,每个文档在 RavenDB 中都是自包含的。没有需要管理的关系。
了解了这一切,RavenDB 是不是很合适?