我有一个CouchDB(v0.10.0)数据库,大小为8.2 GB,包含3890000个文档。
现在,我将以下内容作为视图的地图
function(doc) {emit([doc.Status], doc);
并且需要forever加载(4小时,仍然没有结果)。
这里有一些其他信息可能有助于描述这种情况:
该视图不是临时视图。的视图在3890000之前定义插入文档。
服务器上没有任何东西。这是一个ubuntu框,只安装了默认值。
我看到我的CPU正在移动并且正在努力工作(有时会达到100%)。内存也在移动,但没有增加。
所以我的问题是:
仅在下次阅读时更新视图。阅读后,它将处理自上次阅读视图以来已更新(创建,更新,删除)的所有文档。
因此,即使您在插入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
不发出整个文档。没必要您可以改为使用include_docs=true
运行查询,这将使您可以通过每一行的doc属性访问文档。
发出整个文档时,您使索引等于或大于整个数据库。 :)