我正在进行map / reduce审查,每次运行视图时我总是有reduce_overflow_error,如果我在couchdb配置中设置reduce_limit = false,它正在工作,我想知道如果我改变是否有负面影响这个配置设置?谢谢
答案 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密集型的,一般花费数百毫秒。