我需要计算图表的平均值。
我在数据库中有 15k 行,我的索引是时间。
我以两种不同的方式做到了:
1)我重复时间间隔(对于每个间隔):-日期之间的原始数据请求-此间隔的 PHP 平均计算
2) Map and Reduce:对于每个区间,reduce 函数计算数据,然后在 finalize 函数中取平均值。
m = function() {
var k = new Date(this.date);
k.setSeconds(0);
k.setMilliseconds(0);
emit(
k, {
note: this.note
}
);
}
r = function(key, values) {
var reduced = {
note:0,
count:0,
noteAvg:0,
};
values.forEach(function(val) {
reduced.note += val.note;
reduced.count += val.count;
});
return reduced;
}
f = function(key, reduced) {
reduced.noteAvg = reduced.note / reduced.count;
return reduced;
}
$data_graph = $this->db->command(array(
"mapreduce" => "notes",
"map" => $map,
"reduce" => $reduce,
"finalize" => $finalize,
"query" => $req,
"out" => array("inline"=>1)
));
第二种解决方案比第一种解决方案要慢很多时间。为什么?我应该尝试使用更多数据进行比较吗?
我在 MongoLab(免费版)和我的本地 mongo 服务器上进行了尝试,没有任何变化。
谢谢 :)