Что было бы хорошей стратегией для реализации функциональности, подобной «лайкам» на Facebook? - PullRequest
0 голосов
/ 20 мая 2011

У меня есть веб-сайт, на котором люди публикуют комментарии, фотографии и другой контент.Я хочу добавить функцию, которая может нравиться или не нравиться пользователям.

Я использую базу данных для хранения всего содержимого.

Есть несколько подходов, на которые я обращаю внимание:

Метод 1:

  1. Добавьте столбец «like_count» в таблицу и увеличивайте его всякий раз, когда кому-то нравится элемент
  2. Добавьте «user_likes»таблица для отслеживания всего, что понравилось пользователю.

Плюсы: Простота реализации, минимальное количество запросов.Минусы: пункт должен обновляться с каждым изменением в числе.У меня есть целый список кэшированных элементов, который будет поврежден.

Метод 2:

  1. Создайте новую таблицу like_summary и сохраните общее количество лайковкаждый элемент в этой таблице
  2. Добавьте таблицу 'user_likes', чтобы отслеживать все, что понравилось пользователю.
  3. Кэшируйте данные like_summary в memcache и очищайте их только в случае изменения значения

Плюсы: Меньшая нагрузка на таблицу основных элементов, она может быть кэширована, не беспокоясь.Минусы: слишком много попаданий в memcache (на странице показано 20 элементов, которые необходимо загрузить из memcache), может быть медленным

Есть предложения?

Ответы [ 3 ]

3 голосов
/ 20 мая 2011

Просто сумасшедшая идея: почему бы просто не использовать кнопку Facebook like?Тогда вы не только получите эту функциональность бесплатно, но и сможете значительно увеличить посещаемость вашего сайта с помощью постов на Facebook: «Этому человеку нравится этот сайт».

1 голос
/ 20 мая 2011

На самом деле вам понадобится только таблица user_likes.Like_count рассчитывается из этой таблицы.Вам нужно будет только сохранить это, если вам нужно повысить производительность, но поскольку вы используете memcached, может быть хорошей идеей не сохранять агрегированное значение в базе данных, а сохранять его только в memcached.

1 голос
/ 20 мая 2011

Одна таблица отношений, которая выполняет сопоставление «многие ко многим» между пользователем и элементом, должна сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...