推方式

推方式,是发生在用户触发行为(发布新的动态,关注某个人,点赞)的时候。在触发时,用户的自身行为会记录到对应的行为表中,其次用户的行为也会记录到自己的粉丝对应动态表中。

这里写图片描述

用户A发布新的帖子(动态),帖子记录到帖子表(主表)中。

发帖行为塞到队列(Redis List)中。触发异步操作,消费者会先读取用户的粉丝列表(uid分表),依次写入到用户的动态表(uid分表)中。

前端读取用户动态Feed,使用过滤条件,读取用户的动态表(关联查询帖子表)。

使用推方式,对需求变更是易适应的。为什么这么说呢?因为用户每一次的行为,我们都有存储相应的数据(数据模型)。即使变更,只需更改逻辑层代码。另外性能较好,后台数据已经准备好了,无需复杂的SQL查询。当然这样做,也存在很多弊端。1. 如果在用户A发完动态后,其粉丝B取消关注了A。在这个时间差内,内容已经推送给粉丝B了。2. 数据量存储成本较大,假如一个用户的粉丝数是100万,在发帖后会写入100万条数据。

拉方式

拉方式,是发生在粉丝拉取Feed时。粉丝拉取自己的动态,首先会检索自己的关注用户(uid分表)。得到关注的uid之后,再根据uid去查询关注用户发布的帖子。

这里写图片描述

拉的模式相对是比较简单易实现的,另外对用户关系变更(新增,删除用户)是敏感的。其次也不存在数据存储压力。但在查询的时候,对帖子表本身压力是很大的。尤其是用户本身关注的人很多的话,会有很严重的性能问题。

拉方式优化-伪实时拉取

用户在登录APP时,会发送用户活跃态到服务端。活跃信号塞到队列中,消费者依次读取活跃态uid,得到用户的关注者列表。得到关注者列表后,会去帖子表,查询关注人的发布的帖子。写到用户自己的Feed中。

这里写图片描述

这种方式和对拉方式而言,能有效避免接口性能问题,相当于通过定时任务提前把用户的动态Feed跑出来。和推方式比较,推是比较盲目的,这种方式只需针对活跃用户即可,能避免存储浪费。缺点在于实时性不好,用户登录APP后马上进入自己的Feed页,此时如果后台用户动态还没跑完,接口读取的就是历史数据了。当然这种方式不适合知乎,微博这种类型的APP的。

拉方式优化-分区拉取

分区拉取,是为了避免频繁查询单一帖子表所采用的一种优化手段。通过对帖子按照时间片分表,每次查询都能均摊到不同的表中,以此减轻主表的压力。

推方式优化-定时推

定时推,是以常驻进程的方式读取用户的发帖行为,再批量写入到粉丝的动态表中。这种方式和推方式差不多,只不过可以对多个发帖行为做聚合。

推方式优化-特定用户推

特定用户推,是推方式的一种优化方法。用户发送帖子时,只对活跃的粉丝用户写入。当然活跃用户的判定策略,是需要商定的。

综合

以上几种方案,都有自己的利弊和适用场景。选择最适合自己的就是最好的。最后,我们采用了伪实时拉取这种方式。因为我们的需求是对点赞用户的聚合展示,类似于下图知乎这种。

这里写图片描述

本身点赞行为会存储在两种类型的表(以帖子ID的点赞分表,以用户ID的点赞分表)中,如果单纯以拉方式话,会比较难处理的,而且有性能问题。其次,点赞这个行为的重要程度还不足以我们批量去存储的。

feed mysql表设计_微博系统动态feed数据库设计。相关推荐

  1. 商品分类 mysql表结构_商品多级分类,数据库设计

    试试我的答案,如果哪里不好,请指出来,我也是初学者. 我的办法很简单,就是再类别表加一个父类型编号,也就是所有的自连接,以商品类型为例,数据表如下: Create Table ProductType ...

  2. mysql逻辑设计_一文看懂数据库设计之逻辑设计,值得收藏

    概述 数据库逻辑设计是从事数据库应用设计.开发.运行维护等各方面工作的一个重要的基础性工作.根据不同业务和应用需求,确定并遵循数据库逻辑设计原则,例如按照第三范式开展逻辑设计,不仅能满足减少数据冗余. ...

  3. mysql 表上线_腾讯云上线数据库 MySQL 8.0 版

    原标题:腾讯云上线数据库 MySQL 8.0 版 北京商报讯(记者 魏蔚)7月8日,腾讯云正式发布数据库MySQL 8.0版,通过优化锁系统,事务系统等模块,进一步提升性能,使得QPS(每秒查询率)超 ...

  4. 支付退款流程设计_【系统架构】如何设计一个简单灵活的收银系统?看这里!(1)...

    在电商项目中,收银系统是一个不可或缺的功能,因为你不仅要通过它来进行收款.退款,而且也要通过它进行财务的对账.报税等.因此,如何设计一个简单灵活的收银系统,对于开发电商项目来说非常重要. 那如何设计一 ...

  5. mysql数据库需求分析工具_一份全面的“数据库设计需求分析”是怎样的?

    原标题:一份全面的"数据库设计需求分析"是怎样的? 本文笔者将与大家分析数据库外部设计需求.结构设计需求.运用设计需求以及安全保密设计需求. 数据库设计需求 1. 需求概述 建立完 ...

  6. java计算机毕业设计微博系统网站源代码+数据库+系统+lw文档

    java计算机毕业设计微博系统网站源代码+数据库+系统+lw文档 java计算机毕业设计微博系统网站源代码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软 ...

  7. figma设计_如何在Figma中构建设计入门套件(第1部分)

    figma设计 Figma教程 (Figma Tutorial) Do you like staring at a blank canvas every time you start a new pr ...

  8. Node.js+MySQL开发的B2C商城系统源码+数据库(微信小程序端+服务端),界面高仿网易严选商城

    下载地址:Node.js+MySQL开发的B2C商城系统源码+数据库(微信小程序端+服务端) NideShop商城(微信小程序端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易 ...

  9. 基于ThinkPHP6+MySQL实现的B2C商城系统,含数据库,支持多种营销活动,优惠劵、订单活动、团购、秒杀、会员特价、积分商品等功能

    A3Mall商城系统 完整代码下载地址:基于ThinkPHP6+MySQL实现的B2C商城系统,含数据库 项目介绍 A3Mall商城系统是基于ThinkPhp6.0+Vue开发的一套移动电商系统, 支 ...

最新文章

  1. 「欧拉定理」学习笔记(费马小定理)
  2. 笔记 | 深入理解深度学习语义分割
  3. 排查 Node.js 服务内存泄漏,没想到竟是它?
  4. Nature重大突破!将皮肤细胞直接转化成感光细胞让小鼠重见光明!
  5. 照片处理软件(iSee图片专家) 3.930 中文免费版
  6. mysql校对集_mysql之字符集与校对集
  7. 学习File API用于前端读取文件
  8. php项目通过不了压力测试,压力测试 – Apache ab测试和失败 – Apache或PHP配置问题?...
  9. c语言初始化字符串 函数 manment,[转载]3.09进程(C语言班最后一天的课程)
  10. C++设计模式之二 AbstractFactory模式
  11. 猜数游戏控制猜测次数c语言,C语言小游戏之猜数字,三子棋游戏
  12. 数据挖掘技术有哪几种
  13. 骑行GPS导航套件:多普达D600+夏新GPS-166+灵图天行者9配合,伴我骑行千里
  14. idea安装python 插件_IntelliJ IDEA安装运行python插件方法
  15. 综合能源系统及其应用
  16. 淘宝网的架构演化分析
  17. .NET Remoting 配置文件方式
  18. 王阳明的智慧:如何让职场从“举步维艰”到“平步青云”?
  19. windows默认共享的打开和关闭
  20. mysql 删除恢复_MySQL之delete 忘加where条件误删除恢复

热门文章

  1. 思考网站定位之意 做好网站营销推广
  2. java sleep异常_Java的Thread.sleep何时会引发InterruptedException?
  3. 中国制造业经济继续处于增长周期 未来还需观察
  4. makefile中wildcard notdir patsubst的简单介绍
  5. 米家激光投影仪与当贝X3激光投影仪买哪个?
  6. 模拟器和真机运行都是屏幕上下有黑色的条
  7. VMDq (Virtual Machine Device Queue) in OpenSolaris
  8. 微信小程序一键抠图(进阶),抠图完成之后自定义背景合成新图并下载到本地
  9. 常见的跑腿APP,都有哪些功能?
  10. X7-2计算节点关于网卡的一点变化