我正在开发一个社会化的android应用程序,它拥有类似于soundcloud这样的追随者系统。
我知道它可以很容易地在MySQL中实现,这是一个包含跟随者和跟随者的表。
follower_id following_id
1 2
4 1
6 2
9 6
. .
. .
. .并使用这两个ids作为主键。
,但问题是,我们期望网络能增长到数百万用户。
想象一下,只有100万用户,平均每个人都有500个关注者,跟随着500个人。
这将导致一个大约1,000,000,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不支持事务处理,因为对于每一个后续操作,我都应该将它存储在2个文档中!
那么,你认为做这件事的最佳方法是什么?如果表增长到数十亿行,MySQL会表现良好吗?!!还有其他有效的设计吗?!
发布于 2016-04-30 04:11:14
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;这样,你可以从呃到ee,反之亦然。
有了这个MySQL表结构和10亿行和500个关注者,SELECT er_id FROM tbl WHERE ee_id = 1234; (反之亦然)通常只需要10-20毫秒,即使在旋转驱动器上也是如此。
( follower_id和followee_id的相似性使我缩短了列名。)
https://stackoverflow.com/questions/36890773
复制相似问题