Архитектура и логика работы по сбору статистики

fullpowerKzn

Новичок
Добрый день! Имеется задача, которую я уже выполнил, но полагаю не достаточно хорошо. Суть в том, что надо собирать статистику показов и кликов баннеров. Я выполнил это следующим образом:
Создал таблицу с событиями http://prntscr.com/8ifds1, где
event_id - id события
event_type - тип события (клик или просмотр)
event_time - Время события

И ещё таблицу с перечнем http://prntscr.com/8iffae, где
item_id - id позиции
ban_id - id баннера (есть отдельная таблица баннеров)
ban_event_id - id события, к которому привязан из первой таблицы.

Сделал так, потому что разом может быть просмотрено сразу нескольких баннеров на одно событие. Проблема в том, что записей стало много во второй таблице и раздел показа статистики подвисает.

Может есть мысли как сделать лучше или предложите свой вариант. Буду признателен =)
 

hell0w0rd

Продвинутый новичок
Ничего не ясно по индексам, они нужны для показа статистики.
Для даты/времени есть специальные типы, не надо придумывать велосипед.
У вспомогательной таблицы many-to-many PK должен быть составной, id там нахрен не уперлось.
Для профайлинга в SQL есть EXPLAIN, погугли как использовать.
 

WMix

герр M:)ller
Партнер клуба
подвисает не потому надеюсь что постоянно записи добавляются?
 

fullpowerKzn

Новичок
>>> Для даты/времени есть специальные типы, не надо придумывать велосипед.
Хз. В разных системах встречал для даты поле как INT(11). Не проверял, но мне кажется mysql проще будет делать выборку с числами, чем с датой...
>>> У вспомогательной таблицы many-to-many PK должен быть составной, id там нахрен не уперлось.
item_id я на всякий создал, если ты про это.
>>> Для профайлинга в SQL есть EXPLAIN, погугли как использовать.
Спасибо, посмотрю)

>>> подвисает не потому надеюсь что постоянно записи добавляются?
Нет, там в основном трафик слабый. А так ровно за 1 год уже 4,2 млн записей во второй таблице.
 

hell0w0rd

Продвинутый новичок
item_id я на всякий создал, если ты про это.
На какой такой всякий? У тебя есть первичный ключ (banner_id, event_id), ты в него добавляешь id, который автоинкремент. Это теперь не первичный ключ, а хрень какая-то. Я не берусь утвержать, но может быть именно из-за этого у тебя тормоза, что есть индекс, что нету.

Всякий раз, когда что-то делаешь "на всякий случай, ну а вдруг" - надо бить себя по рукам и так не делать. Я на этом форуме видел объяснения вида "на всякий случай" только на идиотские действия, вроде htmlspecialchars(stripslashes(mysql_real_escape_string($id))), у тебя именно такой случай.
 

AnrDaemon

Продвинутый новичок
>>> Для даты/времени есть специальные типы, не надо придумывать велосипед.
Хз.
У него мозгов нет - что-то знать не может.

В разных системах встречал для даты поле как INT(11).
Перечисли, в каких…

Не проверял, но мне кажется mysql проще будет делать выборку с числами, чем с датой...
Когда кажется - крестятся.
 
Сверху