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

时间:2019-02-05 04:21:25

标签: mysql database relational-database

我有一个MySQL数据库,需要为每个用户(当用户访问站点时)最多存储25条建议,这是我的简单表格,其中包含用户ID,推荐和推荐等级:

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

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

在这样一个简单的表中,2.5亿行并非不合理:

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万用户,但是如果您这样做,我希望您将使用具有足够内存的服务器来处理此问题。