2008-09-23 48 views
18

据我所知,当查询查询时会更新CouchDB索引。假设有更多的读取比写入,这不是缩放的不好吗?我如何配置CouchDB以便在写入时更新索引,或更好地按照时间表更新?如何在CouchDB中安排索引更新

回答

26

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

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

在CouchDB维基[1]上提供了一个用于完成该操作的示例脚本。

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

+0

有没有办法来传播指数计算在多台计算机或完成它时自动复制设置? – 2012-10-02 11:01:43

+0

@ThomasFankhauser:sharding?请参阅BigCouch – OrangeDog 2012-10-30 10:13:27

5

你不能也,为什么你想呢?

想想看这样的:

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

这是CouchDB的优点之一! :)我并不是说这是一个CouchDB专用功能,但是在阅读时这样做很明智。

你可以做的一件事是阅读更新= false,这是一个脏读,可能不会返回你所期望的。如果你总是这样做,你可以通过cronjob安排一个“常规”阅读,并用它来更新你的索引。我只是觉得没有道理。

9

a)“缩放”是这样一个超负荷的术语。你指的是什么样的缩放比例? (无论哪种方式,我都看不清楚它是如何影响你的)。

b)写入更新:在写入之后查询您的视图。请注意,将大量数据添加到索引中会更加资源友好(不特定于CouchDB)。所以你可能想要在N次写入时触发你的视图。

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

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

e)(BEST OPTION)。把你的手弄脏,帮助我们抛光CouchDB!任何贡献,高度赞赏。

d)RTFM (blink :)