Дизайн базы данных для пользователя и 25 лучших рекомендаций - PullRequest
0 голосов
/ 05 февраля 2019

Я получил базу данных MySQL и мне нужно сохранить до 25 рекомендаций для каждого из пользователей (когда пользователь посещает сайт), вот моя простая таблица, в которой хранятся идентификатор пользователя, рекомендация и рейтинг для рекомендации:

userid | recommendation | rank
  1    |    movie_A     |   1
  1    |    movie_X     |   2
  ...
  10   |    movie_B     |   1
  10   |    movie_A     |   2
  ....

Я ожидаю, что около 10 миллионов пользователей, и это в сочетании с 25 рекомендациями приведет к 250 миллионам строк.Существуют ли другие лучшие способы создания таблицы рекомендаций для пользователей?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

250 миллионов строк не являются необоснованными в такой простой таблице:

CREATE TABLE UserMovieRecommendations (
  user_id INT UNSIGNED NOT NULL,
  movie_id INT UNSIGNED NOT NULL,
  rank TINYINT UNSIGNED NOT NULL,
  PRIMARY KEY (user_id, movie_id, rank),
  FOREIGN KEY (user_id) REFERENCES Users(user_id),
  FOREIGN KEY (movie_id) REFERENCES Movies(movie_id)
);

Это 9 байтов на строку.так что только около 2Гб.

25 * 10,000,000 * 9 bytes = 2250000000 bytes, or 2.1GB.

Возможно, вдвое больше, чтобы учесть индексы и так далее.Все еще нетрудно представить сервер MySQL, сконфигурированный для хранения всего набора данных в оперативной памяти.И, вероятно, нет необходимости хранить все данные в оперативной памяти, поскольку не все 10 миллионов пользователей будут одновременно просматривать их данные.

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

0 голосов
/ 05 февраля 2019

Требуется ли вам только получить 25 рекомендаций и отправить их на уровень пользовательского интерфейса для потребления?в этом случае система, которая вычисляет рекомендации, может построить документ JSON и обновить значение в соответствии с идентификатором пользователя.MySQL поддерживает тип данных JSON.

Это может быть не очень хорошим подходом, если вы хотите выполнять поисковые запросы в документе JSON.

...