如何在 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=true
和 stale=update_after
是脏读的当前参数。后者在返回后也会更新视图索引。【参考方案3】:
CouchDB 确实会在更新时重新生成视图,但仅针对自上次读取视图后发生的更改。假设您的读取量大大超过写入量,这应该不是问题。
当您一次更改大量文档时,这可能会导致第一次读取请求花费大量时间。为了减轻这种情况,已经提出了几种不同的可能性。大多数依赖于注册 CouchDB 的更新通知并自动触发读取。
CouchDB wiki [1] 上提供了一个示例脚本,用于执行此操作。
[1]http://wiki.apache.org/couchdb/RegeneratingViewsOnUpdate
【讨论】:
有没有办法将索引计算分散到多台机器上,还是在设置复制时自动完成? @ThomasFankhauser:分片?见大沙发 我创建了一个小实用程序来帮助完成自动刷新所有视图的任务:couchdb-utils以上是关于如何在 CouchDB 中安排索引更新的主要内容,如果未能解决你的问题,请参考以下文章
弹出框关闭后如何在 transitionCoordinator 中安排新的演示文稿