RavenDB查询<t>总是比加载<t> </t> </t>更快

时间:2013-07-05 07:08:02

标签: c# asp.net ravendb

在RavenDB网站上,当您知道文档ID时,它会显示“使用加载查询”。在我对大约1,500个对象的简单集合的测试中,Load总是较慢。为什么呢?

负载:

var doc = session.Load<Document>("Documents/123");

查询

var doc = session.Query<Document>().Where(x => x.Id == "123").SingleOrDefault();

在测试中,检索每个文档,平均查询时间为66毫秒,而负载为137。 RavenDB实例位于另一个办公室,因此时间很长。无论加载不总是更快?

修改

这是我所说的http://ravendb.net/kb/31/my-10-tips-and-tricks-with-ravendb的陈述。提示#4。这是错的吗?

2 个答案:

答案 0 :(得分:5)

根据我的理解,Load将保证返回结果(假设数据库中存在id),而如果索引尚未更新,Query可能不会返回结果。

你可以有一个场景,你插入一个记录,然后在下一行尝试使用Query检索相同的记录,然后没有得到任何回报。在这种情况下,Load将返回一条记录。

所以我猜你看到的性能下降可能与你在使用Query时通过索引查询这一事实有关,而Load正在点击实际的数据存储。

答案 1 :(得分:4)

Id检索项目时,您必需才能使用.Load(id)方法。

Load是符合ACID标准的操作。它直接从文档存储中检索文档。

QueryBASE操作,“最终一致”。它首先针对索引,在文档存储中查找文档,然后返回它们。如果文档刚刚添加并且尚未编入索引,则Id查询可能会返回null。

RavenDB 2.0添加了一项功能,可防止您Id查询。如果您尝试这样做,它将抛出异常。因此,使用Load不仅仅是一种最佳做法,而是一项要求。