У меня есть таблица, где храню исторические данные и добавляю запись для элементов, которые я отслеживаю каждые 5 минут. Это пример, используя только 2 элемента:
+----+-------------+
| id | timestamp |
+----+-------------+
| 1 | 1533209426 |
| 2 | 1533209426 |
| 1 | 1533209726 |
| 2 | 1533209726 |
| 1 | 1533210026 |
| 2 | 1533210026 |
+----+-------------+
Проблема в том, что я на самом деле отслеживаю 4k элементов, и таблица продолжает увеличиваться, также мне не нужны 5-минутные данные, если я хочу получить последний месяц. Я пытаюсь понять, есть ли способ сохранить записи за 5 минут за последние 24 часа, 1 час записи за последние 7 дней и т.д. Может быть, каждый час я могу получить первые 12 записей из таблицы 5 минут и сохранить средний в 1-й таблице? Но что, если некоторые записи отсутствуют, потому что были ошибки? Это правильный способ решить эту проблему или есть несколько лучших альтернатив?
Ты на правильном пути.
Есть несколько вопросов, которые необходимо решить, как обрабатывать - пропущенные записи, временные метки, перекошенные на 1 секунду (или что-то еще) и т.д.
Предоставляя счет (который всегда должен быть 12), вы можете обнаружить некоторые икоты:
SELECT FLOOR(timestamp / 3600) AS hr, -- MEDIUMINT UNSIGNED
COUNT(*), -- TINYINT UNSIGNED
AVG(metric) -- FLOAT
FROM tbl
GROUP BY 1;
Да, каждый час, делайте данные за предыдущий час. Добавьте WHERE timestamp BETWEEN... AND... + 3599
чтобы ограничить диапазон, о котором идет речь. Затем продуть один и тот же набор данных.
В таблице будет PRIMARY KEY(hr)
.
Если вы не говорите о миллионах строк в таблице, я бы не рекомендовал использовать PARTITION
.