【问题标题】:How should stale indexes be handled during testing?在测试过程中应该如何处理陈旧的索引?
【发布时间】:2012-01-30 03:10:59
【问题描述】:

我在 In-Memory 模式下使用 RavenDB 进行单元测试。我的查询由静态索引支持。我没有使用WaitForNonStaleResults() API(我也不想)。

测试的典型工作流程是:

  1. 在内存模式下初始化 RavenDB
  2. 使用IndexCreation.CreateIndexes(Assembly, IDocumentStore) 集成索引
  3. 插入测试数据(用于验证查询行为)
  4. 运行查询
  5. 验证查询输出

我注意到步骤 1-3 发生得如此之快,以至于静态索引在步骤 4 之前没有时间更新 - 因此索引已经过时。

我为此创建了一个快速解决方法。在第 3 步之后,我执行:

while (documentStore.DocumentDatabase.Statistics.StaleIndexes.Length != 0)
    Thread.Sleep(10);

这感觉很麻烦。我想知道的是:

  • 在 In-Memory 模式下运行 RavenDB 时索引过时是否正常?
  • 有没有更好的方法来避免测试期间过时的索引?

【问题讨论】:

    标签: c# testing ravendb indexing


    【解决方案1】:

    将此交叉发布到RavenDB usergroup 并有一个可行的解决方案。

    在 In-Memory 中运行 RavenDB 时索引过时是否正常 模式?

    是的。索引就是索引。

    有没有更好的方法来避免测试期间过时的索引?

    是的。初始化文档存储时配置全局约定:

    var store = new EmbeddableDocumentStore();
    store.RunInMemory = true;
    store.Conventions = new DocumentConvention
    {
        DefaultQueryingConsistency = ConsistencyOptions.QueryYourWrites
    };
    
    store.Initialize();
    

    注意: ConsistencyOptions.QueryYourWrites 不适用于 Map/Reduce 索引,即带有 Reduce => ... 部分的索引。对于这些,您必须在查询时使用Customize(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();
        }
    }
    

    【讨论】:

    • @MattWarren 谢谢,马特。了解有用。
    • 监听器方法不再适用于当前的 RavenDB 版本。
    • @FerretallicA 我会用最新版本再次检查。
    • @FerretallicA 刚刚检查了构建 #2025 - 似乎工作得很好。是不是某个特定的构建不起作用?
    • 忽略最后一条评论。此功能在当前稳定版本中不可用。
    猜你喜欢
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 2011-10-08
    • 2021-04-07
    • 1970-01-01
    相关资源
    最近更新 更多