18

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

4

3 回答 3

27

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

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

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

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

于 2008-09-23T17:25:20.517 回答
9

a)“缩放”是一个超载的术语。您指的是什么“类型”的缩放?(不管怎样,我看不出它对你有什么负面影响)。

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

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

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

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

d) RTFM (闪烁:)

于 2008-09-23T17:27:35.253 回答
5

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

这样想:

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

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

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

于 2008-09-23T17:25:42.467 回答