创建couchdb视图的最有效方法

时间:2014-07-01 08:25:04

标签: couchdb

我的CouchDB视图索引的创建速度比我想要的慢。编写文档不是一个问题,但用户可以离线编辑它们然后批量更新,这似乎会使事情变慢。

This answer有所帮助,但我只是想知道将各种视图分成不同的设计文档(例如1)或将它们全部存储在一个(例如2)中会更好。

    Eg. 1
    _design/posts/_view/id
    _design/comments/_view/id
    _design/tags/_view/id



    Eg.2
    _design/webresources/_view/_id?key="posts"
    _design/webresources/_view/_id?key="comments"
    _design/webresources/_view/_id?key="tags"

*此示例仅用于说明目的。我只关心构建索引所花费的时间。

1 个答案:

答案 0 :(得分:0)

如果经常阅读,您将获得更好的表现。 Couchdb视图在读取时更新并构建。因此,每次文档更新时都可以读取视图以保持热度*。

或者听一下changes feed并跟踪文档的更新。一旦达到某个阈值,就会读取一个视图。

另一个选项是使用stale参数。

  

如果设置了stale = ok,CouchDB即使过时也不会刷新视图,这样可以提高查询延迟。如果设置了stale = update_after,CouchDB将在返回过时结果后更新视图

每个设计文档都是一个单独的erlang进程。因此,在不同的设计文档之间分离您的视图将导致它们同时构建。但是,每个视图仍将以阻塞方式构建。也就是说,不同设计文档中的两个视图可以同时开始更新,但更新各个视图所需的时间与它们在同一设计文档中的时间相同。

*您不一定要关心结果。我们的目标是欺骗couchdb来更新视图。因此,您可以在单独的异步过程中触发请求并完成它。