用户数据库设计和前 25 条建议

Database design for user and top 25 recommendations

我有一个 MySQL 数据库,需要为每个用户存储最多 25 条推荐(当用户访问网站时),这是我的简单 table,其中包含用户 ID、推荐和排名对于推荐:

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

我预计大约有 1000 万用户,加上 25 条建议将产生 2.5 亿行。还有其他更好的方法来设计用户推荐table吗?

谢谢!

您的要求是否仅检索 25 个推荐并将其发送到 UI 层以供消费? 如果是这种情况,计算推荐的系统可以构建一个 JSON 文档并根据 Userid 更新值。 MySQL 支持 JSON 数据类型。

如果您想对 JSON 文档执行搜索查询,这可能不是一个好的方法。

2.5 亿行在一个简单的 table 中并非不合理:

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 个字节。所以只有大约2GB。

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

考虑到索引等等,可能会加倍。仍然不难想象 MySQL 服务器配置为将整个数据集保存在 RAM 中。而且可能没有必要将所有数据保存在 RAM 中,因为并非所有 1000 万用户都会同时查看他们的数据。

您可能永远不会达到 1000 万用户,但如果您达到了,我希望您将使用内存充足的服务器来处理这个问题。