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

解决方案有两个思路:

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

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

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

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

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

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

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

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

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

  1. 微博相互关注互粉mysql表实现_数据库设计实现用户关注、被关注、互粉

    关系型数据库虽然存储用户的关系很简单,但是要求出用户关注被关注和互粉这种这块特别的麻烦,特别是用户A的粉丝与用户B的粉丝之间的关系,或者用户A的关注者与用户A自己的粉丝直接的关系等. 下面是一个要求: ...

  2. 十六款值得关注的NoSQL与NewSQL数据库--转载

    原文地址:http://tech.it168.com/a2014/0929/1670/000001670840_all.shtml [IT168 评论]传统关系型数据库在诞生之时并未考虑到如今如火如荼 ...

  3. [转载]十六款值得关注的NoSQL与NewSQL数据库

    传统关系型数据库在诞生之时并未考虑到如今如火如荼的移动.社交以及大数据负载类型,同时也并不适合处理极端规模处理任务.不过大家不必担心,十六家专业企业已经为我们带来他们各自的次世代NoSQL与NewSQ ...

  4. 微博利用JS自动关注所有推荐关注

    微博利用JS自动关注所有推荐关注 网址 浏览器F12 完成 网址 新浪微博 比如: https://weibo.com/cng?is_hot=1 浏览器F12 var clicks=document. ...

  5. python Sina微博自动转发带抽奖字样的微博,添加关注,取消关注

    项目地址:https://github.com/chengshuyi/SinaWeibo 具有的功能 转发带抽奖字样的微博并可以@相应数量的好友 提取关注并添加关注 取消关注 获取粉丝列表 转载于:h ...

  6. 爬虫爬取微博用户粉丝及其关注

    爬虫爬取微博用户粉丝及其关注 前言 ​ ​ 前段时间做了一个爬虫爬取微博用户粉丝及其关注的小项目,但忙着中期毕设答辩忘了加以记录了.对于动态网页的解决办法是使用selenium(上手比较快,而且抓包实 ...

  7. redis应用之——关注、被关注

    完全可以将关注.被关注放到某几台服务器(redis)里,每台维持个几十G的内存,由此得出对应关系会非常迅速,远超mysql等传统数据库! 粉丝表:fans:myUid oUid1 oUid2 oUid ...

  8. 第七章-Python3中Web开发框架flask实现粉丝关注与取消关注功能

    点击阅读原文PC端访问效果更佳. 代码地址:https://github.com/ddxygq/PyCode/tree/master/web/flask/mega_tutorial/chapter8- ...

  9. php 取消关注,用户关注、取消关注接口实现

    交互原理 用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL.方便开发者给用户下发欢迎消息或者做帐号的解绑. 微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次 ...

  10. (仿牛客社区项目)Java开发笔记4.4:实现关注、取消关注功能

    实现关注.取消关注功能 1.util包 RedisKeyUtil类中添加getFollowerKey方法. package com.gerrard.community.util;public clas ...

最新文章

  1. Web漏洞扫描(二:Windows server2008 R2操作系统(部署dvwa))
  2. java 多线程 day12 读写锁
  3. 深入浅出python机器学习_8.3_神经网络实例_手写识别_MNIST数据集的使用
  4. unity 公用的方法库
  5. 【JavaScript】JS事件机制学习
  6. Weblogic的缓存
  7. 1137. 第 N 个泰波那契数
  8. android sqlite 查询时间,android – sqlite日期查询
  9. 移动端设备判断,ios,android,判断设备,安卓
  10. 进程和线程相关小知识
  11. php酒店管理论文,酒店管理毕业论文
  12. Get!程序员成为高级管理者的三次跃升
  13. 光棍节就要到了,要不要给你介绍个 Python 对象?| CSDN 博文精选
  14. Android 端 Rsa加密数据
  15. 【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)
  16. 五 常见的计算机故障有哪些,六大常见的电脑故障原因
  17. 计算机科学计算器CE符号,计算器的ce和c是什么意思???
  18. Uniqlo与Fast Retailing发出警告 46万消费者账号遭入侵
  19. 怎样才能做好一个优秀的FAE ?
  20. 均值滤波计算_均值滤波器

热门文章

  1. [转]电影史上十大经典恐怖片
  2. MySQL显示表前 50 行
  3. 什么叫做项目孵化_项目制孵化事业合伙人
  4. spp协议 android,android 蓝牙SPP协议通信
  5. 清明哀悼 网站变灰(兼容常用浏览器)
  6. 数据是信息在计算机内部的反应载体,数据是信息的载体,信息是数据的()。 - 问答库...
  7. 连接服务器显示出现内部错误怎么解决方案,远程连接服务器提示“出现了内部错误”解决方法锐讯网络罗海清...
  8. 中国民生银行:智能运维引领数据中心数字化转型
  9. bzoj 4976: 宝石镶嵌
  10. Android蓝牙内核级设备驱动设计