我有一个数据库,我们正在填写文档,其中一些是10 KB,其中一些是大约70 MB。
尝试加载这些大型文档的任何视图都会失败并显示错误: {“error”:“os_process_error”,“reason”:“{exit_status,0}”} ,即使是这个基本的:
function(doc) {
emit(null, "test");
}
os_process_error 设置为35000,但调用视图会在~15秒内消失:
time curl -X GET http://localhost:5984/portal_production/_design/all_data_keys/_view/view1
{"error":"os_process_error","reason":"{exit_status,0}"}
real 0m15.907s
user 0m0.016s
sys 0m0.000s
从其他一些线程来看,这似乎是相关的堆栈大小:couchdb issue thread。虽然我找不到对方法值的引用,但我已应用此补丁来增加堆栈大小。所以我在黑暗中拍摄了一下。
Soooo ......真正的问题是:在大型文档上使用视图的正确方法是什么?我确定我不是第一个遇到这个问题的人。
答案 0 :(得分:7)
您已达到couchjs
堆栈大小限制。如果你使用CouchDB 1.4.0+,他的大小默认限制在64 MiB。您可以通过在CouchDB配置中为JavaScript查询服务器指定-S <number-of-bytes>
选项来增加它。例如,要将堆栈大小设置为128 MiB,您的配置值将如下所示:
[query_servers]
javascript = /usr/bin/couchjs -S 134217728 /usr/share/couchdb/server/main.js
请注意,根据您的操作系统,/usr/bin/couchjs
可能会有所不同。添加此更改后,您需要重新启动CouchDB。
如果您尝试通过HTTP API更新JavaScript查询服务器配置,请确保kill
来自shell的所有couchjs
进程让他们应用更改。
如果您的CouchDB版本<1.4,请先尝试升级。