news 2026/4/30 23:54:21

案例:高性能评论系统架构设计(“评论盖楼”系统)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
案例:高性能评论系统架构设计(“评论盖楼”系统)

背景

评论系统,不属于电商系统的核心链路,但当评论数据较大时,也将为成为瓶颈。本文讨论评论系统的设计。

问题

评论系统的特点是:嵌套评论,当嵌套层级多的时候,性能会出现问题。所以,我们主要解决的是盖楼问题。

业界主流到盖楼模式有两种。

1、嵌套模式:一层套一层,无限循环嵌套。

2、盖楼模式:不论多少层,都在同一层级展示。

目前微信、抖音采用第二种方式,只保留两层,要么是楼主,要么是回复信息。

数据库:嵌套模式

1、邻接表

主键Id

父级Id

内容

1

0

种草

2

1

+1

3

1

+2

优点:写入速度快、查询效率低。每个记录只需要记录父级Id即可。存储结构简单,易于理解。

不足:递归查询性能差,需要N+1次;删除中间节点,维护成本高。

2、全路径

主键Id

路径

内容

1

1/

种草

2

1/2

+1

3

1/2/3

+2

优点:查询方便,使用like'1/2%',符合索引最左原则,性能高。存储了直观的层级关系。

不足:Path长度受字段类型和长度大小限制,层的修改维护较复杂。

3、闭包表

祖先Id

后代Id

深度

1

1

0

1

2

1

1

3

2

优点:查询性能高、支持层级快速移动。

不足:存储开销大(两张表,一张数据表、一张关系表),写入逻辑复杂。

通常,闭包表方案,是平衡i性能和可维护性的最佳方案。

数据库:盖楼模式

盖楼模式采用两层结构,避免了递归调用。只需存储一级评论和二级评论(所有回复)即可。

主键Id

一级评论Id

回复Id

内容

1

0

0

种草

2

1

1

+1

3

1

2

+2

查询所有一级评论,不需要遍历,直接where 一级评论id=Id即可。

如何写

写入时,异步入库,数据最终一致性。发MQ消息,MQ消费者,消费,入库。为保证页面的展示,前端JS缓存并写页面。

如何读?

上面解决了存储(写)的问题,如何读呢,面对百万千万用户,访问呢?如果直接查询数据库,系统会瞬间宕机。我们采用的方案是:针对热数据进行缓存,冷数据按需加载。

1、热点缓存:通常用户只看前几页评论,所以可以将热点数据,存储在redis中,使用zset数据结构。

2、按需加载:对于冷门数据,懒加载,当用户点击时再查数据库。分页采用游标翻页方式,记录上一页最后的位置,如:WHERE id < ? ORDER BY id DESC LIMIT ?,而不是offset方式翻页:LIMIT offset, size 。

全链路

上文主要描述了,评论系统的数据层设计,以及读写的内容。一个完整的设计是全链路的,所以还会涉及限流,降级,熔断,服务拆分等内容。

架构设计是一个系统工程,个人最新的打算是,尽量输出些内容,或许只是一部分或只是一个概括的点(读者可以根据这个点,搜索相关的内容,逐步组成线和面)。或许这些内容融入原有的设计中,就是一个完整的系统。

https://mp.weixin.qq.com/s/nbSh2bc0yOGQfI2puOie5g

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 7:36:40

改进A星算法:剔除冗余节点与光滑转折点

改进A星算法 剔除冗余节点&#xff0c;光滑转折点 对比优化前后路径。在路径规划领域&#xff0c;A星算法无疑是一颗耀眼的明星。然而&#xff0c;原始的A星算法生成的路径可能存在冗余节点&#xff0c;并且转折点不够光滑&#xff0c;影响了路径的实用性和美观性。今天咱们就来…

作者头像 李华
网站建设 2026/5/1 5:06:12

WSRP(Web Services for Remote Portlets)技术详解

前言 在现代企业信息系统架构中&#xff0c;统一门户&#xff08;Enterprise Portal&#xff09;作为用户访问各类业务系统的单一入口&#xff0c;承担着信息聚合、身份统一、用户体验一致等关键职责。然而&#xff0c;随着业务系统的不断扩展&#xff0c;如何高效、安全、可维…

作者头像 李华
网站建设 2026/5/1 5:01:12

SOLIDWORKS Simulation:“本地交互”的接触参数,都代表什么?

在使用 SOLIDWORKS Simulation 进行装配体或多实体零件受力分析时&#xff0c;关键的本地交互功能该如何设置&#xff1f; “连接” 功能中的“本地交互”是定义零件间接触关系的核心工具&#xff0c;其中“相触”设置最为常用&#xff0c;直接决定了力如何通过接触面进行传递…

作者头像 李华
网站建设 2026/4/22 22:43:57

技术架构自动化转换工具避坑实录:架构师分享10个血泪教训与解决方案

技术架构自动化转换工具避坑实录:架构师的10个血泪教训与实战解决方案 摘要/引言 问题陈述:在数字化转型浪潮中,企业架构升级已成为技术部门的核心任务。手动进行架构转换不仅耗时耗力(平均周期6-12个月,错误率高达35%),更难以应对快速变化的业务需求。架构自动化转换…

作者头像 李华
网站建设 2026/5/1 6:18:20

为什么律师花在汽车和衣服上的钱,比同等收入的大学教授更多?

律师在汽车和衣物上的支出高于同等收入的大学教授&#xff0c;核心是职业属性、形象价值、社交需求的差异&#xff0c;导致两类群体对 “外在形象” 的投入逻辑完全不同 —— 对律师而言&#xff0c;汽车和衣物是生产性投资&#xff1b;对教授而言&#xff0c;更多是消费性支出…

作者头像 李华
网站建设 2026/5/1 6:14:12

全球首个1米高精度特大城市开放空间数据集(Tif)

数据简介 本数据集提供全球169个特大城市的开放空间分类数据&#xff0c;涵盖公园绿地、运动空间、交通空间等五类城市开放空间&#xff0c;为城市宜居性和可持续发展研究提供精细空间数据。 数据详情 基本参数 数据引用 引用&#xff1a;Fan, R., Wang, L., Xu, Z. et al.…

作者头像 李华