c# – 测试过程中如何处理失效索引?
我在内存模式下使用RavenDB进行单元测试.我的查询由静态索引支持.我没有使用WaitForNonStaleResults()API(也不想).
测试的典型工作流程是: >在内存模式下初始化RavenDB 我注意到第1-3步发生得很快,静态索引没有时间在第4步之前进行更新,因此索引是陈旧的. 我为此创造了一个快速的解决方案.在第3步之后,我执行: while (documentStore.DocumentDatabase.Statistics.StaleIndexes.Length != 0) Thread.Sleep(10); 这感觉很麻烦我想知道的是: >在内存模式下运行RavenDB时,索引出现故障是否正常? 解决方法
交叉发布到
RavenDB usergroup,并有一个工作的解决方案.
是.索引是索引.
是.在初始化文档存储时配置全局约定: var store = new EmbeddableDocumentStore(); store.RunInMemory = true; store.Conventions = new DocumentConvention { DefaultQueryingConsistency = ConsistencyOptions.QueryYourWrites }; store.Initialize(); 注意:ConsistencyOptions.QueryYourWrites不适用于Map / Reduce索引,即使用Reduce => … 部分.对于这些,您必须在查询时使用自定义(x => x.WaitForNonStale …()) 更新:有another approach,可能会更好(还没有亲自试过).您可以实现IDocumentQueryListener强制所有查询返回非陈旧的结果: var store = new EmbeddableDocumentStore { RunInMemory = true }; store.Initialize(); store.RegisterListener(new ForceNonStaleQueryListener()); public class ForceNonStaleQueryListener : IDocumentQueryListener { public void BeforeQueryExecuted(IDocumentQueryCustomization customization) { queryCustomization.WaitForNonStaleResults(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |