我有一个视图,其中定义了map和reduce函数,并且简化和非简化查询在此视图中都很有用(这里最需要非简化查询)。
当它重新索引少量的10k文档时,CPU会达到顶峰,制作完整索引需要很长时间。删除(或简化)reduce函数可以解决问题,而在我看到的couchjs日志中,减少/重新减少调用会占用所有资源。
问题是:为什么couchdb会调用reduce / rereduce来构建索引,即使在使用" reduce = false"查询视图时也是如此。选项?我不认为可以将这些值用作预先计算的,所以我做错了什么?
答案 0 :(得分:0)
CouchDB Map / Reduce索引始终完全预先计算并缓存在磁盘上;磁盘索引满足查询。
这意味着对哪些方法有效,特别是在减少功能方面存在一些限制。一般的想法是你的reduce函数应该发出大小不变的值/结构。这意味着如果你有一个reduce()函数来累积数据而不实际减少它(例如将键映射或值从映射阶段连接到数组然后返回该数组),这是一个坏主意。通常,CouchDB配置为query_server_config.reduce_limit
选项设置为true,以帮助您防止编写错误的reduce函数。