我正在开发一个社交 android 应用程序,它具有与 soundcloud 相同的关注者系统。
我知道它可以像这样在 MySQL 中轻松实现,这是一个包含关注者和他关注的人的关注表
follower_id following_id
1 2
4 1
6 2
9 6
. .
. .
. .
并使用两个 id 作为主键。
但问题是我们预计网络会增长到数百万用户。
假设只有 100 万用户,平均每个人都有 500 名关注者和关注 500 人。
这将产生一个大约有 1,000 * 1,000,000 = 1,000,000,000 条记录的表格,而且这个表格还会继续增长!
MySQL 能否在这种情况下表现良好?
我可以使用 MongoDB 并像这样存储它
user_id followers following
1 [embedded documents holding followers] [embedded documents holding following]
2 [embedded documents holding followers] [embedded documents holding following]
3 [embedded documents holding followers] [embedded documents holding following]
...
这里的问题不是我认为的性能,而是 mongo 不支持事务,因为对于以下每个action 我应该将它存储在 2 个文档中!
那么,您认为最好的方法是什么?如果表增长到数十亿行,MySQL 会表现良好吗?!!还有其他高效的设计吗?!
最佳答案
CREATE TABLE Follow (
er_id INT UNSIGNED NOT NULL COMMENT 'follower',
ee_id INT UNSIGNED NOT NULL COMMENT 'followee',
PRIMARY KEY(er_id, ee_id),
INDEX(ee_id, er_id)
) ENGINE=InnoDB;
这样,您就可以从 er 到 ee , 反之亦然。
使用 MySQL 表结构和 10 亿行和 500 个关注者,SELECT er_id FROM tbl WHERE ee_id = 1234;
(反之亦然)通常只需要 10-20 毫秒,即使在旋转驱动器上也是如此.
(follower_id
和 followee_id
的相同性导致我缩短了列名。)
关于mysql - 数据库设计——Follow System of billions of records,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36890773/