关闭

微博关注我、我关注你数据库该怎么设计

259人阅读 评论(0) 收藏 举报

尤其是一个明星,他有上百万上千万粉丝:

解决方案有两个思路:

1 由被关注者主动推数据
2 由被关注者向粉丝推送一个通知,然后由粉丝去拉数据


不过这样就意味着他发一条消息需要有千万个人来访问这张消息表或发一条消息需要写向千万个粉丝的消息表写数据。


第一种方案,应该是每个人都有一张自己的消息表。当被关注者发消息时,会将此消息写入关注者的消息表中,内容大概有被关注者id、消息内容、发送时间。这里最大的问题在于要向千万张表写数据。

第二种方案,每个人的消息只存储在自己的消息表中,当自己发消息后,写入。然后由其所有关注者定时从这张表中取数据。或者当自己发消息后,向所有关注者发一个通知,比如发个1,关注者就来自己的消息表取数据。这种方法当某人粉丝数量很多时,会造成这张表的并发读操作非常高。

简单的看,两种方案都有利弊。但都还有很大优化空间。新浪微博两种方案都用过。并且在这过程中也摸索出了一些经验。

第一种方案他们采取过分批推送的策略,会将用户按活跃度划分几个等级,推送顺序是按照用户活跃度等级来决定的。分批推送一定程度上减轻了负担。

第二种方案可以采用冗余多份数据负载均衡的办法将那一张表的并发读操作均衡开。比如我有一张消息表,但这张消息表存储n份,在n台服务器上,内容完全一致。当我发消息时同时向这几台服务器的表写数据,或者分批写入,然后我不同的粉丝,会根据一定策略来决定去哪台服务器读。这里也可以将用户活跃度作为参数,活跃度高的粉丝去服务器a读(服务器a中的消息表在分批写入时最优先被写入)

想来想去,方案似乎就两种,但可优化的地方还很多,例如在读取数据时,加入cache层,cache层只存储每个用户最近发表的消息,数据定期归档。

0
0
查看评论

微博关注我、我关注你数据库该怎么设计

微博关注是根据什么来知道你关注我,我关注你了?数据库怎么设计? 尤其是一个明星,他有上百万上千万粉丝: 解决方案有两个思路: 1 由被关注者主动推数据 2 由被关注者向粉丝推送一个通知,然后由粉丝去拉数据 不过这样就意味着他发一条消息需要有千万个人来访问...
  • u010098331
  • u010098331
  • 2016-05-18 17:44
  • 3096

昨天已经顺利完成了新浪微博的关注和获取已关注人信息的功能开发

<br />     首先是获取OAuth认证,简历一个Oauth类里面执行认证的操作,这个过程我会在下一篇博文里面讲到,那么要想获取登陆用户的所关注用户的id,微博等信息需要对下面这个json地址进行查询!<br />http://api.t....
  • henry121212
  • henry121212
  • 2011-05-31 10:20
  • 3110

SNS,微博 好友关注和推送功能的数据库设计是怎么实现的底层设计?

1.假如a有1000万粉丝,a发表了一篇博客,这个行为要通知这1000万粉丝,那么就会有两种情况,  (1) 这1000万粉丝每个人都有一个消息中心表,则发送1000万条信息在系统里通知这个1000万个粉丝,  (2) 系统只有一个消息表,这1000万粉丝固定来这个表里拉取自...
  • joeyon
  • joeyon
  • 2015-01-23 14:15
  • 1433

一个微博数据库设计带来的简单思考

在微博系统中,当前用户、关注者(也就是粉丝)、被关注者(崇拜对象)这三种角色是少不了的。他们之间看似简单的关系,但是其中数据库表将如何设计,却让我很难琢磨,在如下解决方案中,你们会选择哪种?为什么要选择这种?是否有更好的解决方案? 解决方案一: 表名 用户信息表 字段名 字段...
  • l1028386804
  • l1028386804
  • 2015-12-31 14:34
  • 2896

用MySQL实现微博关注关系的方案分析

由于产品需求的需要,我们做的产品里要实现类似微博里的关注关系。本文是以MySQL为基础,分析用MySQL如何实现微博的关注关系,对理解关注关系有一定的意义。 关注关系产生的四种关系状态 关注 粉丝 双向关注(互粉) 无关系 用词follower表示粉丝 -- 追随者 用...
  • abcd1f2
  • abcd1f2
  • 2015-08-19 15:33
  • 1498

微博相互关注互粉mysql表实现

关注关系产生的四种关系状态 关注 粉丝 双向关注(互粉) 无关系 用词follower表示粉丝 -- 追随者 用词following表示关注 -- 追随 设计的结构必须能满足以下功能: 查询关注列表 查询粉丝列表 查询双向关注列表 判断两个用户的关系 查询带关系状态的任一列表 第一种方...
  • u012129558
  • u012129558
  • 2016-08-29 11:29
  • 1072

CSDN找到:我关注的人

一、进入“个人主页”, 二、找到“我的关系”,即可。 如图:
  • Liucheng417
  • Liucheng417
  • 2016-01-26 11:21
  • 2220

如何在新浪微博中批量取消关注

一、背景如果不想看这烦人的背景介绍,直接跳到最后看”解决步骤“(sorry,不会页内跳转,求教)。本篇文章在《Android网络编程TCP、UDP(一)》开始后不久就写好了。但毕竟那篇是重点、专业,而这篇完全是业余爱好折腾。因为近一年没有登录新浪微博了。结果密码被锁定了,密码正确但登录不了。没办法只...
  • a10615
  • a10615
  • 2016-09-04 23:46
  • 7645

微博数据库设计

部分功能建表设计      Users用户注册信息表 描述 字段名 类型 空值 其他 用户ID user_id number(8) ...
  • chrp99
  • chrp99
  • 2013-05-28 17:29
  • 16185

php处理我的关注和关注我的

php处理我的关注和关注我的
  • nianzhi1202
  • nianzhi1202
  • 2016-11-03 21:10
  • 890
    个人资料
    • 访问:173135次
    • 积分:3526
    • 等级:
    • 排名:第11135名
    • 原创:156篇
    • 转载:250篇
    • 译文:2篇
    • 评论:14条
    最新评论