童话说说技术创业美文职业
投稿投诉
职业母婴
职场个人
历史治疗
笔记技能
美文纠纷
幽默家庭
范文作文
乐趣解密
创业案例
社会工作
新闻家居
心理安全
技术八卦
仲裁思考
生活时事
运势奇闻
说说企业
魅力社交
安好健康
传统笑话
童话初中
男女饮食
周易阅读
爱好两性

微博feed系统的push和pull模式和时间分区拉模式架构

1月5日 望北海投稿
  sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter。com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed架构,也就是推拉模式(timyang上次也分享了新浪微薄的模式)。下面我们就微博的feed推拉(push,pull)模式做一下探讨,并提出新的时间分区拉模式。
  众所周知,在微博中,当你发表一篇微博,那么所有关注你的followers(粉丝)都会在一定的时间内收到你的微薄,这有点像群发一封邮件,所有的抄送者都会在一定的时间内收到。到这里,你可能觉得没有什么难度。我们看下下面的截图:
  图一:新浪微博姚晨
  图二:twitter上冯大辉
  新浪微博的姚晨粉丝有2594751,她发表任何一篇微博,都需要2594751个粉丝在一定的时间内收到,twitter的冯大辉发表一篇的话,需要19868个followers收到。
  相反,姚晨需要收到他关注的545个人的所有更新,冯大辉需要收到他关注的2525个人的所有更新。到这里,你是不是感觉到有那么一点点小挑战呢?
  下面我们看下微博一般的整体结构图:
  图三:微博整体结构
  图中展示了微博的整体数据流程,先了解下整体的数据结构,没有涉及到followers等的推拉模式处理。下面我们再看下推模式(push):
  图四:推模式结构
  推模式需要把一篇微博推送给所有关注他的人(推给所有的粉丝),比如姚晨,我们就需要推送给2594751个用户的feeds表中。当然,feeds表可以很好的进行sharding,存储也都是一些数字型的字段,存储空间可能不是很大,用户在查询自己关注的所有人的feed时,速度快,性能非常高,但是推送量会非常大,姚晨发表一篇,就会产生200多万条数据。试想,一个大量用户的微薄系统通过使用推模式,是不是会产生非常惊人的数据呢?
  下面看下拉模式(pull)
  图五:拉模式
  拉模式只需要用户发表微博时,存储一条微博数据到feeds表中(feeds表可以是一个临时表,只保存近期可接受范围的数据)。用户每次查询feed时都会去查询feeds表。比如姚晨打开自己的微薄首页,就产生:SELECTidFROMfeedswhereuidin(followinguidlist)ORDERBYidDESCLIMITn(查询最新的n条),缓存到memcached
  {data:idlist,timeline:上次查询出来的最新的一条数据的时间}
  再次刷新:SELECTidFROMfeedswhereuidin(followinguidlist)AND(memcached存储的上次的timeline)ORDERBYidDESCLIMITn
  这种模式实现起来也是比较简单和容易的,只是在查询的时候需要多考虑下缓存的结构。但是feeds表会产生很大的压力,怎么说feeds表也要保存最近十天半个月的数据吧,对于一个大点的系统,这会产生比较大的数据,如果following的人数比较多,数据库的压力就会非常大。而且一般在线的用户,客户端都会定期扫描,又会增加很大的压力,这在查询性能上没有推模式的效率高。
  下面我们在对拉模式做一下改进优化
  图五:拉模式(pull)改进(时间分区拉模式)
  拉模式的改进主要是在feeds的存储上,使用按照时间进行分区存储。分为最近时间段(比如最近一个小时),近期的,比较长时期等等。我们再来看下查询的流程,比如姚晨登陆微博首页,假设缓存中没有任何数据,那么我们可以查询比较长时期的feeds表,然后进入缓存。下一次查询,通过查询缓存中的数据的timeline,如果timeline还在最近一个小时内,那么只需要查询最近一个小时的数据的feed表,最近一个小时的feeds表比图四的feeds表可要小很多,查询起来速度肯定快几个数量级了。
  改进模式的重点在于feeds的时间分区存储,根据上次查询的timeline来决定查询应该落在那个表。一般情况下,经常在线的用户,频繁使用的客户端扫描操作,经常登录的用户,都会落在最近的feeds表区间,查询都是比较高效的。只有那些十天,半个月才登录一次的用户需要去查询比较长时间的feeds大表,一旦查询过了,就又会落在最近时间区域,所以效率也是非常高的。
投诉 评论 转载

浅谈UGC的信息组织方式醒目!本文颇枯燥,很难耐心看完,提前预警一下。1、关于信息的组织方式,在1。0时代无非是人工分类,网站下面设频道,频道下面设栏目,栏目下面再设内容列表页。到了2。0……管理中心左侧栏的“黄金分割”宽度浅谈关于“管理中心”的界面设计框架,一般我们都会选择传统的“工”字结构,顶部是形象区,左侧是功能列表区,右侧是操作区,这种结构的功能扩展性和易用性都是非常好的,几乎90以上的软件系……产品线定位不断的接触到公司的新产品,同时也给公司新的产品制定规划线路。对新产品线的定位,已经涉及到公司的整体发展、公司效益、目标群体定位等多方面。产品经理在给产品线定位时考虑的是全方面位……改善用户体验的有力手段:即时反馈为什么鸟儿会飞?为什么船能浮起来?为什么打别人自己的拳头也会痛?这么高深的问题,几百年前就被一个叫牛顿的同学解决了。牛顿第三定律:对于每一个作用力,必然同时产生一个方向相……视觉大同Visualsimilarity视觉,一个设计师耳熟能详的词,每个人都会有一套自己的理论,可能任何一个非设计出身的都会说,视觉就是能看得见的呗。确实是这样,视觉广义上讲,是可以包罗所有可见事物,一种与人……商业视觉设计实战首部曲标题文字篇之前我把平面设计的视觉呈现分为:构图,调子,元素和内容四大部分组成,所以我分四部曲来讲,其中元素部分又分为标题,主体和大场景三部分,今天讲的就是标题部分。在讲标题设计之前,先说……Web设计精确点滴这篇文章说实际问题的,所以不多强调,下面是我总结的一些比较突出的细节问题,而且我一直认为这些问题比较严重,正因为这些都是基本问题,很容易解决的,但把这种忽略养成一种习惯性的“经……互联网界面设计模式We封皮上是这样描述本书的:想知道怎样在今天的Web上创造伟大的用户体验吗?本书以当前最流行的Web站点为例,介绍了两大良行之有效的Web界面设计模式。如果你想构建或重构……微博feed系统的push和pull模式和时间分区拉模式架构sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter。com或者国内的新浪微博,人人网等,在各种技术社区,技术大会……周鸿祎:为什么是微创新?时代在变化,认识不到这一点,做什么事儿都做不成。就互联网来说,有两个方面发生了显著变化:第一,互联网的用户群变化了,如果你还按照十年前对用户的理解去做市场、做产品,肯定是……网易UED,连个Banner都做的这么专业有人觉得做个banner放2张图,排几个字的事,一点技术含量都没有?像其他门户banner基本上都是编辑们自己做的。我觉得这么说是不对的,其实一个banner可……往前迈一步,往后撤一步在很多场合,都有人问我,怎么从一个做平面设计,最后做到产品设计。翻译过来就是:视觉交互产品。其实很遗憾,这三个领域,我都是半调子。但问得多了,还是写篇博……
让你的网页排名居高不下唐山网址优化的进程城市旅游网站优化SEO优化常见问题著名旅游城市网站如何进行优化百度中的城市如何查找城市网站优化需要怎么做?网站要怎么优化省级城市网站优网站优化要注意什么怎样去进行网站优化城市如何优化历年分布式光伏政策变化研究每食计划丨什么样的美食,让你念念不忘?夏季,记得吃这水中3鲜补充营养消暑气养好身体,过夏天男生说女生可爱的原因有这样一些心理荣耀支付卡支付刷公交卡坐地铁付款尖脸女生适合的发型轻松修颜尽显靓丽林俊德是两弹一星吗林俊德是两弹一星元勋吗传媒造句用传媒造句大全摩羯座冷战后会主动吗摩羯座生气时怎么哄花的优美句子45条三角肌锻炼方法(6个经典动作全面刺激你的三角肌)机械制造专业个人自荐信范文

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找作文动态热点娱乐育儿情感教程科技体育养生教案探索美文旅游财经日志励志范文论文时尚保健游戏护肤业界