我有一个大小为8.2 GB的CouchDB(v0.10.0)数据库,包含3890000个文档。
现在,我有以下作为视图的地图
function(doc) {emit([doc.Status], doc);
加载永远(4小时仍然没有结果)。
以下是一些可能有助于描述情况的额外信息:
视图不是临时视图。该 视图在3890000之前定义 文件已插入。
服务器上没有任何内容。它是一个ubuntu盒子,只安装了默认值。
我看到我的CPU正在移动并努力工作(有时会达到100%)。记忆也在移动,但没有增加。
所以我的问题是:
非常感谢,
志
答案 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