当前位置: 首页 > article >正文

如何设计评论系统

一,需求

1,发布评论,支持回复楼层,楼中楼

2,评论读取排序,按照点赞数,时间排序

3,置顶评论,显示作者回复过,点赞过,@用户

4,系统敏感词评审

5,删除评论

6,管理平台,搜索,删除,评审等操作

二,分析及难点

量大,怎么存,存哪里,怎么做到高性能查询,及实现高效排序

不能用普通的表来存储,量大,查询效率不高

用redis ZSET,可实现排序

量的问题:这么多评论,可能几万条,甚至更多。导致zset存的量多大,怎么拆分。

怎么接受评论数据,可用mq进行削峰。

持久化,虽然要存redis,表里也需要存储的,可通过异步存储

从业务层级来说,主题对象是作者发布内容,其次是评论,评论也分第一次层级,回下面回复内容,及嵌套回复。

表结构设计

发布内容表:发布内容ID 发布内容 

评论表:评论ID 发布ID 层级标志( 0代表第一层评论)父层级ID 评论时间

redis zset存储,key 发布ID, number 评论人ID(第一层),sorce点赞数

评论内容呢,number只能用ID标识,需要另外存吗,String key = 发布ID+评论者ID,value=内容

评论回复呢,回复还有点赞数呢,还是用zset存储,key=发布者ID+评论人ID

number=当前回复人ID,sorce还是点赞数据,他的评论内容还是String存储

有层级结构:用hash存储呢,key field value,可以代替String 

key = 发布ID filed 论者ID value=内容,可以批量操作,批量取数据

高并发访问问题,热点评论问题

按理说,数据都放在redis,高并发访问问题不大,可以用多级缓存,和双检查锁

热点评论问题:还是导致,redis大key问题

mq消息积压问题,写入评论,立刻展示,后续逻辑比如落表,写缓存异步处理


http://www.kler.cn/a/577080.html

相关文章:

  • 使用Arduino和ESP8266进行基于物联网的垃圾箱监控
  • 【UI自动化技术思路分析】【总纲】UI自动化代码完整设计思路
  • STM32常见外设的驱动示例和代码解析
  • 计算机毕业设计SpringBoot+Vue.js码头船只货柜管理系统(源码+文档+PPT+讲解)
  • 【mysql】1273错误,Unknown collation: ‘utf8mb4_0900_ai_ci‘...
  • 你了解时间轮(Time Wheel)吗?有哪些应用场景?
  • LeetCode 解题思路 13(Hot 100)
  • 【后端开发面试题】每日 3 题(八)
  • ‌工业智能网关,七大领域驱动数智化升级
  • 使用 ResponseBodyEmitter 实现异步响应式数据流处理
  • Intent3D
  • 《实战AI智能体》Deepseek可以做什么?自然语言理解与分析
  • 计算机网络——交换机
  • golang坐标转换 gomap3d库
  • Flink之Barrier对齐会影响执行效率,怎么跳过Barrier对齐,跳过后还能保证‌Exactly-Once语义吗?
  • 阿里云服务器监控
  • UniApp 运行的微信小程序如何进行深度优化
  • MapReduce:分布式计算的基石
  • Django模型使用和前后端交互
  • 每天五分钟深度学习PyTorch:向更深的卷积神经网络挑战的ResNet