在couchdb配置中设置reduce_limit = false配置是否可以?

时间:2016-08-25 01:40:57

标签: mapreduce couchdb

我正在进行map / reduce审查,每次运行视图时我总是有reduce_overflow_error,如果我在couchdb配置中设置reduce_limit = false,它正在工作,我想知道如果我改变是否有负面影响这个配置设置?谢谢

1 个答案:

答案 0 :(得分:1)

设置#! path\to\interpreter\python.exe强制CouchDB控制每个缩减步骤的减少输出的大小。如果缩减步骤的字符串化JSON输出具有超过200个字符,则它比输入长两倍或更多,CouchDB的查询服务器会抛出错误。两个数字,2x和200个字符都是硬编码的。

由于reduce函数在只有64Mb RAM的SpiderMonkey实例内运行,因此默认设置的限制在某种程度上是合理的。从理论上讲,减少必须折叠,而不是放弃给定的数据。

然而,在现实生活中,在所有情况下都很难飞行。您无法控制(重新)减少步骤的块数。这意味着你可以遇到这种情况,当你的特定块的输出在字符中的时间长两倍以上时,尽管减少的其他块也要短得多。在这种情况下,如果设置了reduce_limit,即使一个不舒服的块也会破坏整个减少。

因此,如果您的reducer有时会输出比收到的数据更多的数据,那么未设置的reduce_limit可能会有所帮助。

常见情况 - 将数组展开到对象中。想象一下,您收到像reduce_limit=true这样的数组列表作为输入行。您希望以[[1,2,3...70], [5,6,7...], ...]的方式汇总列表。

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

可能(但很难实现)负面影响是SpiderMonkey实例在尝试处理还原步骤或整个还原时不断重启/降低RAM overquota。重新启动SM是CPU和RAM密集型的,一般花费数百毫秒。