Чуваки, помогите советом. Есть таблица куда падают числовые значения статистики каждую минуту. Нужно группировать эти значения в среднее за 10 минут (хранится 12 часов), час (хранится день) и за день (остается навсегда). С группировкой проблем нет. Вопрос как хранить группированные значения? Учитывая то, что все средние значения меньше чем за день, хранятся в базе ограниченное кол-во времени. Я думал хранить все в отдельных таблицах разделенных по периоду группировки, но мне нужно выводить график этих значений и появляется сложность с тем, когда когда например нужно вывести график значений за последнюю неделю. В нем самые свежие значения за минуту, потом за 10 мин, потом по часам и далее уже по дням. Надеюсь понятно объяснил, уверен этот велосипед уже изобретен до меня.
в идеале как посоветовали юзать InfluxDB/ClickHouse
но если нам надо
- сделать сейчас
- не переписать пол системы
- не хочется сейчас изучать и подключать новые технологии
- это неприоритетной задача для бизнеса
можно подумать как сделать лучше с минимальными усилиями
как по мне нужно разделить значения по выборке
- добавить enum time_period с значениями 10 мин, 1 час, 12 часов и т.д. (лучше на уровне бд сделать беззнаковый инт чтоб без проблем добавлять значения периодов)
- добавить период в индекс
- при выборке ставить ключ нужного периода
таким образом решена проблема как отличать сгрупированые значения и измерения + скорость должна быть в норме
также когда график увеличивают можем делать запрос для меньшего периода
конечно специализированные решения позволять намного более ефективно манипулировать такими данными, но это не всегда нужно