我遇到了一个有趣的情况,我对用于我们公司项目的 RavenDB 原型(prototype)的评估期即将结束。它之所以有趣,是因为 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 适合吗?
最佳答案
非常适合什么?
全文搜索?是的。后台聚合(映射/减少)?是的。轻松复制和分片,比如扩展?是的...
临时报告?不。支持可能数千种第三方工具?不...
如果您谈论的是性能,您可能想查看 Orens 的最新帖子。他的号码与您的非常相似:http://ayende.com/blog/154913/ravendb-amp-freedb-an-optimization-story
关于ravendb - RavenDB 适合我的情况吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10196484/