社交网络关系 mysql架构_社交网络海量用户关系(关系链)设计思考

本文探讨了社交网络中海量用户关系的存储设计,包括弱好友关系和强好友关系的数据库表结构,以及面对大规模数据时的分库分表策略。针对强好友关系提出了两种方案,并强调了分库分表的基本原则,以避免跨库事务和扫库扫表。还简单提及了跨库事务的异步消息和异步复制解决方案。
摘要由CSDN通过智能技术生成

1.背景

1.1.关系链业务

社交系统(微信、QQ,支付宝)需要解决的一个工程问题是如何完成海量用户关系存储,并高效查询。典型代表系统是微信好友、QQ好友、蚂蚁森林游戏中的好友关系、微博粉丝、知乎粉丝偶像列表等等。这类业务其实就是关系链业务,而关系链分弱好友关系和强好友关系。

弱好友关系不需要彼此的同意,比如用户A关注用户B这类关注和粉丝的关系。而强好友关系需要经过彼此同意,比如用户A请求添加B为好友,用户B同意后,则AB就互为好友。

1.2.举例

举个例子:假设需要你设计蚂蚁森林这个系统,系统假设有1亿用户,每个用户平均有100个好友,如果是你需要如何设计数据库表结构呢?

如果进行了数据库表容量评估你会发现:如果只用一张表来存储将会产生100亿条记录,这个规模已经算超大表了。使用超大表一般会产生2个问题:这个数据规模即使建立索引,查询性能也很受单台资源的影响,

互联网系统需求总是在不断变动新增字段锁表时间会特别长。基于性能考虑,单库单表很难满足需求。

基于以上分析,面对海量用户关系,一般需要分库分表,那么问题来了,怎么进行分区呢(即分区策略是什么)?

2.基本设计

2.1.弱好友关系

弱好友关系一般需要两张表:attention(关注表)、fans(粉丝表)

CREATE TABLE `attention` (

`id` int NOT NULL AUTO_INCREMENT,

`uid` int NOT NULL,

`attention_uid

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值