CouchDB视图非常慢

问题描述 投票:15回答:2

我有一个CouchDB(v0.10.0)数据库,大小为8.2 GB,包含3890000个文档。

现在,我将以下内容作为视图的地图

function(doc) {emit([doc.Status], doc);

并且需要forever加载(4小时,仍然没有结果)。

这里有一些其他信息可能有助于描述这种情况:

  1. 该视图不是临时视图。的视图在3890000之前定义插入文档。

  2. 服务器上没有任何东西。这是一个ubuntu框,只安装了默认值。

  3. 我看到我的CPU正在移动并且正在努力工作(有时会达到100%)。内存也在移动,但没有增加。

所以我的问题是:

  1. 后台实际发生了什么?
  2. 这是我必须等待一次的“一次”事情,以后它会以某种方式工作吗?
performance couchdb
2个回答
15
投票

仅在下次阅读时更新视图。阅读后,它将处理自上次阅读视图以来已更新(创建,更新,删除)的所有文档。

因此,即使您在插入3890000文档之前就定义了视图,它将为该视图处理3890000文档。

来自http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views

请注意,默认情况下,视图不会在保存文档时创建和更新,而是在访问时创建和更新。因此,在CouchDB创建视图时,首次访问可能需要一些时间,具体取决于数据的大小。如果愿意,在保存文档时,还可以使用外部脚本来更新视图,该脚本在进行更新后会调用视图。可以在此处找到示例:RegeneratingViewsOnUpdate

也只是碰到了这个技巧,如果您在Ubuntu上运行,这可能会很有用:

http://nosql.mypopescu.com/post/1299848121/couchdb-and-ubuntu-configuration-trick-for


17
投票

不发出整个文档。没必要您可以改为使用include_docs=true运行查询,这将使您可以通过每一行的doc属性访问文档。

发出整个文档时,您使索引等于或大于整个数据库。 :)

© www.soinside.com 2019 - 2024. All rights reserved.