公司要开发一个类webio的系统,一个很基本的功能就是timeline。用户在自己的主页可以看到其观注的所有用户发表的信息列表;而其它用户可以一个用户的个人主页看到这个人发布的信息列表。

这时候最主要要考虑的就是采用推模式,还是拉模式。

一、推模式,以空间换时间;一个用户发布一条新信息之后,把这条信息追加到所有的粉丝的页面信息流里;这样当一个用户登录之后,通过一条fetch命令,就可以看他关注的所有人发布的信息了。但是这样一来,所带来的各种问题接踵而至:

1. 新关注一个用户时,需要把被关注的用户的所有历史数据都放到粉丝的数据流存贮里,在长时间后这是一个非常长的操作;

2. 取消关注一个用户时,需要把被取消关注的用户从原粉丝的数据流存贮里全部删除掉,这是一个O(N)的操作,而这个N的增加会很大;

3. 当一个用户删除一个已经分享的时候,需要将他的所有的粉丝的数据流里的这条记录都删除;

4. 一个用户的粉丝数是不受限制的,所以如果一个人的粉丝数过多的时候比如有1W个粉丝,那么发一条新消息,就要分解成1W次处理逻辑,工作量十分庞大。

所以就目前来看,不应该使用推模式,推模式带来的“坑”太多;

二、拉模式,空间消耗减小,时间消耗增加。 每个用户只存一个自己的timeline, 当一个用户打开自己的主页的时候,会把他关注的所有用户的数据取过来,然后进行合并,因为两个原因:1. 用户的数据存在redis里,存取速度十分快;2. 一个用户关注的用户数目是有限的(限制200人);

但是这时候存在的问题是,随着一个用户发的消息越来越多,用户的消息列表数据会越来越长,这时候merge所有一个用户关注的用户的信息过程会耗时非常长,而且消息列表数据长的时候,大数据网络传输也会特别耗时。

所以我认为在拉模式下,主要要修改用户发布的消息在redis里存贮的方式;

我的意见是在redis里以如下形式存贮:

userid_datetime –> user message list

即redis为每个用户存贮了每天的消息列表,这样就可以细化数据的粒度,减少每次取数据的数据量。

如此一来:

1. 当一个用户打开自己的主页的时候,只需要取他关注的用户当天的消息列表,这样的话取的数据量就会少很多,大大减少数据的传输和合并时间;如果当天数据不足,考虑再取前一天的数据;

2. 当打开一个用户的个人主页的时时候,可以考虑取最近10天的数据,不足的时候再动态加载。

而在页面展示的时候,可以突出时间的分隔点:

每天和每天的数据之意加一个突出的时间分隔符:

-----------> xxxx.xx.xz <------------------

-----------> xxxx.xx.xy <------------------

这样可以让用户非常直观的感觉到一个用户的数据发布时间轴,以及自己关注的用户的活动时间轴。

个人的一些观点。

转载于:https://www.cnblogs.com/literoad/archive/2013/03/18/2966921.html

关于类微博的timeline的设计思考相关推荐

  1. 微博评论点赞mysql设计_关于微博评论功能的设计与思考

    前几天的上线功能bug,由于评论数量过多,未异步加载,导致数据丢失,原因是新老功能迁移时未做异步加载,就此功能找一下微博类评论等功能的架构设计思考,还有其他产品,社区,论坛,博客等. 微博曾流传可支撑 ...

  2. 高老师架构设计思考短句集(3)

    高老师<架构&设计思考>短句集(3) << FEB 2014 >> 一般架构师用心于改善客户的系统架构和设计,而杰出架构师努力改变自己的思考视角和视野. 杰 ...

  3. 面试必备:一个秒杀系统的设计思考

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:阿哲 segmentfault.com/a/11900000 ...

  4. 用thinkphp进行微信开发的整体设计思考

    用thinkphp进行微信开发的整体设计思考 http://www.2cto.com/weixin/201504/388423.html 2015-04-09      0个评论       作者:明 ...

  5. 一个秒杀系统的设计思考

    简介:从架构视角来看,秒杀系统本质是一个高性能.高一致.高可用的三高系统.而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题. 秒杀大家都不陌生.自2011年首次出现以来,无论是双 ...

  6. 淘宝的商品中心和类目体系是怎么设计的 | 极客分享第 16 期

    什么是"极客分享每周精选" "极客分享"是一个书签分享的网站(hackershare.dev),"每周精选"是该网站汇总精选书签的一个栏目. ...

  7. 高老师架构设计思考短句集(2)

    高老师<架构&设计思考>短句集(2) << FEB 2014 >> 为什么要思考呢?  因为许多古典的架构思维视角,都已经不符合智能化&大数据时代的 ...

  8. 经验:一个秒杀系统的设计思考

    点击上方「蓝字」关注我们 前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见.简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的 ...

  9. API 快速开发平台设计思考

    作者 | 人月聊IT 来源 | toutiao.com/i6914469326074479108 在我之前谈API网关的时候曾经谈到过快速开发平台,即将API快速开发的一些内容放入到API网关中,实际 ...

  10. 一个秒杀系统的设计思考(整体思考,收藏了)

    作者:阿哲 来源:https://segmentfault.com/a/1190000020970562 前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀 ...

最新文章

  1. python3 str is not callable 问题解决
  2. python学习------文件处理
  3. PHP中 下列哪个操作符用来连接字符串,PHP试题带答案
  4. [教程]发一个iPhone收发邮件设置(163、126邮箱)
  5. 怎样使用orapwd新建口令文件
  6. ROS入门-16.tf坐标系广播与监听的编程实现
  7. 关于利用np.contour画出logistic模型决策边界(plot_decision_regions)的一点感想
  8. 王者-甄别同一板块强弱股的方法【真假美猴王】
  9. java 中间件介绍_java中间件有哪些?java常用中间件介绍
  10. 培训落差感,一切以不传授技能为主的培训都是耍流氓
  11. 降级至1.1.835教程
  12. 微信小程序 自定义picker封装成插件实现二级三级四级联动
  13. 【SSM】SSM框架介绍
  14. 神经网络——单层感知器
  15. 手把手教学,详细的外挂制作教程视频
  16. 如何实现AI视频车型识别算法
  17. 基础的数组/链表实现的队列
  18. 计算机语言晦涩难懂? 别怕 我来C
  19. 域名被微信拦截怎么才能恢复
  20. 计算机快捷键桌布,桌面改造 篇三:编程娱乐两不误 | 伪程序猿的Windows双屏组建/效率工具/桌面美化指南...

热门文章

  1. java.lang.IllegalArgumentException: An invalid character [10] was present in the Cookie value
  2. gis投影中未定义的地理转换_ArcGIS中5分钟搞懂坐标系相关知识
  3. 网站安全之存储型跨站脚本编制
  4. 一个简单的txt读取与导出
  5. 数据挖掘算法-矩阵分解在推荐系统中的应用
  6. c语言名著摘抄——语法及实例
  7. Django 国际化和本地化
  8. 【javascript】手写一个webpack plugin
  9. Java【第六篇】面向对象基础
  10. 面向对象--选课系统作业