在我的工作中,我使用couchbase,我遇到了一些问题。从一些设备数据来到couchbase,并在我调用聚合视图后。此视图必须按2个键聚合值:timestamp和deviceId。 在我尝试聚合超过10k的值之前,一切都很好。在这种情况下,我有减少错误
地图功能:
function(doc, meta)
{
if (doc.type == "PeopleCountingIn"&& doc.undefined!=true)
{
emit(doc.id+"@"+doc.time, [doc.in, doc.out, doc.id, doc.time, meta.id]);
}
}
减少功能
function(key, values, rereduce)
{
var result =
{
"id":0,
"time":0,
"in" : 0,
"out" : 0,
"docs":[]
};
if (rereduce)
{
result.id=values[0].id;
result.time = values[0].time;
for (i = 0; i<values.length; i++)
{
result.in = result.in + values[i].in;
result.out = result.out + values[i].out;
for (j = 0; j < values[i].docs.length; j++)
{
result.docs.push(values[i].docs[j]);
}
}
}
else
{
result.id = values[0][2];
result.time = values[0][3];
for(i = 0; i < values.length; i++)
{
result.docs.push(values[i][4]);
result.in = result.in + values[i][0];
result.out = result.out + values[i][1];
}
}
return result;
}
文档示例:
{
"id": "12292228@0",
"time": 1401431340,
"in": 0,
"out": 0,
"type": "PeopleCountingIn"
}
更新
输出文件:
{"rows":[
{"key":"12201774@0@1401144240","value":{"id":"12201774@0","time":1401144240,"in":0,"out":0,"docs":["12231774@0@1401546080@1792560127"]}},
{"key":"12201774@0@1401202080","value":{"id":"12201774@0","time":1401202080,"in":0,"out":0,"docs":["12201774@0@1401202080@1792560840"]}}
]
}
}
在&#34; docs&#34;数组长度超过100.我认为在那种情况下工作rereduce功能。有没有办法解决这个错误,使得这个数组的数量减少了?
答案 0 :(得分:3)
地图和输出的输出有很多限制。减少功能,防止索引耗时太长和/或变得太大。
这些正在被添加到官方文档中,但同时引用问题(MB-11668)来跟踪文档更新:
1)indexer_max_doc_size - 文件大于此值被跳过 索引。记录一条消息(包含文档ID,大小,存储桶名称,视图名称等) 何时遇到这样的文件。值为0表示没有限制(就像以前一样) 在此之前)。当前默认值为1048576字节(1Mb)。
2)max_kv_size_per_doc - 可以发射的KV对的最大总大小(字节) 单个视图的单个文档。当传递此限制时,将记录消息(带有 文档ID,大小,存储桶名称,视图名称等)。值为0表示没有限制(如同 它曾经是以前)。当前默认值为1048576字节(1Mb)
编辑:此外,单个缩减的大小限制为64kB(reduce()
的输出。我建议您重新使用reduce函数返回数据这个限制。请参阅MB-7952,了解为何会出现这种情况的技术讨论。