2013-02-09 71 views
0

我有一個視圖,在這個視圖中定義了map和reduce函數,並且在這個視圖中非簡化和非簡化查詢都很有用(這裏最需要非簡化查詢)。couchdb索引器如何處理reduce函數?

當它重新索引少量的10k文檔時,CPU會進入最高狀態並且需要很長的時間才能生成完整索引。刪除(或簡化)reduce函數解決了這個問題,在couchjs日誌中我可以看到,reduce/rereduce調用會佔用所有資源。

問題是:即使使用「reduce = false」選項查看視圖,爲什麼couchdb調用會減少/ rereduce生成索引?我不認爲有可能將這些值用作預計算,所以我做錯了什麼?

+0

你的地圖和減少功能是什麼樣的? – 2013-02-09 21:03:35

回答

0

CouchDB Map/Reduce索引總是完全預先計算並緩存在磁盤上;磁盤索引滿足查詢。

這意味着對於哪些方法可行,特別是在減少功能方面存在一些限制。一般的想法是你的reduce函數應該發出大小不變的值/結構。這意味着如果你有一個reduce()函數來累積數據而不實際減少它(例如,將鍵值或者從映射階段的值連接到一個數組,然後返回該數組),那麼這是個壞主意。一般來說,CouchDB配置了query_server_config.reduce_limit選項設置爲true,以幫助防止您編寫錯誤的減少功能。