У меня есть сайт, на котором пользователи могут просматривать большое количество сообщений. Каждый раз, когда это делается, я запускаю запрос, похожий на UPDATE table SET views=views+1 WHERE id = ?
. Тем не менее, существует ряд недостатков этого подхода:Отслеживание просмотров данной строки
- Невозможно отслеживать, когда возникают просмотры страниц - они просто увеличиваются.
- Обновление таблицы, которая часто будет, насколько я понимаю, очистить кэш MySQL строки, тем самым делая следующий SELECT этой строки медленнее.
Поэтому я считаю, используя подход, при котором я создаю таблицу, скажем:
object_views { object_id, year, month, day, views }
, так что каждый объект имеет один ряд пр. день в этой таблице. Затем я периодически обновлял столбец views в таблице objects
, чтобы мне не пришлось делать дорогостоящие соединения все время.
Это самое простое решение, о котором я могу думать, и, похоже, оно также имеет наименьшее влияние на производительность. Вы согласны?
(Сайт построен на PHP 5.2, Symfony 1.4 и Doctrine 1.2 в случае, если вам интересно)
Edit:
Целью является не веб-аналитика - Я знаю, как сделать это, и это уже на месте. Есть две цели:
- Позвольте пользователю узнать, сколько раз данный объект показывался, например, сегодня или вчера.
- Разрешите модераторам сайта видеть простых просматривать статистику, не входя в Google Analytics, Omniture или любое другое решение. Кроме того, результаты в бэкэнд должны быть в реальном времени, функция, которую GA не может предложить в это время. Я не хочу использовать API Analytics для извлечения данных об использовании (не в реальном времени, для GA требуется javascript).
я уже использую Google Analytics и ClickTale, поэтому я хорошо освещены на веб-аналитики части. Я вижу вашу точку зрения в поле 'DATE', но вычисления, касающиеся« количества просмотров, которые у меня были в ноябре », были бы, насколько я знаю, более быстрыми, если бы вместо них было просто 3 целочисленных поля. Анализ журналов, безусловно, не является вариантом, для которого я бы пошел. – phidah
Для ведения журнала я обычно использую отдельные колонки год, месяц, день, час, потому что это упрощает генерацию статистики. 'GROUP BY hour, day, month, year' для почасовой статистики,' GROUP BY month, year' за месячную статистику и т. Д. – Rob
Я обновил вопрос, чтобы лучше отразить то, что я ищу. – phidah