在使用RavenDB的应用程序启动时,我需要加载特定类型的文档的完整集合并循环它们。文档的数量应该总是很小(< 1000)。
我可以通过:
session.Query<MyType>();但我想确保我得到的结果是立即一致的。
这种情况似乎介于Load()和Query()之间,因为(我认为)查询的最终意图是一致的,而加载是打算立即一致的吗?
但是在这种情况下,不应该包含索引(没有过滤或排序),那么使用Query()是否会立即保持一致?
发布于 2014-09-02 19:42:44
Query()总是立即不一致的。session.SaveChanges()只存储到文档存储区。索引总是在稍后异步更新,尽管大多数情况下非常快!
这通常是一个糟糕的建模设计和一个文档数据库的代码气味。因为您提到的是在应用程序启动时,并且数量相对较少,所以它听起来像是引用信息,很少发生更改。您能否将所有这些都包含在一个包含List<MyType>的文档中呢?
如果做不到这一点,您可以尝试LoadStartingWith()命令,它仍然是完全ACID的,并为它提供适合所有必要文档的前缀,尽管高达1000仍然很多,而且我不知道该方法是返回所有结果还是在某个时候切断它。
如果必须使用Query(),则必须使用.WaitForNonStaleResults()的一个变体(其他变体考虑您正在等待的内容,而不是要求所有索引都完成)才能获得一致的结果,但如果文档不经常更改,这应该相当安全。虽然我确实讨厌使用几乎所有形式的这种方法,但我更喜欢使用上述任何一种更可取的方法。
https://stackoverflow.com/questions/25629308
复制相似问题