如果您要在使用 Fiddler 查询期间观察数据库通信,或者像这样在查询中请求 RavenQueryStatistics...
RavenQueryStatistics stats;
var result = session.Query<Location>()
.Customize(x => x.WaitForNonStaleResultsAsOfNow())
.Statistics(out stats)
.Where(l => l.Name = "Home" && !l.Deleted);
然后你会看到如下属性:
- 是陈旧的
- 时间戳 - 查询结果未过时的时间
- IndexName - 被查询的索引
- 索引时间戳
- IndexEtag - 与索引中更新的最后一个文档对应的文档版本
- 其他与分页等有关的事情。
这是 WaitFor(几个变体)用来确定是否应该满足的信息。
因此,TL;DR 的答案是:只是被查询的一个索引。检查所有索引会很浪费。
因此,对于 WaitForNonStaleResultsAsOfNow,它说好的,让我们获取 DateTime.Now,然后在 IndexTimestamp >= 该日期之前不返回结果。
这些 WaitFor 方法在某种程度上是一种反模式——你不应该完全依赖它们来获得一致的结果,你可能应该(在某些情况下,但不是全部)重新设计你的 UI 或数据模型,以便使用 Load /按需要一致性的文档ID(保证ACID)存储。
但是,看看它是如何做到的,您会发现使用 WaitForNonStaleResultsAsOfLastWrite 可能是一个更好的主意,这会导致 Raven 客户端记录它存储的最后一个文档 E-Tag,并等待 IndexETag 被合并到指数。对于“插入数据,然后在更新的网格中显示”场景尤其如此。您无需等待所有索引完成,您只需确保您刚刚插入的一件事会出现。