zona7o
@zona7o
Веб-разработчик

Как сделать счетчик просмотров статей?

Всем добрый день.

Задача - есть сайт, СМИ. Считаем количество просмотров каждой статьи. Проблемы по идеи никакой нет, кроме одной - фронтом стоит nginx, который кеширует страницы и отдают статику, и уже готовую html-страницу.

Как в таком случае лучше всего считать просмотры? Вариант с разбором логов access на самом последнем месте.

Один из вариантов - ajax-запрос после загрузки страницы. Все данные записываются в таблицу MEMORY и по ней кроном каждые n минут в основную таблицу заносятся.

Что можете предложить еще?

ИТОГО
Прислушившась к советам, решил сделать следующее. Так как все статьи начинаются с /article/ - создать локейшн для него в nginx и прописать отдельный access log с нужным мне форматированием и кроном из него доставать действительные просмотры страницы.
  • Вопрос задан
  • 11292 просмотра
Решения вопроса 2
Изучив выдачу гугла по этому вопросу, пришел к выводу, что анализатор логов - лучшее решение.

Но если по какой-то причине он не подходит, то кроме сторонней статистики и аякс запросов, предлагают еще вариант с динамической однопиксельной картинкой, ведущей как раз на скрипт подсчета посещаемости.
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Вы сами собственно ответили на все вопросы :)

1. Внешняя статистика. Например яндекс.метрика. Есть API api.yandex.ru/metrika из которого можно легко все получить.
Плюс решения - никакой дополнительной нагрузки
Минус решения - чтобы считать статистику мобильного приложения придется хорошо извратиться

2. Собственная статистика - ajax запросы как вы написали, только я не стал бы использовать memory таблицу, а прикрутил бы redis, он во первых быстрее, а во вторых не надо нагружать основной sql сервер.
Плюс решения - можно мониторить что угодно
Минус решения - лишняя нагрузка на бекенд. Не знаю количества ваших просмотров, но потенциально может быть весьма немаленькой.
Еще один минус - без дополнительной логики на сервере - легко накрутить счетчики.

3. Разбор access логов - это на самом деле правильное решение. С точки зрения бизнес логики, realtime обновление счетчиков не нужно (тем более если у вас спереди кеш в статику), так что можно спокойно считать статистику в фоне, сохраняя агрегированные данные в базу раз в nn секунд.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы