我有一个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亿行。还有其他更好的方法来设计用户推荐表吗?
谢谢!
答案 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万用户,但是如果您这样做,我希望您将使用具有足够内存的服务器来处理此问题。