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