数据库设计为用户和排名前25位的建议

问题描述 投票:0回答:2

我有一个MySQL数据库和需要存储高达每个用户(当用户访问该站点)的25项建议,这是我持有的推荐用户ID,推荐和排名简单的表:

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

我预计大约1000万用户,并且结合25项建议将导致250M行。是否有其他更好的方法来设计用户推荐表?

谢谢!

mysql database relational-database
2个回答
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.

也许翻一番考虑到索引等。不过不难想象,被配置为保持整个数据存储在RAM设置一个MySQL服务器。而且它可能没有必要持有RAM的所有数据,因为不是所有的1000万个用户将在一次观看他们的数据。

你可能永远达不到1000万个用户,但如果这样做,我希望你将使用一台服务器有足够的内存来处理这个问题。


2
投票

是您的要求,只检索25项建议,并将其发送到UI层用于消费?如果是这样的情况下,计算出的建议可以建立一个JSON文件和更新对用户ID的价值体系。 MySQL有对JSON数据类型的支持。

如果你想在JSON文件进行搜索查询,这可能不是一个好办法。

© www.soinside.com 2019 - 2024. All rights reserved.