关于类微博的timeline的设计思考
公司要开发一个类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的设计思考相关推荐
- 微博评论点赞mysql设计_关于微博评论功能的设计与思考
前几天的上线功能bug,由于评论数量过多,未异步加载,导致数据丢失,原因是新老功能迁移时未做异步加载,就此功能找一下微博类评论等功能的架构设计思考,还有其他产品,社区,论坛,博客等. 微博曾流传可支撑 ...
- 高老师架构设计思考短句集(3)
高老师<架构&设计思考>短句集(3) << FEB 2014 >> 一般架构师用心于改善客户的系统架构和设计,而杰出架构师努力改变自己的思考视角和视野. 杰 ...
- 面试必备:一个秒杀系统的设计思考
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:阿哲 segmentfault.com/a/11900000 ...
- 用thinkphp进行微信开发的整体设计思考
用thinkphp进行微信开发的整体设计思考 http://www.2cto.com/weixin/201504/388423.html 2015-04-09 0个评论 作者:明 ...
- 一个秒杀系统的设计思考
简介:从架构视角来看,秒杀系统本质是一个高性能.高一致.高可用的三高系统.而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题. 秒杀大家都不陌生.自2011年首次出现以来,无论是双 ...
- 淘宝的商品中心和类目体系是怎么设计的 | 极客分享第 16 期
什么是"极客分享每周精选" "极客分享"是一个书签分享的网站(hackershare.dev),"每周精选"是该网站汇总精选书签的一个栏目. ...
- 高老师架构设计思考短句集(2)
高老师<架构&设计思考>短句集(2) << FEB 2014 >> 为什么要思考呢? 因为许多古典的架构思维视角,都已经不符合智能化&大数据时代的 ...
- 经验:一个秒杀系统的设计思考
点击上方「蓝字」关注我们 前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见.简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的 ...
- API 快速开发平台设计思考
作者 | 人月聊IT 来源 | toutiao.com/i6914469326074479108 在我之前谈API网关的时候曾经谈到过快速开发平台,即将API快速开发的一些内容放入到API网关中,实际 ...
- 一个秒杀系统的设计思考(整体思考,收藏了)
作者:阿哲 来源:https://segmentfault.com/a/1190000020970562 前言 秒杀大家都不陌生.自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀 ...
最新文章
- python3 str is not callable 问题解决
- python学习------文件处理
- PHP中 下列哪个操作符用来连接字符串,PHP试题带答案
- [教程]发一个iPhone收发邮件设置(163、126邮箱)
- 怎样使用orapwd新建口令文件
- ROS入门-16.tf坐标系广播与监听的编程实现
- 关于利用np.contour画出logistic模型决策边界(plot_decision_regions)的一点感想
- 王者-甄别同一板块强弱股的方法【真假美猴王】
- java 中间件介绍_java中间件有哪些?java常用中间件介绍
- 培训落差感,一切以不传授技能为主的培训都是耍流氓
- 降级至1.1.835教程
- 微信小程序 自定义picker封装成插件实现二级三级四级联动
- 【SSM】SSM框架介绍
- 神经网络——单层感知器
- 手把手教学,详细的外挂制作教程视频
- 如何实现AI视频车型识别算法
- 基础的数组/链表实现的队列
- 计算机语言晦涩难懂? 别怕 我来C
- 域名被微信拦截怎么才能恢复
- 计算机快捷键桌布,桌面改造 篇三:编程娱乐两不误 | 伪程序猿的Windows双屏组建/效率工具/桌面美化指南...
热门文章
- java.lang.IllegalArgumentException: An invalid character [10] was present in the Cookie value
- gis投影中未定义的地理转换_ArcGIS中5分钟搞懂坐标系相关知识
- 网站安全之存储型跨站脚本编制
- 一个简单的txt读取与导出
- 数据挖掘算法-矩阵分解在推荐系统中的应用
- c语言名著摘抄——语法及实例
- Django 国际化和本地化
- 【javascript】手写一个webpack plugin
- Java【第六篇】面向对象基础
- 面向对象--选课系统作业