我有一个应用程序:
- 使用嵌入式 RavenDB 数据库
- 使用单调读取选项
- 使用静态索引
我注意到,当应用程序启动时,索引都是暂时过时的,即使在应用程序关闭(干净地)前一次运行时它们不是过时的。
例如,我运行应用程序,插入 10 条记录,然后等待索引更新。我查询它并查看我期望的结果。然后我关闭应用程序,重新启动它,然后查询,我没有得到任何结果。一秒钟后,索引已更新,我现在可以返回结果。如果我重复这个,有时我会得到 10 个结果,有时会得到 0 个结果,有时会得到 2 个结果。
我的假设是,在时间 T 查询索引时,我总是会在 T + 1 看到“至少一致”的结果。但是,如果服务器在此期间重新启动,我似乎在 T + 1 看到不太一致的结果。这是不是最终的一致性,而是最终的不一致!:)
我的问题是:
- 我的假设是错误的/愚蠢的吗?
- 有没有办法防止这种情况发生?
- 这种行为只是一个开始的事情,还是可能随时发生?例如,我是否可以渲染 10 个结果,然后刷新 0 个结果,然后再次刷新 10 个结果,因为 Raven 决定要重新索引所有内容?