| автор |
|---|
Возникла задача выводить статистику по этим данным с несколькими вариантами группировки.
Подскажите - это реально делать при такой конфигурации в реалтайме, подправив индексы/запросы/конфиг, или нужно придумывать что-то "более другое" (таблицы с агрегированными данными, например)? |
вопшемто и вы сами и предыдушие советчики перечислили все
основные способы. Я добавлю, что вы можете взять несколько
направлений работы и в какой-то момент должны решить
что вам лучше получается, важнее, выгоднее, быстрее
-- индексы -- надо делать, выгоды полно.
недостатки -- незначительное замедление вставок
и занимает место на диске (если это проблема)
-- индексы отрабатывайте сначала на простых вариантах , например
| + |
SELECT `radacct`.`operator_id`, `radacct`.`acctterminatecause`, COUNT(radacctid) AS `count`, AVG(acctsessiontime) AS `avgDuration`, SUM(acctsessiontime) AS `totalDuration` FROM `radacct` WHERE acctstoptime BETWEEN '2013-01-11 00:00:00' AND acctstoptime <= '2013-01-11 23:59:59' and operator_id = 12345 -- реальный номер and acctterminatecause = 'abs' -- реальное значение |
индексы могут ускорить группировки, однако мы
имеем полный перебор В ЛЮБОМ случае.
-- преагрегация -- это направление очень мощное и
сильно советую.
После одиночного прогона -- создания преагрегатной таблицы
за, скажем 5-10 минут, ваши запросы будут
возврашатся за 1-100 милисекунд
Вы сможете быстро строить графики, всякие репорты по дням/месяцам, и т д
Проблема -- преагрегацию надо поддерживать --
допустим раз в день. или раз в час. Если бизнесс требует
реал-тайм результаты -- придется вернутся к реал-тайм запросам.
Это направление сильное и довольно дешевое в сравнении с
-- ОЛАП -- тут все серьезнее, надо знать средства и методики.
займет много времени с нуля. Советую если есть много времени,
денег и нужно очень много результатов