? 粉丝关系链,10亿数据,如何设计?_CQITer_重庆IT人之家 yabo10.com亚博体育,亚博娱乐在线网站,亚博国际娱乐7171 ?

粉丝关系链,10亿数据,如何设计?

粉丝关系链,10亿数据,如何设计?

继续答星球水友提问,大数据量,高并发量,好友关系链、粉丝关系链要如何设计?

什么是关系链业务?

关系链主要分为两类,弱好友关系与强好友关系,两类都有典型的亚博娱乐在线网站产品应用。

弱好友关系的建立,不需要双方彼此同意:

用户A关注用户B,不需要用户B同意,此时用户A与用户B为弱好友关系,对A而言,暂且理解为“关注”;

用户B关注用户A,也不需要用户A同意,此时用户A与用户B也为弱好友关系,对A而言,暂且理解为“粉丝”;

idol与fans这类微博粉丝关系链,是一个典型的弱好友关系应用。

强好友关系的建立,需要好友关系双方彼此同意:

用户A请求添加用户B为好友,用户B同意,此时用户A与用户B则互为强好友关系,即A是B的好友,B也是A的好友;

QQ好友关系链,是一个典型的强好友关系应用。

粉丝关系链,10亿数据,如何设计?

好友中心是一个典型的多对多业务:

一个用户可以添加多个好友

也可以被多个好友添加

其典型架构为:

粉丝关系链,10亿数据,如何设计?

friend-service:好友中心服务,对调用者提供友好的RPC接口

db:对好友数据进行存储

弱好友关系,存储层应该如何实现?

通过弱好友关系业务分析,很容易了解到,其核心元数据为:

guanzhu(uid,?guanzhu_uid);?

fensi(uid,?fensi_uid);?

其中:

guanzhu表,用户记录uid所有关注用户guanzhu_uid

fensi表,用来记录uid所有粉丝用户fensi_uid

需要强调的是,一条弱关系的产生,会产生两条记录,一条关注记录,一条粉丝记录。 例如:用户A(uid=1)关注了用户B(uid=2),A多关注了一个用户,B多了一个粉丝,于是:

guanzhu表要插入{1, 2}这一条记录,1关注了2

fensi表要插入{2, 1}这一条记录,2粉了1

如何查询一个用户关注了谁?回答:在guanzhu的uid上建立索引:

select?*?from?guanzhu?where?uid=1;?

即可得到结果,1关注了2。 如何查询一个用户粉了谁?回答:在fensi的uid上建立索引:

select?*?from?fensi?where?uid=2;?

即可得到结果,2粉了1。

强好友关系,存储层应该如何实现?

方案一

通过强好友关系业务分析,很容易了解到,其核心元数据为:

friend(uid1,?uid2);?

其中:

uid1,强好友关系中一方的uid

uid2,强好友关系中另一方的uid

uid=1的用户添加了uid=2的用户,双方都同意加彼此为好友,这个强好友关系,在数据库中应该插入记录{1, 2}还是记录{2,1}呢?

回答:都可以。为了避免歧义,可以人为约定,插入记录时uid1的值必须小于uid2。 例如:有uid=1,2,3三个用户,他们互为强好友关系,那边数据库中可能是这样的三条记录

{1,?2}?

{2,?3}?

{1,?3}?

如何查询一个用户的好友呢?回答:假设要查询uid=2的所有好友,只需在uid1和uid2上建立索引,然后:

select?*?from?friend?where?uid1=2?

union?

select?*?from?friend?where?uid2=2?

即可得到结果。

方案二

强好友关系是弱好友关系的一个特例,A和B必须互为关注关系(也可以说,同时互为粉丝关系),即也可以使用关注表和粉丝表来实现:

guanzhu(uid,?guanzhu_uid);?

fensi(uid,?fensi_uid);?

例如:用户A(uid=1)和用户B(uid=2)为强好友关系,即相互关注:

用户A(uid=1)关注了用户B(uid=2),A多关注了一个用户,B多了一个粉丝,于是:

guanzhu表要插入{1, 2}这一条记录

fensi表要插入{2, 1}这一条记录

同时,用户B(uid=2)也关注了用户A(uid=1),B多关注了一个用户,A多了一个粉丝,于是:

guanzhu表要插入{2, 1}这一条记录

fensi表要插入{1, 2}这一条记录

两种实现,各有什么优缺点?

对于强好友关系的两类实现:

friend(uid1, uid2)表

数据冗余guanzhu表与fensi表(后文称正表T1与反表T2)

在数据量小时,看似无差异,但数据量大时,数据冗余的优势就体现出来了:

friend表,数据量大时,如果使用uid1来分库,那么uid2上的查询就需要遍历多库

相关推荐
新闻聚焦
猜你喜欢
热门推荐
  • 微软AI面试题有多难?这里有一份样卷

      究竟什么样的AI人才能被微软这样的巨头聘用呢?今天,文摘君就淘来了几道微软AI 面试题,同时给出了最基本的解答......

    06-25????来源:澎湃新闻网

    分享
  • 全球最聪明的大脑怎么看AI?他们预测了

      2017年AI领域取得了诸多成果。2018年AI又将何去何从?以下是来自世界顶级研究人员和行业领军人物对2018年AI领域发展作......

    02-20????来源:虎嗅网

    分享
  • 2017JavaScript框架战报 - React分战场

      我们来看看与React有关的软件包的生态系统。当Facebook构建React时,就有许多来自开源社区的第三方软件包。为提供完......

    02-27????来源:湖北新闻网

    分享
  • 小白学数据:教你用Python实现简单监督学

      监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近......

    03-05????来源:今日头条

    分享
  • 现代编程语言Swift、Kotlin等十大有趣功能

      最近学习了一些现代编程语言,比如Reason,Swift,Kotlin和Dart。这些编程语言提供了许多新功能,本文主要分享了我认......

    04-29????来源:祁东新闻网

    分享
  • 领域场景分析的6W模型

      组成场景的要素常常被称之为6W模型,即描写场景的过程必须包含Who,What,Why,Where,When与hoW这六个要素。......

    04-30????来源:砍柴网

    分享
  • 开源应用服务器WildFly 12发新季度交付模式

      WildFly 12 Final版本现在已经可以下载了,WildFly是一款灵活的开源应用服务器,支持开发人员构建轻量级应用程序。支持......

    05-10????来源:青岛新闻网

    分享
  • 基于Spring Cloud的微服务落地

      微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,......

    06-04????来源:广西新闻网

    分享
  • 为什么阿里工程师纷纷在内网晒代码?

      前阵子,在阿里一个小黑屋里,5名对代码有着极致追求的工程师参与阿里代码领域最高荣誉“多隆奖”的最终角逐。......

    06-08????来源:四川新闻网

    分享
  • 超级大汇总!200多个最好的机器学习、

      我把这篇文章分为了四个部分:机器学习,自然语言处理,python和数学。在每个部分中我都列举了一些主题,但是因......

    09-25????来源:洛阳新闻网

    分享
返回列表
Ctrl+D?将本页面保存为书签,全面了解最新资讯,方便快捷。