我正在使用以下方法生成日期范围数组:($ from和$ to)
$begin = new DateTime(date('Y-m-d', $from));
$end = new DateTime(date('Y-m-d', $to));
$end = $end->modify('+1 day');
$dateInterval = new DateInterval('P1D');
$range = new DatePeriod($begin, $dateInterval, $end);
foreach ($range as $date) {
$dateIntervalArray[$date->format('Y-m-d\TH:i:s')] = array();
}
接下来,我从MySQL查询中添加数据并将它们与interval-array匹配(但是这里用于每小时聚合)(这需要花费大部分时间)
foreach ($data as $item) {
$dateIntervalArray[date('Y-m-d\TH:00:s', $item->PointOfTime - 900)][] = $item->measurement;
}
在最后一步中我汇总数据:
foreach ($dateIntervalArray as $key => $item) {
$arraySum = array_sum($item);
array_push($energyData, array(
'PointOfTime' => strtotime($key),
'ValueHT' => $arraySum
));
// Further, I calculate e.g. min/max
// find min per hour
// find max per hour
// Sum per hour
// Total sum
// Total average
}
这样可以正常使用!但是数据量较大时速度很慢。我每天收到96套,每年有近35000条数据。如果我获取更多数据,就像我正在处理的情况一样,我正在处理近350.000个数据。在我的网络前端渲染需要大约6-7秒。
问:我怎样才能改善这一点?
我想过用MySQL计算这个,但是我需要每小时的最大值,即使我按日或月计算。想法?