2
例如,這是一個返回一行之和長度的函數:爲什麼couchdb的減少是以這種方式實現的?
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}
}
它包含足夠的信息來減少整個數組並更新爲新的值...!
除了「這是它的設計方式,現有模式在許多編程語言中具有模擬功能,使其更容易使用」,您在尋找什麼?第一個MapReduce模式在設計時考慮了函數式編程語言。不幸的是,API很有見地。 :) – WiredPrairie 2013-03-27 11:04:34
我正在尋找理解那裏發生了什麼,如果這只是一個風格的問題,或者如果它可能是couchdb如何工作的一部分。 – MaiaVictor 2013-03-27 12:18:02