CouchDb - 一个包含多个视图的设计文档与多个具有拆分视图的设计文档

时间:2016-11-22 19:22:25

标签: couchdb

我想弄清楚这两者之间的权衡。

似乎使用一个具有多个视图的设计文档很快就会更新,因为在编制索引时,每个文档都会在一次传递中传递到每个视图中。

但是,如果我在设计文档中更改视图,则需要权衡所有视图。

这看起来是否正确?还有其他人可以增加这种理解吗?

1 个答案:

答案 0 :(得分:7)

可以找到更多详细信息here

视图被组织到设计文档中。从理论上讲,您可以在数据库中拥有任意数量的设计文档,并在单个设计文档中拥有所需的多个视图。从理论上讲,每个视图可以为每个文档发出任意多个b树节点,并且你的map / reduce代码可以是任意复杂的。但请记住:

  • 有许多视图会降低性能,因为每个视图都必须在每次文档更改时运行
  • 同一设计文档中的所有视图都被编入索引;更改,添加或删除任何视图都需要重新编制索引

  • 视图中每个文档有多次发出会降低性能(但是比将每个发射放在自己的视图中要高一些)

  • 复杂地图和减少代码会降低性能

  • 发出除null之外的其他值会降低性能
  • 使用除_sum之外的reduce代码,_ count,_stats内置函数会降低性能

作为旁注,CouchDB和Cloudant确实在更新视图时有所不同:

  • CouchDB懒洋洋地更新视图,即查询它们的时间。这可能导致不经常访问的视图等待时间过长。
  • Cloudant在后台异步更新视图。这意味着不再访问的视图仍在消耗系统资源。