评论系统中评论盖楼设计和性能优化方案
在主流的视频网站和社交网站中评论是非常重要的模块之一因为评论模块不仅为用户提供真实、可靠的决策参考信息而且也为商家或平台提供宝贵的用户参与数据同时增强用户互动与社区粘性。所以一套功能完善、高性能和高可用性的评论系统对于用户量很大的网站来讲是非常重要的。那么在评论系统中的用户对于其他的用户的某条评论在继续无限制的追加评论该如何设计呢下面我们聊聊其设计方案。1、评论盖楼数据存储设计方案——添加parentId关联在设计评论表的时候在表中添加字段parentId字段这个字段用于标识父级评论如下图所示的评论表和表中存储的数据如上图所示id1的评论parentId0那么标识id1的评论是父级评论然后id2的评论是id1评论子评论此时这个子评论的parentId设计成等于1这样就将父级评论和子级评论关联起来了。如果现在要查询一个评论下面的所有回复的子评论此时查询的步骤是先查询父级下的子级评论然后查询子级评论下的子级评论如下图所示如果id1的评论楼盖了1000层那么在规范的查询要求下我们就要向数据库发1000次SQL查询请求一旦系统的并发上来后数据库连接池瞬间就会被这种递归查询占满进而导致整个系统的崩溃。2、评论盖楼数据存储设计方案——存储路径方案既然使用parantId存储评论盖楼数据存在查询的问题那么我们是换个思路将评论盖楼使用一个字段标识出来如图所示在表中path字段记录了当前的评论的父级评论是来自哪个评论如id3的评论它的父级评论是id2的评论id2的评论的父级评论是id1的评论这样的设计不仅层级清晰而且查询也方便如果要查询id1的评论下所有的子级评论一条sql就可以完成查询如下所示虽然存储评论路径的方案方便查询但是也存在一个比较致命的缺点如果用于一旦删除了id2的评论那么id2的评论下的子级评论都要重新维护如下图所示如果是一个热门的帖子或者视频那么在评论的数据量非常大的情况下如果将含字段path中含有id2的评论数据全部找出来并且更新掉这就出现了严重写放大问题。3、评论盖楼数据存储设计方案——冗余rootId的方案反范式设计方式增加一个字段rootId顶级楼层id这也是现在主流网站中比较通用的一种设计方案如下图所示一个父级的评论然后父级评论下继续有子级评论两个用户分别就某个子级评论做了回复我们使用两行分别展示评论的数据针对这种扁平化的评论盖楼系统的数据存储表的设计如下图所示id1是父级评论它的rootId 0id2是子级评论它回复了id1的评论此时rootId 1用replyId1表示它回复的是id1的评论id3是子级评论它回复了id2的评论此时rootId1表示它的顶级评论是id1的评论用replyId2表示它回复的是id1的评论id4是子级评论它回复了id2的评论此时rootId1表示它的顶级评论是id1的评论用replyId2表示它回复的是id1的评论如果现在要查询id1的评论下的所有子级评论那么查询方式如下图所示通过rootId查询评论数据只需要一条sql直接就可以完成数据的查询这样得到一个扁平的列表然后在内存里使用代码里把数据组装好给客户端展示。4、按热度排序的性能问题解决方案如果现在要把热度最高的评论查询出来对于数量大的情况下是不能在使用sql的order by方式获取数据因为在大数据量下实时排序数据库将会是性能的瓶颈此时我们需要借助Redis的Zset数据类型来解决这个问题如下图所示通过Redis缓存top100热评论数据然后客户端查询热门评论的数据直接从Redis中读取不仅速度快、用户体验好而且也保护了系统不被拖垮。5、用户点赞的高并发问题解决方案热点稿件视频或者文章可能会有百万人同时点赞如果用户的每次点赞都去实时更新数据库那么数据库就是最大的瓶颈可以采用先同步Redis在同步数据库的方案解决如下图所示当用户点赞稿件后客户端首先要将稿件上的点赞数1目的是提高用户的体验然后客户端发送点赞的请求到服务器上后端处理的逻辑是直接在Redis把稿件的点赞数1这个在Redis中处理是非常的快然后Redis定期如5秒同步一次数据到数据库中。对于用户点赞数据来讲即使Redis宕机而导致几秒数据的丢失其实也是没有关系的一方面用户无感知另一方面数据严格性没转账数据那么强。总结1针对评论盖楼的数据存储方式可以采用冗余rootId的方案实现2高并发的和大数量的评论系统中借助Redis来扛住数据查询和保护系统的稳定性。https://mp.weixin.qq.com/s/St3Fkz0usHq2GtYhLw2xJw

相关新闻

【开题答辩全过程】以 惠农特色农产品社区团购小程序为例,包含答辩的问题和答案

【开题答辩全过程】以 惠农特色农产品社区团购小程序为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…

2026/7/3 5:25:11 阅读更多 →
cursor启动设置

cursor启动设置

ssh 远程连接不上 1 最后经过排查是~/.ssh/config的配置有问题,配置中参考doubao导致引入错误的配置所致。 打开cursor后agent默认在最左侧 1 打开命令面板:Ctrl Shift P 输入 Toggle Primary Side Bar Position(切换主侧边栏位置&#xff…

2026/7/5 6:37:23 阅读更多 →
基于PLC的四层电梯控制系统

基于PLC的四层电梯控制系统

基于PLC的四层电梯控制系统设计 第一章 绪论 四层电梯是小型办公楼、商住楼、居民楼的核心垂直运输设备,传统继电器控制的电梯存在逻辑固化、故障排查难、运行效率低、安全防护不足等问题,难以满足现代建筑对电梯精准调度、安全可靠的使用需求。可编程逻…

2026/5/17 6:39:17 阅读更多 →

最新新闻

RDiscount与GitHub Flavored Markdown:完整兼容性指南

RDiscount与GitHub Flavored Markdown:完整兼容性指南

RDiscount与GitHub Flavored Markdown:完整兼容性指南 【免费下载链接】rdiscount Discount (For Ruby) Implementation of John Grubers Markdown 项目地址: https://gitcode.com/gh_mirrors/rd/rdiscount RDiscount是John Grubers Markdown在Ruby环境下的高…

2026/7/5 17:57:20 阅读更多 →
Instatic性能测试工具:选择与使用指南

Instatic性能测试工具:选择与使用指南

Instatic性能测试工具:选择与使用指南 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic Instatic作为一款现代化的自托管可视化CMS&#x…

2026/7/5 17:55:20 阅读更多 →
TPH-YOLOv5进阶技巧:如何实现实时无人机视频流目标检测

TPH-YOLOv5进阶技巧:如何实现实时无人机视频流目标检测

TPH-YOLOv5进阶技巧:如何实现实时无人机视频流目标检测 【免费下载链接】tph-yolov5 项目地址: https://gitcode.com/gh_mirrors/tp/tph-yolov5 TPH-YOLOv5是一款强大的目标检测工具,特别适用于无人机视频流的实时目标检测任务。本文将详细介绍如…

2026/7/5 17:55:20 阅读更多 →
StreamPETR可视化工具使用教程:3D检测结果的可视化分析

StreamPETR可视化工具使用教程:3D检测结果的可视化分析

StreamPETR可视化工具使用教程:3D检测结果的可视化分析 【免费下载链接】StreamPETR [ICCV 2023] StreamPETR: Exploring Object-Centric Temporal Modeling for Efficient Multi-View 3D Object Detection 项目地址: https://gitcode.com/gh_mirrors/st/StreamPE…

2026/7/5 17:53:19 阅读更多 →
基于74HC32与TM4C129的按键矩阵优化方案

基于74HC32与TM4C129的按键矩阵优化方案

1. 项目背景与核心需求在嵌入式系统开发中,按键管理是最基础却又最容易被忽视的环节。传统GPIO直接扫描方案虽然简单,但在需要管理多个功能且I/O资源紧张时(如TM4C129XNCZAD这类高端MCU往往需要处理更复杂的任务),如何…

2026/7/5 17:51:19 阅读更多 →
大三计算机视觉实验:nwpu-cram视频跟踪完整指南

大三计算机视觉实验:nwpu-cram视频跟踪完整指南

大三计算机视觉实验:nwpu-cram视频跟踪完整指南 【免费下载链接】nwpu-cram 西北工业大学/西工大/nwpu/npu软件学院复习(突击)资料!! 项目地址: https://gitcode.com/GitHub_Trending/nw/nwpu-cram nwpu-cram是西北工业大学软件学院的…

2026/7/5 17:51:19 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻