应用程序启动时的RavenDB和过时索引
我有一份申请:应用程序启动时的RavenDB和过时索引,ravendb,eventual-consistency,Ravendb,Eventual Consistency,我有一份申请: 使用嵌入式RavenDB数据库 使用单调读取选项 使用静态索引 我注意到,当应用程序启动时,索引都是暂时过时的,即使在应用程序关闭(干净地)上一次运行时它们没有过时 例如,我运行应用程序,插入10条记录,然后等待索引更新。我查询它并看到我期望的结果。然后我关闭应用程序,再次启动,然后进行查询,但没有得到任何结果。一秒钟后,索引已经更新,我现在可以得到结果了。如果我重复这个,有时我得到10个结果,有时0个结果,有时2个结果 我的假设是,当在时间T查询索引时,我总是会在T+1处看
- 使用嵌入式RavenDB数据库
- 使用单调读取选项
- 使用静态索引
为了回答你的问题 我的假设是错的/愚蠢的吗 不,据我所知,您的假设是正确的,您可能会看到过时的结果,但不应该看到不太过时的结果,除非索引是在t&t+1之间从头开始重建的,并且您在索引重置后刚好命中它 有没有办法防止这种情况发生 我所知道的唯一方法是确保索引完全关闭。索引文件夹中通常会留下一些锁定文件,指示情况是否如此。Raven的调试级别日志将指示是否也启动了重建 如果所有其他操作都失败了,您可能需要有一个进程,在继续应用程序启动过程的其余部分之前,该进程会一直阻塞,直到所有索引(或您关心的索引)都是新的 这种行为只是一种启动,还是可能随时发生?例如,我可以渲染10个结果,然后刷新0个结果,然后在下一次刷新时再次渲染10个结果,仅仅因为Raven决定要重新索引所有内容吗
是的,如果索引被重置,这是可能的,但据我所知,只有通过API或management studio手动触发时才会发生(启动后) 哪个版本的raven?@ThomasJames 2.5.2621您在内存中运行吗?这些是临时索引吗?不在内存中,静态索引不存在,除了内置索引之外没有包。