【问题标题】:couchdb views update slow after _design document update:_design 文档更新后,couchdb 视图更新缓慢:
【发布时间】:2013-06-10 09:38:11
【问题描述】:

我正在处理一个 couchdb 数据库,我现在正在处理大约 400000 个文档。

我有几个视图(只有 map,没有 reduce),当我想用​​ couchapp 更新其中一个时,我不得不全部更新。 事实上,正如How to update a document's record/field in couchdb 所说,不可能只更新文档的一部分。

由于数据库有很多文档,所有视图的内部更新(构建 b 树)需要相当长的时间(超过半小时)。

这是一个非常烦人的问题,因为在部署阶段我不能只更新一两个视图而挂起服务器。

那么,在不强制 couchdb 更新所有视图的情况下,仅更新一两个视图是一种好的策略吗?

也许有一些方法可以告诉系统只更新其中的一些......但我不知道如何。

【问题讨论】:

  • 需要 30 分钟才能准确发生什么?无非就是更新几个文件?您的代码没有重新创建视图,对吗?
  • 重新创建视图需要 30 分钟(实际上更多)。 “您的代码没有重新创建视图”是什么意思?视图是相同的,但是当我更新设计文档时,我的印象是即使代码相同,也会重新创建视图。
  • 为什么要重新创建视图?除非您想要一个新的数据“视图”,否则您不需要这样做。
  • 如果更新设计文档,CouchDB 需要重建整个视图。因此,我希望花一些时间来翻阅所有文档并重建索引。
  • 好的,但问题是是否有一种方法可以只更新一个视图,而无需重新计算所有视图。这显然是不可能的,因为设计文档中包含视图,该文档作为单个文档上传,即使您只是更改“;”,couchdb 也会重建所有视图。在设计文档中。对吗?

标签: performance couchdb


【解决方案1】:

单个设计文档中的所有视图稍后会在保存到 CouchDb 时进行更新。视图是按需更新的(当被查询时),除非你想改变视图的性质,否则不需要正常更新它们。您可以使用多个设计文档和视图来更好地控制更新视图代码的结果。

当查询任何单个视图时,设计文档中的所有视图都是updated,因此在决定设计文档和视图的结构时考虑这一点很重要。但是,要控制此行为,您可以包含 stale 参数以指示视图可以返回旧数据。来自上面链接页面上的文档:

如果设置了stale=ok,即使视图陈旧,CouchDB 也不会刷新视图,其好处是改进了查询延迟。如果设置了stale=update_after,CouchDB 会在返回过时的结果后更新视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多