@Vadim1899

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

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

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект