Хранить «лайки» предмета в базе данных? - PullRequest
3 голосов
/ 24 июля 2010

Я запускаю приложение Rails на Postgres через Heroku.

Я бы хотел добавить подобные «лайки» Facebook на мой сайт для различных элементов, таких как комментарии пользователей. Какой самый умный способ сохранить их в моей базе данных, который будет эффективным и быстрым?

Очевидный вариант - просто иметь похожую таблицу соединения между пользователями и элементами, что-то вроде этого:

user_id int
item_id int
item_type string
created_at datettime

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

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

Мой план состоит в том, чтобы добавить ко всем симпатичным элементам текстовое поле, в котором я буду хранить сериализованный массив. Таким образом, каждое нажатие предмета будет сопровождаться полным списком тех, кому он понравился. Есть ли лучший способ сделать это, или это рекомендуемый подход?

1 Ответ

7 голосов
/ 25 июля 2010

Есть ли у вас основания полагать, что ваш набор данных будет настолько большим, что объединение будет слишком дорогим?Postgres, хотя и не такой быстрый, как самые быстрые СУБД, в наши дни довольно быстр.Раньше я запускал веб-сайт, который посещал миллионы просмотров в день, и требовал несколько довольно сложных запросов для создания каждой страницы.Сделав немного простого кэширования, мы смогли запустить его на очень скромном оборудовании.

Вы отказываетесь от многих преимуществ использования СУБД при денормализации.Я бы сделал это, только если бы знал, что должен был.И если бы это было так, я бы подумал использовать что-то еще, например, простую базу данных ключ / значение, для этих данных.Но я думаю, что это может иметь место только для вас, если у вас есть ужасно много данных.

...