在使用 RavenDB 的应用程序启动时,我需要加载特定类型的完整文档集合并循环遍历它们。文档的数量应始终很小(< 1000)。
我可以通过以下方式做到这一点:
session.Query<MyType>();
但我想确保我得到的结果是立即一致的。
似乎这种情况介于 aLoad()
和 a之间Query()
,因为(我认为)查询旨在最终保持一致,而负载旨在立即保持一致?
但是在这种情况下,应该不涉及索引(没有过滤或排序),那么 usingQuery()
会立即一致吗?
在使用 RavenDB 的应用程序启动时,我需要加载特定类型的完整文档集合并循环遍历它们。文档的数量应始终很小(< 1000)。
我可以通过以下方式做到这一点:
session.Query<MyType>();
但我想确保我得到的结果是立即一致的。
似乎这种情况介于 aLoad()
和 a之间Query()
,因为(我认为)查询旨在最终保持一致,而负载旨在立即保持一致?
但是在这种情况下,应该不涉及索引(没有过滤或排序),那么 usingQuery()
会立即一致吗?
Query()
总是立即不一致。_ 仅存储到文档存储。索引总是在以后异步更新,尽管在大多数情况下非常非常快!session.SaveChanges()
这通常是一个糟糕的建模设计和文档数据库的代码味道。由于您提到的是在应用程序启动时并且数量相对较少,因此这听起来像是不经常更改的参考信息。你能把所有这些都包含在一个包含 a 的文档中List<MyType>
吗?
如果做不到这一点,你可以试试这个LoadStartingWith()
仍然是完全 ACID 的命令,并给它一个适合所有必要文件的前缀,尽管最多 1000 个仍然很多,我不知道该方法是否会返回所有结果或剪切它在某个时候关闭。
如果必须使用Query()
,则必须使用 的变体之一.WaitForNonStaleResults()
(其他变体考虑您正在等待的内容,而不是要求完成所有索引)以获得一致的结果,但如果文档不经常改变。尽管我真的很讨厌以几乎所有形式使用这种方法,但更喜欢使用上述任何一种更可取的方法。