2016-08-25 52 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和內存密集型和一般費用幾百毫秒。

相關問題