如何在 CouchDB 中安排索引更新

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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

以上是关于如何在 CouchDB 中安排索引更新的主要内容,如果未能解决你的问题,请参考以下文章

如何在PHP中安排MySQL数据库的定期更新? [重复]

如何在 BigQuery 中安排脚本?

弹出框关闭后如何在 transitionCoordinator 中安排新的演示文稿

如何停止在 java.util.Timer 类中安排的任务

如何在 Redshift 中安排 DDL 定义视图(pg_catalog 表)的每日备份

如何使用 CouchDB 的 ui 在 hyperledger fabric 1.4 中停止 CouchDB 的更新?