【问题标题】:How do you Schedule Index Updates in CouchDB如何在 CouchDB 中安排索引更新
【发布时间】:2010-09-12 10:42:08
【问题描述】:

据我了解,查询视图时会更新 CouchDB 索引。假设读比写多,这对扩展不是很不利吗?我将如何配置 CouchDB 以在写入时更新索引,或者更好的是,按计划更新索引?

【问题讨论】:

    标签: database couchdb scaling


    【解决方案1】:

    a) “缩放”是一个过度使用的术语。您指的是哪种“缩放”? (无论如何,我看不出它对你有什么负面影响)。

    b) 写入更新:只需在写入后查询您的视图。请注意,将一堆数据添加到索引对资源更友好(并非特定于 CouchDB)。因此,您可能希望每 N 次写入触发您的视图。

    c) 计划:设置每 M 分钟查询一次视图的 cronjob。

    d) 等待 CouchDB 发展为您提供允许您使用配置参数进行设置的基础架构。

    e)(最佳选择)。弄脏你的手,帮助我们完善 CouchDB!任何贡献都受到高度赞赏。

    d)RTFM (blink :)

    【讨论】:

      【解决方案2】:

      你不能,而且你为什么想要那个?

      这样想:

      • 当您将数据导入 MySQL 时,您可以关闭 indizes,因为为插入的每一行更新索引比在一次运行中更新 100 次写入(或无论您导入多少行)的索引更昂贵.
      • 这就是 CouchDB 在读取时更新索引的原因,因为同时集成这 100 个更改,然后每次更改都在写入时进行集成,成本更低。

      这是 CouchDB 的优势之一! :) 我并不是说这是 CouchDB 独有的功能,但在阅读时这样做很聪明。

      您可以做的一件事是使用 update=false 进行读取,这是一种脏读,可能不会返回您期望的结果。如果您总是这样做,您可以安排通过 cronjob 进行“定期”读取并用它来更新您的索引。我只是觉得这没有意义。

      【讨论】:

      • stale=truestale=update_after 是脏读的当前参数。后者在返回后也会更新视图索引。
      【解决方案3】:

      CouchDB 确实会在更新时重新生成视图,但仅针对自上次读取视图后发生的更改。假设您的读取量大大超过写入量,这应该不是问题。

      当您一次更改大量文档时,这可能会导致第一次读取请求花费大量时间。为了减轻这种情况,已经提出了几种不同的可能性。大多数依赖于注册 CouchDB 的更新通知并自动触发读取。

      CouchDB wiki [1] 上提供了一个示例脚本,用于执行此操作。

      [1]http://wiki.apache.org/couchdb/RegeneratingViewsOnUpdate

      【讨论】:

      • 有没有办法将索引计算分散到多台机器上,还是在设置复制时自动完成?
      • @ThomasFankhauser:分片?见大沙发
      • 我创建了一个小实用程序来帮助完成自动刷新所有视图的任务:couchdb-utils
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 2011-01-24
      • 2020-03-07
      • 2016-01-19
      相关资源
      最近更新 更多