sum — PHP: быстро генерировать datePeriod и сопоставлять даты

Я генерирую массив датрандж с помощью следующего метода: (даны $ 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 и сопоставляю их с массивом интервалов (здесь для ежечасной агрегации, однако) (это занимает большую часть общего времени)

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 секунд, чтобы сделать в моем веб-интерфейсе.

Q: Как я могу улучшить это?

Я думал о вычислении этого MySQL, однако мне нужно максимальное значение в час, даже если я суммирую по дням или месяцам. Идеи?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector