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

Ell*_*iot 2 couchdb

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

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

但是,如果我在设计文档中更改视图,则需要进行权衡,所有视图都需要更新.

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

Ale*_*ôté 7

更多细节信息可以在这里找到:

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

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

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

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

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

作为旁注,CouchDB和Cloudant在更新视图的时间上有所不同:

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

  • 该链接文章的另一个相关引用是:"将每个视图放在自己的设计文档中,以便每个视图可以单独重新编制索引.(请记住,如果在具有其他视图的设计文档中,即使删除视图也会导致重大的重新索引!)" (2认同)