我有一个应用程序:
我注意到,当应用程序启动时,即使在应用程序关闭(干净地)上一次运行时不是陈旧,索引也都会暂时失效。
例如,我运行应用程序,插入10条记录,并等待索引是最新的。我查询它并查看我期望的结果。然后我关闭应用程序,再次启动它,并查询,我没有得到任何结果。一秒钟之后,索引已经更新,我现在可以得到结果。如果我重复这个,有时我会得到10个结果,有时会得到0个结果,有时会得到2个结果
我的假设是,在时间T查询索引时,我总是会在T + 1处看到“至少一致”的结果。但是如果服务器在此期间重新启动,我似乎看到了在T + 1处较少一致的结果。这不是最终的一致性,它最终不一致! :)
我的问题是:
答案 0 :(得分:1)
回答你的问题,
我的假设是错误/愚蠢吗?
不,我理解你的假设是正确的,你可能会看到陈旧的结果,但不应该看到较少的过时的结果,除非索引是在T& T之间从头开始重建的。 T + 1然后在重置索引后立即点击它。
有没有办法防止这种情况发生?
我知道的唯一方法是确保索引干净利落。索引文件夹中通常会有锁定文件,指示是否不是这种情况。来自Raven的调试级别日志将指示是否也启动了重建。
如果所有其他方法都失败了,您可能需要一个阻塞的进程,直到所有索引(或您关注的索引)都是新的,然后再继续执行应用程序的其余启动过程。
这种行为只是一个启动的事情,还是可能随时发生?例如,我可以渲染10个结果,然后刷新0结果,然后10个结果再次刷新,因为Raven决定重新索引所有内容吗?
是的,如果索引被重置,这是可能的,但据我所知,只有通过API或管理工作室手动触发才会发生(启动后)。