NikFaraday
@NikFaraday
Student full-stack Developer

Как реализовать функцию статистики просмотра страницы за некий период?

Не знаю как правильно подойти к реализации функции, с помощью которой я смогу выдавать пользователям о количестве просмотрев некой страницы. Важно, что бы это была статистика за день/месяц/год/всё время. Конкретно как реализовать количество просмотров за всё время не составит труда, но как реализовать это за некий период? Я ведь не могу хранить какой-то словарь с датами и количеством просмотрев... А если нужно будет реализовать за несколько лет? :\
  • Вопрос задан
  • 490 просмотров
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега Веб-разработка
{PHP, MySql, HTML, JS, CSS} developer
Важно, что бы это была статистика за день/месяц/год/всё время.
Первое что нужно - определитесь с минимальной статистической единицей, если это день - значит храните сумму за день, табличка соответственно будет что-то типа:
id, page_id, date, views;
Соответственно если нужен меньший таймфрейм - дата будет уже дататайм. Далее простой джоин, груп с аггрегацией и sum()
Ответ написан
При каждом вызове страницы в конце добавляется вставка этого вызова в БД.
Записывать можно URL, параметры, инфо о браузере, время и т.п. Об ID записи вообще не надо думать, просто таблица с автогенерацией ID. Никакие ON DUPLICATE тогда не нужны.
Для статистики - COUNT, WHERE, ORDER BY и т.д. (я про MySQL, но, полагаю, и в POSTGRES есть такое)
В таблице делаете поле типе DATETIME, по умолчанию CURRENT TIMESTAMP. Таким образом, оно будет заполняться автоматически.
При выборке за день задаете WHERE DATE(имя_поля)=требуемая_дата. Вот и статистика
за день.
Кстати, IP имеет смысл записывать, хоть оно и не идентифицирует юзера, но несет много информации.
Если кто-то нечаянно нажмет CTRL-R, статистике это абсолютно не повредит.
Если же кто-то будет усердно нажимать эту комбинацию в течение часа, он явно заслужил наше дополнительное внимание. Такого юзера легко выделить и убрать его заходы из таблицы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Refguser
Делаю ИМ и другие решения
Я ведь не могу хранить какой-то словарь с датами и количеством просмотрев...

Почему нет? Для этого давно существуют базы данных.
(только не "словарь", а "данные")
Ответ написан
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
Тут подходит какая-нибудь аналитическая СУБД. Например, ClickHouse практически для этого и создавался (Click Stream + Ware House).
Хранить можно следующим образом:
1. Есть общая таблица по посещениям/визитами с примерно такой структурой [page_id, visit_date] (больше и не надо)
2. Для хранения статистики создаешь материализованные представления для дня/недели/года

У них есть тестовые данные для плейграунда сбора аналитики по посещениям/хитам - https://clickhouse-docs.vercel.app/docs/en/getting...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы