如何在CouchDB中安排索引更新

时间:2008-09-23 16:59:35

标签: database couchdb scaling

据我所知,在查询视图时会更新CouchDB索引。假设有更多的读取而不是写入,这对缩放来说不是很糟糕吗?如何配置CouchDB以更新写入索引,或者更好地按时间表更新?

3 个答案:

答案 0 :(得分:26)

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

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

在[1]的CouchDB wiki上可以获得完全相同的示例脚本。

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

答案 1 :(得分:9)

a)“缩放”是一个超载的术语。你指的是哪种“缩放”? (无论哪种方式,我都看不出它对你产生的负面影响)。

b)写入更新:在写入后查询您的视图。请注意,向索引添加一堆数据更加资源友好(这不是特定于CouchDB)。因此,您可能希望每N次写入都会触发您的视图。

c)预定:设置一个每隔M分钟查询一次视图的cronjob。

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

e)(最佳选择)。亲自动手,帮助我们抛光CouchDB!任何贡献都受到高度赞赏。

d)RTFM (blink :)

答案 2 :(得分:5)

你不能也是,为什么你想要那个?

这样想:

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

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

您可以做的一件事是使用update = false读取,这是一个脏读,可能无法返回您的预期。如果你总是这样做,你可以安排通过cronjob“定期”阅读并用它更新你的索引。我认为这没有道理。