我有一个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行。是否有其他更好的方法来设计用户推荐表?
谢谢!
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万个用户,但如果这样做,我希望你将使用一台服务器有足够的内存来处理这个问题。
是您的要求,只检索25项建议,并将其发送到UI层用于消费?如果是这样的情况下,计算出的建议可以建立一个JSON文件和更新对用户ID的价值体系。 MySQL有对JSON数据类型的支持。
如果你想在JSON文件进行搜索查询,这可能不是一个好办法。