Однажды делал подобный проект. Вся суть сводилась к следующему:
Была основная таблица, куда кидались все логи по трафику.
Раз в 10-20мин бежал крон, и собирал из этой таблицы все необходимые репорты, и записывал их в отдельные таблички по дням\часам.
В 00 по серверу статистика морозилась, вся статистика из основной таблицы за день скидывалась в архив, и таблица обнулялась (truncate).
В итоге все работало как надо, и всегда можно было уточнить конкретные детали из архивной таблицы.
Т.е по сути имеем такие таблицы:
- statistics - Тут вся статистика за день
- *_daily_reports - Тут репорты (суммированные) по дням.
Где *_ - тип репорта.
PS
Можно конечно напрямую писать в *_daily_report, если очень нужна realtime стата, но тогда на каждый запрос будет +N обновление таблиц, что так же скажется на производительности. Решать вам.