チャートの平均を計算する必要があります。
データベースには 15,000 行あります。インデックスは時間です。
私は2つの異なる方法でそれを行いました:
1)私は時間間隔で繰り返します(間隔ごとに):-日付間の生データリクエスト-この間隔のPHPでの平均計算
2) マップとリデュース: 各間隔でリデュース関数がデータをカウントし、ファイナライズ関数で平均を作成します。
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)
));
2 番目の解決策は、最初の解決策よりもかなり時間がかかります。なんで?より多くのデータを使用して比較する必要がありますか?
MongoLab (無料版) とローカルの mongo サーバーを試してみましたが、何も変わりませんでした。
ありがとう :)