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

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

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

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

В целом вопросов много. Было бы хорошо услышать толковый ответ на эту тему. Возможно есть ссылки на подобные темы, видел и так далее. Всех заранее благодарю! С наступающим!)
  • Вопрос задан
  • 1405 просмотров
Решения вопроса 2
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: И, Вас, тоже, с наступающим!
Ответ написан
gzhegow
@gzhegow
Думал, стану умнее, когда адаптируюсь, но нет
Редис. Счетчики могут быть переключены одновременно сотней людей, транзакции это будет конец. Чтобы принять запрос его хорошо бы сделать тем меньше чем возможно, хттп запрос это не самое малое что можно передать. Открыв сокет и плюнув датой, хешом юзера и айди счетчика, да все это в бинари, данных будет существенно меньше
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zoonman
@zoonman
CEO @ LinuxQuestions.ru
Обычно для счетчиков стараются применять базы данных в памяти.
В основном это Redis, но можно и MySQL использовать, просто указать хранилище в памяти и отключить транзакции.
В большинстве своем счетчики обновляются на основе различных событий, например отправка комментария. Обновление делается в фоновом режиме.
Как только данные актуализируются, интерфейс уведомляется о новом состоянии счетчиков. На больших сайтах это реализуется через SSE или веб-сокеты.
Ответ написан
Ваш ответ на вопрос

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

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