代码之家  ›  专栏  ›  技术社区  ›  Moon

使用设计文档有什么好处?

  •  2
  • Moon  · 技术社区  · 11 年前

    在阅读Couchbase文档时,我遇到了以下问题。

    因为每个视图中每个map/reduce组合的索引 在给定的设计文档中同时更新,避免 在同一设计文档中声明过多视图

    http://docs.couchbase.com/admin/admin/Views/views-writing.html

    如果是这样,为什么它甚至允许您在设计文档中添加多个视图?我应该为每个设计文档创建一个视图吗?

    1 回复  |  直到 11 年前
        1
  •  2
  •   Adam Taylor    11 年前

    当视图索引的数据是相关的,并且需要同时更新相关索引时,将多个视图分组在一个设计文档下非常有用。

    例如,以Couchbase分发的“啤酒样本”桶为例。它包括两种类型的文件,一种用于啤酒厂,另一种用于酿造啤酒。您可以在这两种文档类型上创建一组视图。假设您有四个实现以下目标的视图:

    • 列出所有啤酒
    • 列出所有啤酒厂
    • 列出特定abv下的所有啤酒
    • 列出一个国家的所有啤酒厂

    因此,本质上,我们有两种观点对啤酒厂相关的文件进行操作,另两种观点则对啤酒进行操作。此时,将相关视图分组在一个设计文档下非常有用,因为这意味着它们将同时更新。如果要添加新的啤酒厂,则列出所有啤酒厂的视图 列出一个国家所有啤酒厂的视图将同时触发更新。另一方面,如果您将这两个视图放在单独的设计文档中,那么最终会触发两个单独的视图更新,这意味着如果您使用stall=false,则会增加响应时间,否则可能会导致结果不一致。

    这在任何给定的数据集中是否有用取决于每个实现、文档的相关性以及响应时间的重要性。Couchbase为您提供了调整视图更新以满足需求的选项。

    另外一个原因是,您可以控制 index update triggers 以每个设计文档为基础,这样您可以比其他视图更定期地更新某些视图。

    上的wiki页面 Couchbase View Engine Internals 您可能会感兴趣,因为它很好地解释了设计文档的概念,并提供了一些关于视图引擎如何将任务委派给设计文档的进一步见解。