Задать вопрос

Как сделать счетчик действий?

Как лучше сделать счетчик каких либо действий пользователя, например оставление комментариев, для дальнейшего вывода в ТОП 100 например.
Я так полагаю правильно будет просто считать число записей в таблице комментариев, для каждого пользователя, но при количестве пользователей 100 000+ и такого же количества комментариев это будет происходить не быстро.
Можно в таблице пользователей сделать дополнительное поле comments_count и увеличивать его при написании комментария, но это не очень правильно на мой взгляд.

Подскажите как это лучше реализовать, при условии что количество пользователей и комментариев будет свыше 100к
  • Вопрос задан
  • 415 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
dimonchik2013
@dimonchik2013
non progredi est regredi
Можно в таблице пользователей сделать дополнительное поле comments_count и увеличивать его при написании комментария, но это не очень правильно на мой взгляд.


так и делают, разве что увеличивают асинхронно
сам подумай - ращнесенный проект, и вот уже твоя база со счетчиком в сам понимаешь где
Ответ написан
Alex_Wells
@Alex_Wells
PHP/Kotlin
Категорически нельзя использовать никакие "comments_count" - от них только проблемы. Всегда!

Самым правильным и простым решением будет после каждого комментария либо любого другого действия кэшировать запрос. Таким образом мы ничего не меняем в коде, но при этом даем огромную добавку к производительности если речь идет об миллионах.

А вообще, когда речь идет о таких цифрах, не очень понятно, почему все стоит на едином хосте с единой базой..
Ответ написан
Кешируйте count нужной сущности по каждому юзеру в его модели, или где вам покажется более правильным.
Обновлять его можно несколькими вариантами. Можно создать очередь в которую будет периодически валиться job после определенного действия пользователя. Можно задать временные интервалы обновления рейтинга, например 4 раза в сутки, и в промежутки по 6 часов потихоньку обновлять count по каждому пользователю (в таком случае кешировать мы будем старое и новое значение и их время, а рейтинг обновлять, когда у всех новое значение будет в требуемом промежутке).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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