【发布时间】:2014-06-07 20:27:08
【问题描述】:
我正在使用 MongoDB 存储每 15 秒捕获一次的服务器统计信息(因此每台服务器每分钟插入 4 行),并试图将此数据绘制到某个时间戳之间的所有数据的图表上。
例如,可以使用以下查询:
$tbl->find(
array(
"timestamp" => array('$gte' => '1396310400', '$lte' => '1396915200'),
"service" => 'a715feac3db42f54edbc50ef6fa057b3'
),
array("timestamp" => 1, "system" => 1)
);
这会吐出我们一堆看起来像这样的行:
Array
(
[53933ad8532965621d97dd3b] => Array
(
[_id] => MongoId Object
(
[$id] => 53933ad8532965621d97dd3b
)
[system] => Array
(
[load] => 0.55
[uptime] => 1171204.47
[processes] => 222
)
[timestamp] => 1396310403
)
)
这适用于小数据范围,因为我可以将这些数据直接传递到 Flot 或 HighCharts 并让它自己美化时间尺度。但是,这不适用于大型数据集(例如查询超过一个月)。
我要做的是按小时(或 15 分钟)对数据进行分组,并返回给定时间段的平均值(在本例中,我正在绘制的 system.load)。
我知道聚合函数是我需要使用的,但尽管我尽了最大努力,我还是无法让它工作。
现在我让 PHP 完成所有工作(按时间戳对结果进行分组并计算平均值),但它非常慢,我知道 MongoDB 会更好地处理它。
任何见解将不胜感激!
编辑: 我一直在尝试遵循此处发布的答案,但仍在苦苦挣扎 - MongoDB Aggregation PHP, Group by Hours
【问题讨论】:
标签: php mongodb highcharts aggregation-framework