Как сделать эффективную систему лайков?

Столкнулся с трудностями как продумать эффективную систему лайков для постов-твитов. Использую NodeJS/Mongoose.

Первое что приходит в голову выглядит очень неэффективно, куча ненужных вычислений. Поскольку надо не просто счетчик лайков, а и показывать конкретному человеку лайкнул он этот твит или нет.

1. В модель Tweet сделать поле Likes, куда засовывать ObjectID всех лайкнувших.
2. Таким образом мы довольно эффективно можем считать количество лайков (просто кол-во записей)
3. Но когда вопрос стоит чтобы показать конкретному человеку ставил он лайк или нет, нам придется отправлять на клиент список всех лайкнувших и там находить совпадение с айдишником человека. Это выглядит глупо - зачем мне отправлять на клиент массив с 10000 записей лайков, только чтобы там найти совпдаение?
4. А делать отдельный эндпоинт только для статуса лайка где вычислять эти значения отдельно выглядить слишком жирно (подобного функционала будет много, и будет слишком путаница)

Также вопрос отдельно от Монги, по АПИ. У меня это все идет по РЕСТу. Поэтому это все надо получать одним запросом, когда юзер открывает страницу с лентой твитов. Как это продумать?

Как решают такую задачу?
  • Вопрос задан
  • 499 просмотров
Решения вопроса 1
profesor08
@profesor08
Для поста сделать счетчик лайков, так ты всегда будешь знать их количество, его ты будешь увеличивать/уменьшать при лайках или их отмене. Так-же вести отдельный учет каждого лайка юзеров, так ты всегда сможешь быстро узнать, лайкал ли юзер пост или нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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