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

Всем привет! Довольно часто нужно выводить различные счетчики на сайтах: количество новых уведомлений, количество заявок в друзья, количество друзей, количество предстоящих событий, количество новых комментариев и так далее. Таких счетчиков может быть достаточно много. Но может и быть минимальным, как я описал.

Данные счетчики чаще всего выводятся в UI: меню, профиле, статистике и так далее. Я их буду использовать в так же. Но передавать данные буду через API. Практически всегда такие счетчики я получал с помощью дополнительного запроса. Либо отдельного, либо с использованием join. Реже я создавал дополнительные поля у пользователя и по событиям синхронизировал эти счетчики. И выводить такие счетчики уже можно одним запросом. Но дополнительная сложность возникала об актуальности данных. Важно синхронизировать все данные верно и учитывать все нюансы.

Хотелось бы уточнить как правильно работают профессионалы с таким? Какие хорошие практике на эту тему есть? Какой подход лучше выбирать при работе с такими данными? Может быть хранить эти счетчики в NоSQL?

В целом вопросов много. Было бы хорошо услышать толковый ответ на эту тему. Возможно есть ссылки на подобные темы, видел и так далее. Всех заранее благодарю! С наступающим!)
  • Вопрос задан
  • 1551 просмотр
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Есть 3 типа счётчиков:
1. Public
2. ALL Registered Users
3. Current User
Приоритет важности актуализации значения счётчика, соответственно, обратный.

1. Для Public - обычно, суммарный сбор данных по крону (+читает счётчики системного пользователя).
2. Для ALL Registered Users - обновляет системный пользователь по своим событиям (+читает счётчики пользователей).
3. Для Current User - обновляет этот пользователь свои счётчики по своим событиям (+читает только свои счётчики).

Таким образом идёт восходящий подсчёт различных значений счётчиков с разным приоритетом и размеренной нагрузкой.

Обновление своего счётчика по событиям: любое действие, требующее подсчёт - это запрос в БД для самого действия и в этом же запросе - смена значения нужного параметра в таблице счётчиков конкретного типа счётчика (из трёх, выше указанных).

PS: И, Вас, тоже, с наступающим!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zoonman
@zoonman
⋆⋆⋆⋆⋆
Обычно для счетчиков стараются применять базы данных в памяти.
В основном это Redis, но можно и MySQL использовать, просто указать хранилище в памяти и отключить транзакции.
В большинстве своем счетчики обновляются на основе различных событий, например отправка комментария. Обновление делается в фоновом режиме.
Как только данные актуализируются, интерфейс уведомляется о новом состоянии счетчиков. На больших сайтах это реализуется через SSE или веб-сокеты.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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