@Vadim1899

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

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

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

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

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

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

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

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

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

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