在RavenDB中加载完整集合

本文关键字:集合 加载 RavenDB | 更新日期: 2023-09-27 18:20:34

在启动使用RavenDB的应用程序时,我需要加载特定类型的完整文档集合并循环使用它们。文档的数量应始终较小(<1000)。

我可以通过:

session.Query<MyType>();

但我想确保我得到的结果是一致的。

这种情况似乎介于Load()Query()之间,因为(我认为)查询最终是一致的,而负载是立即一致的?

但在这种情况下,不应该涉及索引(不需要过滤或排序),所以使用Query()会立即一致吗?

在RavenDB中加载完整集合

Query()总是立即不一致。session.SaveChanges()仅存储到文档存储。索引总是在以后异步更新,尽管在大多数情况下非常非常快!

这通常是一个糟糕的建模设计和文档数据库的代码气味。由于您提到的是在应用程序启动时,而且数量相对较少,所以听起来像是很少更改的参考信息。你能把所有这些都放在一个包含List<MyType>的文档中吗?

如果做不到这一点,您可以尝试LoadStartingWith()命令,它仍然是完全ACID的,并为它提供适合所有必要文档的前缀,尽管最多1000个仍然是很多,我不知道该方法是否会返回所有结果,或者在某个时候将其截断。

如果必须使用Query(),则必须使用.WaitForNonStaleResults()的其中一个变体(其他变体考虑您正在等待的内容,而不是要求所有索引都完整)才能获得一致的结果,但如果文档很少更改,则这应该是相当安全的。尽管我真的很讨厌使用这种几乎所有形式的方法,但我更喜欢使用上面任何一种更可取的方法。