CouchDB视图非常慢

Chi*_*han 15 performance couchdb

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

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

function(doc) {emit([doc.Status], doc);
Run Code Online (Sandbox Code Playgroud)

它需要永远加载(4小时仍然没有结果).

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

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

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

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

所以我的问题是:

  1. 背景中实际发生了什么?
  2. 这是"一次性"的事情,我必须等待一次,以后会以某种方式运作吗?

非常感谢,

mik*_*eal 17

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

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


Eva*_*van 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