javascript - 为什么couchdb的reduce是这样实现的呢?

标签 javascript view couchdb couchbase reduce

例如,这是一个返回行的总和和长度的函数:

function(key, values, rereduce) {
  var result = {total: 0, count: 0};
  for(i=0; i < values.length; i++) {
    if(rereduce) {
        result.total = result.total + values[i].total;
        result.count = result.count + values[i].count;
    } else {
        result.total = sum(values);
        result.count = values.length;
    }
  }
  return(result);
}

看起来你必须定义:

  • 一种减少所有元素的方法。
  • 一种对部分归约进行分组的方法 (??)

为什么这么奇怪?传统方法可以简单地描述为:

reduce = {
    op: function(accumulated,val){
        return {total:accumulated.total + val, count:accumulated.count++};
    },
    initial: {total:0, count:0}
}

其中包含足够的信息来减少整个数组并更新它以获取新值......!

最佳答案

reduce 阶段是重复的,因为它使存储/缓存更容易。您应该将reduce 函数的结果想象成一棵树。要减少节点的某个连续子集,您可以在很大程度上使用预先计算的减少值(以及一些原始值),这样您就不必下降整个树/重新计算树中所有节点的值。查询范围。

我希望能稍微澄清一下,这有点难以解释。

关于javascript - 为什么couchdb的reduce是这样实现的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15653336/

相关文章:

javascript - native 事件对象的自定义方法。

mysql - 从 View 中调用存储过程

android - 如何重用从 XML 创建的 View ?

ruby-on-rails - 将 CouchDB 作为 Rails 应用程序的一部分分发?

iphone - 我可以在 iOS 上使用 MongoDB 作为 CoreData 的替代品吗?

arrays - CouchDB:在文档中插入一个新数组

javascript - 防止用户在小数点前 2 位数字后输入更多数字

javascript - 如何使 Vorpal 输出命令的描述

javascript - t/= d是什么意思? Python和出现错误

java - Eclipse PropertySheetPage - 它可以支持多行属性吗?