2016-08-25 53 views

回答

1

设置reduce_limit=true强制CouchDB控制每个减少步骤的减少输出的大小。如果字符串化JSON输出的缩减步骤的字符数超过200个字符它比输入长两倍或更多,CouchDB的查询服务器将引发错误。两个数字,2个和200个字符,都是硬编码的。

由于reduce函数在SpiderMonkey实例中运行,只有64Mb RAM可用,所以默认情况下设置的限制看起来合理。理论上,减少必须折叠,而不是放弃所给的数据。

但是,在现实生活中,在所有情况下飞行都是非常困难的。您无法控制(再)减少步骤的块数。这意味着你可能会遇到这样的情况,当你输出某个特定块的字符长度超过两倍时,尽管其他块减少的时间要短得多。在这种情况下,如果设置了reduce_limit,那么即使是一个不舒服的块也会打破整个缩减。

因此,如果缩减器有时可以输出比收到的更多数据,那么取消设置reduce_limit可能会有所帮助。

常见大小写 - 将数组展开到对象中。想象一下,您会收到像[[1,2,3...70], [5,6,7...], ...]这样的数组列表作为输入行。您想要以{key0:(sum of 0th elts), key1:(sum of 1st elts)...}的方式汇总您的列表。

如果CouchDB决定向您发送1或2行的块,则会出现错误。原因很简单 - 对象键也计算结果长度。

可能(但很难实现)的负面影响是SpiderMonkey的实例不断重新启动/下降上RAM超过配额,试图处理还原步骤或整个减少时。重新启动SM是CPU和内存密集型和一般费用几百毫秒。

相关问题