CouchDB视图非常慢

时间:2010-10-11 20:09:22

标签: performance couchdb

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

现在,我有以下作为视图的地图

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

加载永远(4小时仍然没有结果)。

以下是一些可能有助于描述情况的额外信息:

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

  2. 服务器上没有任何内容。它是一个ubuntu盒子,只安装了默认值。

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

  4. 所以我的问题是:

    1. 后台实际发生了什么?
    2. 这是“一次性”的事情,我必须等待一次,以后会以某种方式运作吗?
    3. 非常感谢,

2 个答案:

答案 0 :(得分:17)

不要发出整个文档。这是不必要的。您可以使用include_docs=true运行查询,这样您就可以通过每行的doc属性访问该文档。

发出整个doc时,会使索引大于或大于整个数据库。 :)

答案 1 :(得分: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