2013-02-09 66 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,以帮助防止您编写错误的减少功能。