В общем суть такая, есть сырые данные от пользователей (дата, какой раздел открывал, какое действие совершал, продолжительность нахождения в разделах и т.п.) которые непрерывно пишутся в таблицу (сейчас это MySQL). Примерно 200 миллионов записей и оно неуклонно растет, к концу года будет уже 400-500 миллионов.
На основе этих данных, необходимо строить различные отчеты по неделям, месяцам, кварталам, годам и т.п. (Sum, AVG, Count, Count Distinct и т.п).
Понятно, что напрямую запросы не идут, т.к. очень тяжелые, сначала данные агрегируются в другие таблицы, проблема в том, что если агрегация определенных данных в разрезе месяца занимает несколько минут, то в разрезе года это несколько часов или даже дней (запросы к MySQL, индексы есть, они тут не спасают).
Какие тут могут быть решения? Вообще что обычно используют для сбора и аналитики подобных статистических данных? Уместно ли вообще использовать MySQL для хранения постоянного потока данных (думаю что нет)?
SELECT
`param`,
`brand`,
`screen`,
COUNT(`id`) AS `requests`,
SUM(`duration`) AS `duration_sum`,
AVG(`duration`) AS `duration_avg`,
COUNT(DISTINCT `device_id`) AS `devices`
FROM `statistic_prolonged`
WHERE (
`date_start` BETWEEN '2018-01-01 00:00:00' AND '2018-12-31 23:59:59.999999' OR
`date_end` BETWEEN '2018-01-01 00:00:00' AND '2018-12-31 23:59:59.999999')
AND `action` = 'OPEN_SECTION'
GROUP BY `param`, `system_brandname`.`name`, `system_screensize`.`name`
sim3x, на чем основано это такое утверждение?!
У эластика:
1) совсем другой тип хранения данных
2) предназначен как раз для агрегации
3) в отличии от мускулов, может параллелиться во все стороны
4) у меня работает!