Вам нужно будет сохранить все значения за весь промежуток времени, как вы уже предложили. Причина в том, что вам как-то нужно «забыть» вклад старых значений в скользящее среднее. Вы не можете сделать это точно, если не знаете, где находятся эти значения (т.е. если вы их не храните).
В вашем случае, 1 значение каждую секунду в течение 15 минут составляет 15 * 60 = 900 точек данных, что должно быть в порядке.
Обратите внимание, что вам не нужно выполнять суммирование по всему массиву при каждом обновлении: вы можете вычислить новое скользящее среднее из числа точек данных, нового значения и значения, которое вы «забываете» в этот момент :
new_average = (n * old_average - x_forget + x_new) / n
Здесь n
- это количество точек данных (в вашем случае 900), x_forget
- это значение, которое вы «забываете», а x_new
- это последнее значение. Затем вы отбрасываете x_forget
с начала массива и сохраняете x_new
в конце. Вместо массива вы можете использовать очередь, реализованную через связанный список.