功能需求

  • 发布动态:类似朋友圈的功能,支持图片、文字、视频。
  • 读取动态:支持推荐、最新、最热等栏目。
  • 删除动态:支持发布者删除,运营删除(包括硬删除和软删除)。
  • 审核动态:需要有正常、审核中、封禁中等。
  • 动态送礼、点赞:支持给某条动态送礼、点赞。并且需要给发布者发消息。并且需要有消息列表,可以删除和一键清空。
  • 动态运营:运营可以置顶、推荐某个动态,还可以以运营身份发布官方动态。

需求分析和初步设计

考虑到发布动态的人群是主播,所以量不会很大,表的设计不用分表。

动态页面的访问是很频繁的,所以在主页面如果有多张图则使用缩略图,否则使用原图,视频显示第一帧,剩下的交给CDN。

接口读取的时候根据需求拉取动态ID,然后将每条动态的元数据缓存,加快接口速度。

送礼和点赞,要考虑并发和效率,将发消息异步到队列慢慢处理。

发消息方面,提供一个接口,在客户端第一次进入动态页时请求,获取是否有最新消息,后面则由客户端监听消息,来绘制新消息UI。

数据库设计

具体细节就不赘述了,大致有以下几张表:


值得注意的几点:

  • 点赞数和礼物数记录在主表,不要sum流水表。(减慢写,加快读
  • 所有表添加is_delete,表示软删除,涉及违规的才采用真删除,方便运营还原。

代码设计

总体来说这个功能是比较简单的,只是一个上传加查询的过程。

需要注意的:

  • 将动态采用元数据缓存起来,一条动态一个,如果动态有修改直接更新该缓存,按照业务,一般设置3-7天过期就好了。
  • 首页排序提前用command命令计算好,不同的页面直接获取排好序的动态Id,然后点查缓存。主页可以不用缓存,只是全部拿缓存的过程。(整个返回值套缓存,第一是占redis内存,第二是拿全部出来再解析和直接点查效率差不多,第三是直接点查实时性更好。
  • 一旦后台有删除、封禁操作,将某个动态的缓存删掉就好了,当读不到缓存生成的时候判断is_delete即可。(不用直接执行command计算命令,第一是时间可能很长,第二是有些算法是根据时间来的,就是需要定期执行。
  • 如果点赞的量过大,可以考虑加消息队列,但是可能会存在ABA的问题。(点赞数忽上忽下

最后

整体的设计大致就是这样了,如果有问题欢迎评论或者私信我哦。我们下期再见。

项目实战:动态系统的设计(类似朋友圈)相关推荐

  1. Python爬虫编程思想(133):项目实战--利用Appium抓取微信朋友圈信息

    本文利用Appium实现一个抓取微信朋友圈信息的爬虫.在编写爬虫之前,先要启动Appium服务器. 编写基于Appium的爬虫,关键就是分析App每个界面相关元素的特征,也就是如何获取这些元素,然后在 ...

  2. Web项目实战 | 购物系统v2.0 | 开发记录(五)使用base64编码实现头像修改 | 用户个人信息修改 | JQuery动态提示

    文章目录 以往记录 一.运行环境 二.实现头像修改 三.用户个人信息修改 四.Bug & DeBug 以往记录 Web项目实战 | 购物系统v2.0 | 开发记录(一)需求分析 | 技术选型 ...

  3. Web项目实战 | 购物系统v2.0 | 开发记录(九)Controller层返回数据的封装 | 商品批量操作 | 五表联立实现商品搜索

    --若发现文章内容有误,敬请指正,望不吝赐教,感谢! 文章目录 以往记录 运行环境 一.设计Bean用于Controller层返回数据 二.商品批量操作 2.1 批量操作的前端设计 2.2 批量操作的 ...

  4. Python自动化开发基础 项目实战-监控系统 Day16-李杰-专题视频课程

    Python自动化开发基础 项目实战-监控系统 Day16-14487人已学习 课程介绍         课程特色:实战,细致,生动,深入浅出 适用人群:适合Python初学者 课程详情:从0基础开始 ...

  5. springboot毕设项目电信CRM系统的设计与实现3z7u5(java+VUE+Mybatis+Maven+Mysql)

    springboot毕设项目电信CRM系统的设计与实现3z7u5(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql ...

  6. 关于以太坊智能合约在项目实战过程中的设计及经验总结(1)

    此文已由作者苏州授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 1.智能合约的概述 近几年,区块链概念的大风吹遍了全球各地,有的人觉得这是一个大风口,有的人觉得他是个泡沫.众所 ...

  7. JAVAWEB项目--模拟考试系统数据库设计与实现(二)

    模拟考试项目需求参见博文<JAVAWEB项目–模拟考试系统需求(一)> 1.考试系统实体关系图 2.考试系统数据字典设计 3.考试系统创建数据库和表 -- 创建数据库testsystem ...

  8. 巴彦高勒煤矿选煤厂项目电力监控系统的设计与应用

    李婧婧 安科瑞电气股份有限公司,上海 嘉定 201801: 摘要:介绍巴彦高勒煤矿选煤厂项目电力监控系统,采用智能电力仪表.采集配电现场的各种电参量和开关信号.系统采用现场就地组网的方式,组网后通过现 ...

  9. java拍卖行项目,游戏拍卖行系统的设计与实现(JSP,SQLServer)

    游戏拍卖行系统的设计与实现(JSP,SQLServer)(任务书,外文翻译,进度计划表,实习调研报告,毕业论文15000字,程序代码,SQLServer数据库) 游戏拍卖行系统的建立采用的是结构化分析 ...

最新文章

  1. 转载:thread的六种状态
  2. 栈和队列的区别,栈和堆的区别
  3. Linux开机启动过程:从点下电源键到系统正常运行
  4. Codeforces 474 C. Captain Marmot
  5. 路由器和交换机的区别,太经典了
  6. 代码动态逍遥叹之狂学php
  7. leetcode string 类
  8. 美观实用的BeautifulReport测试报告
  9. lavas -pwa vs RN vs WEEX
  10. SEO整体优化有哪些操作步骤
  11. 最全面的Kano模型详解,及Kano模型为何是5种需求?
  12. android修改shell串口号,[Note] 2021-01-15 Android shell/串口中使用 wpa_cli 连接Wi-Fi
  13. librosa 语音库(二)STFT 的实现
  14. The requested URL was not found on this serve
  15. 从注册表中删除打印机列表中的打印机
  16. 网络安全笔记-Web架构
  17. 深度学习从入门到精通——图像分割之DeepLab系列算法
  18. FreeModbus
  19. mysql 发生系统错误1067的解决方法
  20. BIOS界面部分信息

热门文章

  1. 摄影师用AI预测MJ、李小龙活到现在长什么样,网友看后泪目
  2. MIUI——添加学校邮箱到电子邮件解决方案
  3. 寒假每日一题题解(1.29)摘花生(DP水题)
  4. pg_hint_plan 使用hint固定SQL执行计划
  5. jQuery仿天猫完美加入购物车
  6. (五十二)剑网三大风车伤害计算器
  7. Power BI中突出显示矩阵的最大值与最小值
  8. 用C#实现自定义列表_艾孜尔江撰
  9. ISO14229之概述
  10. 三十岁,真的是人生的分水岭吗