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