首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库设计-数十亿记录跟踪系统

数据库设计-数十亿记录跟踪系统
EN

Stack Overflow用户
提问于 2016-04-27 13:07:40
回答 1查看 537关注 0票数 1

我正在开发一个社会化的android应用程序,它拥有类似于soundcloud这样的追随者系统。

我知道它可以很容易地在MySQL中实现,这是一个包含跟随者和跟随者的表。

代码语言:javascript
复制
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像这样存储它

代码语言:javascript
复制
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会表现良好吗?!!还有其他有效的设计吗?!

EN

回答 1

Stack Overflow用户

发布于 2016-04-30 04:11:14

代码语言:javascript
复制
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_idfollowee_id的相似性使我缩短了列名。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36890773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档