Разрабатываю рекламную сеть, нужно собирать и хранить статистику показов и иметь возможность делать по ней быстрые отчеты для анализа. По каждому показу нужно сохранить:
- уникальный идентификатор пользователя (строка 20 символов)
- номер рекламного блока (что показали)
- номер рекламного места (где был показ)
- страна (откуда был посетитель)
- тип устройства (дестктоп/мобильник/планшен)
- дата/время
- был ли клик (этот флаг обновляется в true, если был клик на рекламе)
Нужна возможность получить репорты с фильтрацией и суммированием по любому из полей (ну кроме идентификатора и флагу был ли клик). В репорте нужно иметь количество показов (хитов), количество уникальных пользователей (уников) и кол-во кликов.
Сейчас кладу все это в обычную табличку (PostgreSQL) и формирую репорт SQL-запросом. Уников считаю как count(DISTINCT user_id). Все хорошо, только показов получается больше миллиона в день уже сейчас и через неделю статистика формируется уже пол минуты, т.е. оооочень медленно, а это только тестовая эксплуатация, т.е. данных нужно уместить в сотню раз больше.
Рассуждал в сторону как-то "плющить" эту статистику, но не понятно, как тогда считать уников.
Большое спасибо за помощь.