@Vadim1899

Как реализовать рейтинг у комментариев?

Всем привет! Появилась необходимость сделать рейтинг у комментариев на сайте (самопис, php).
Исходя из этого, на ум приходит только такая реализация:
1. Создаем в бд таблицу а-ля "comments_votes", где будет user_id (id проголосовавшего), comment_id (id коммента), date (дата голосования). И далее для каждого комментария подсчитывать количество голосов.

Но меня очень напрягает, а не будет ли это давать слишком большую нагрузку на бд? Скажем, у поста 100 комментариев, и следовательно будет 100 запросов к бд (это только по комментарием) для загрузки одной страницы. Предполагаемый онлайн будет в районе 400-500 чел, и если все одновременно откроют пост, не ляжет ли бд?
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ответы на вопрос 2
@oxidmod
Выгребайте рейтинги отдельно.
Комменты достаете из дерева, а потом рейтинги через comment_id in (...)
Ответ написан
Skiphog
@Skiphog
PHP Crutch developer
Как вариант.

Добавить в таблицу с комментариями поле с рейтингом. (Денормализовать)

Каждый раз, как пользователь голосует (лайкает) увеличиваете/уменьшаете счетчик с рейтингом.
Да, добавляется запрос с апдейтом, но зато вы избавитесь от select на количество, т.к. рейтинг уже будет в таблице.
Так же при голосовании вставляете запись в comments_votes то, что задумали.

А при показе комментариев, делаете тот же запрос, что и был, только добавляете left join к таблице comments_votes по признаку id комментария и id пользователя.
Соответственно, если юзер еще не голосовал, то вернется null.

Да, добавляется left join. Это увеличит нагрузку, но для ваших требований вы не заметите разницу.

Ну или как предложили выше вариант с comment_id in (...)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
АКМЭ сервис Санкт-Петербург
от 120 000 до 150 000 ₽
SymbioWay Москва
от 120 000 до 180 000 ₽
Директ Кредит Казань
от 70 000 до 120 000 ₽
13 авг. 2020, в 12:26
12000 руб./за проект
13 авг. 2020, в 11:59
20000 руб./за проект
13 авг. 2020, в 11:57
15000 руб./за проект