Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >简易评论系统设计

简易评论系统设计

原创
作者头像
windealli
发布于 2024-06-04 02:34:51
发布于 2024-06-04 02:34:51
4820
举报
文章被收录于专栏:windealliwindealli

需求分析

评论系统是互联网社区网站的重要组成部分,对增强用户参与度、提高网站活跃度等方面都具有重要价值。

一个简易的评论系统(在线社区平台)通常包含以下功能

  1. 用户评论:用户可以对某个产品、主题进行评论,包括文字评论。
  2. 评论展示:所有用户的评论将会在产品或服务页面下方展示,其他用户可以查看。
    1. 评论的展示有多种组织方式,参考《评论系统的几种展示结构和存储设计》,本文主要针对常见的二级嵌套评论的组织形式。
  3. 评论回复:用户可以对其他用户的评论进行回复,形成互动。
  4. 评论审核:为了防止恶意评论或者垃圾信息,系统需要有审核机制,对用户的评论进行审核。
  5. 评论排序:用户可以根据时间、评分等因素对评论进行排序。

设计概要

实体分析

基于前面的需求分析,一个简易的评论系统,一般会包含三个实体:

  • User: 自然人,发表主题和评论的人
  • Subject: 主题,用户发表的主题,被评论的对象
  • Comment: 评论或回复,评论和回复需要归属于某个Subject。评论系统中最核心的实体。

模块设计

简易评论系统设计

  • Comment-BFF: BFF层,用于接收和处理来自C端用户的请求(包括读、写评论),并返回结果。 如果是写操作,会通过MQ来进行削峰填谷,由Comment-Service作为MQ消费者,进行真正的写动作。
  • Comment-Service: 评论数据的核心逻辑处理服务,
    • 消费Kafka中用户的写入消息,写入MySQL,并缓存到Redis中,方便用户的快速读取。
    • 当Cache Miss时,处理用户的读请求,从MySQL中读取数据,更新缓存,并返回给用户。
  • Comment-Admin: 评论的管理服务,(置顶、删除、检索等)。

存储设计

仅列出与评论相关的关键字段

用户表t_user

字段名

数据类型

描述

user_id

BIGINT

用户ID,主键

username

VARCHAR

用户名

password

VARCHAR

用户密码

email

VARCHAR

用户邮箱

created_time

DATETIME

创建时间

updated_time

DATETIME

更新时间

deleted_time

DATETIME

删除时间

帖子表t_post

字段名

数据类型

描述

post_id

BIGINT

帖子ID,主键

user_id

BIGINT

发帖用户ID,外键,引用User表的user_id

title

VARCHAR

帖子标题

content

TEXT

帖子内容

post_time

DATETIME

发帖时间

comment_count

INT

评论总数

root_comment_count

INT

根评论总数

status

ENUM

帖子状态,如'NORMAL','PINNED'(置顶),'HIDDEN'(隐藏),'FILTERED'(过滤)等

created_time

DATETIME

创建时间

updated_time

DATETIME

更新时间

deleted_time

DATETIME

删除时间

  • comment_countroot_comment_count 用于记录评论总数和根评论总数,避免每次都需要count(*)

评论表t_comment

字段名

数据类型

描述

comment_id

BIGINT

评论ID,主键

user_id

BIGINT

评论用户ID,外键,引用User表的user_id

post_id

BIGINT

所评论的帖子ID,外键,引用Post表的post_id

parent_comment_id

BIGINT

父评论ID,如果是一级评论,此字段为NULL

reply_to_comment_id

BIGINT

被回复的评论ID,如果是一级评论,此字段为NULL

reply_to_user_id

BIGINT

被回复的用户ID,如果是一级评论,此字段为NULL

content

TEXT

评论内容

comment_time

DATETIME

评论时间

status

ENUM

评论状态,如'NORMAL','HIDDEN'(隐藏),'FILTERED'(过滤)等

created_time

DATETIME

创建时间

updated_time

DATETIME

更新时间

deleted_time

DATETIME

删除时间

  • reply_to_comment_idreply_to_user_id 只有当当前评论是对二级评论的回复是时为非NULL,因为我们的评论系统是二级嵌套结构,因此被回复的评论和当前评论在组织形式上是同级的,而非父子结构。

性能设计

缓存设计

  1. 热门数据缓存:对于访问频率高的数据,如热门帖子的评论,可以将其缓存到内存中,如使用Redis等内存数据库。当用户请求这些数据时,可以直接从缓存中获取,而不需要查询数据库。
  2. 分页缓存:对于评论列表的分页查询,可以将每页的数据缓存到内存中。当用户请求某一页的数据时,可以直接从缓存中获取,而不需要查询数据库。
  3. 延迟写入:对于写操作,如用户发表评论,可以先将数据写入缓存,然后异步地将数据写入数据库。这样可以提高写操作的响应速度。
  4. 缓存预热:在系统启动或者在低峰期,可以预先将可能被访问的数据加载到缓存中,这样在高峰期可以直接从缓存中获取数据。

分库分表

当单表存储的数据量级过大时,会影响查询性能,可以进行一定的分表。

评论通常不会脱离帖子本身存在,因此评论表可以根据post_id哈希值将数据分布到多个表中。

读写分离

将读操作和写操作分发到不同的数据库服务器上。例如,可以设置一台数据库服务器专门处理写操作,其他服务器处理读操作。这样可以提高系统的并发处理能力。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
简易评论系统设计
评论系统是互联网社区网站的重要组成部分,对增强用户参与度、提高网站活跃度等方面都具有重要价值。
windealli
2024/06/13
3080
简易评论系统设计
评论系统的几种展示结构和存储设计
评论系统是互联网社区网站的重要组成部分,对增强用户参与度、提高网站活跃度等方面都具有重要价值。评论系统的基本功能主要包括:用户发表评论、读取评论、回复评论等(现代评论系统可能还包括排序、过滤、搜索等功能)。
windealli
2024/05/29
1.5K0
评论系统的几种展示结构和存储设计
feeds流系统设计概述
什么是 Feeds 流? 从用户层面来说, 各种手机 APP 里面, 特别是社交类的, 我们可以看到关注的内容、好友的动态聚合成一个列表(最典型的就是微信朋友圈)都是 feeds 流的一种形式。
leobhao
2024/06/18
8840
feeds流系统设计概述
微博评论功能系统设计
微博评论功能是一种非常常见的社交媒体功能,它允许用户对微博进行评论和互动。在设计微博评论功能时,需要考虑用户体验、安全性、性能和可扩展性等方面。本文将详细介绍如何设计微博评论功能。
疯狂的KK
2023/03/22
1.5K0
这个评论系统设计碉堡了
geeksforgeeks.org官网给出了Facebook评论系统的高级设计图,Facebook的评论竟然是支持实时刷新的。也就是说用户不用刷新帖子,只要帖子有新的评论就会自动推送到用户端,这里Facebook使用的便是每天在全球有超过20亿设备在使用的WebSocket技术。
JavaSouth南哥
2024/09/24
2381
这个评论系统设计碉堡了
消息通知系统设计文档
一、功能概述 1.不同的系统的消息,管理后台、小程序(B/C)、微信公众号、短信、邮件等 2.不同业务的消息,充值、提现到账、系统更新、公告等 3.消息明细,标题、简述、详情、已读未读状态 4.有效时间,失效时间 5.支持界面的接下来操作,跳转按钮 6.语音消息?图片消息?富文本消息? 二、设计方案 需要考虑三类应用场景 1.私有信息,需要告知多个服务平台,需要用到MQ进行解藕 2.私有信息,不需要告知多个服务平台,直接调用 3.公开信息,一份信息广播给大部分/所有用户时,比如网站公告、banner、活动、
黄小怪
2020/02/29
7.6K1
消息通知系统设计文档
利用AIGC快速搞定MySql 设计
3.1 MySQL命令生成,建数仓、做报表、写分析 选中合适的AI工具,这里选择的是讯飞星火:
张哥编程
2024/12/07
830
利用AIGC快速搞定MySql 设计
遵循这些MySQL设计规范,再也没被组长喷过
会议室里,小猫挠着头,心里暗暗叫苦着“哎,这代码都撸完了呀,改起来成本也太大了。”
程序员老猫
2024/04/15
1430
遵循这些MySQL设计规范,再也没被组长喷过
Feed流系统设计
差不多十年前,随着功能机的淘汰和智能机的普及,互联网开始进入移动互联网时代,最具代表性的产品就是微博、微信,以及后来的今日头条、快手等。这些移动化联网时代的新产品在过去几年间借着智能手机的风高速成长。
架构师修炼
2020/11/19
1.4K0
Feed流系统设计
MySQL表设计踩过的坑!
前言 有朋友在后台留言。希望我能说说我在数据库表设计时踩过的坑。那么,我们今天就来聊聊我在数据库表设计时踩过的坑,以及现在对数据库表设计的一点建议。希望能够帮助到你。 utf8的锅 经验提示: 在设计数据表时,一定要注意该字段存储的内容,如果允许设置表情,则一定不能使用utf8,而是使用utf8mb4。 选择合适的类型 在数据库表设计时,字段的类型还真不好设计,这里简单说说: 保存手机号的字段,用varchar(20)就已经足够了,就不应该设计为varchar(100),设置为varchar(100)只会消
企鹅号小编
2018/02/07
1.1K0
以 B 站为例,聊聊站内消息系统的设计
使用过简书,知乎或 b 站的小伙伴应该都有这样的使用体验:当有其他用户关注我们或者私信我们的行为时,我们会收到相关的消息。 虽然这些功能看上去简单,但其背后的设计是非常复杂的,几乎是一个完成的系统,可以称之为 站内消息系统。
Guide哥
2020/08/24
9.6K2
以 B 站为例,聊聊站内消息系统的设计
千万级的大表,如何做性能优化?
很多小伙伴的数据库在刚开始的时候表现良好,查询也很流畅,但一旦表中的数据量上了千万级,性能问题就开始浮现:查询慢、写入卡、分页拖沓、甚至偶尔直接宕机。
苏三说技术
2025/03/31
2050
千万级的大表,如何做性能优化?
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
评论功能看似简单,实则涉及复杂的业务逻辑和技术考量。一个完整的评论系统需要支持:内容评论、回复评论、评论点赞、评论排序、敏感词过滤等功能。
卓伊凡
2025/05/30
730
【Django | 爬虫 】收集某吧评论集成舆情监控(附源码)
写在前面: 最近有一个新需求,需要收集某吧和某博进行舆情监控和情感分析,本文记录了收集某吧信息的过程,只用与学习使用,禁止用于其他非法活动。
计算机魔术师
2023/01/03
1.3K0
【Django | 爬虫 】收集某吧评论集成舆情监控(附源码)
EasyPytest测试平台开发日志之系统设计
EP平台的定位是Pytest测试用例管理平台,80%的自动化用例开发在PyCharm等专业的IDE中进行,20%的用例调度和结果查看就交给EP平台来管理。
dongfanger
2022/12/18
6870
EasyPytest测试平台开发日志之系统设计
Go 进阶训练营 – 评论系统架构设计三:存储设计
事务更新 comment_subject,comment_index,comment_content 三张表,其中 content 属于非强制需要一致性考虑的。可以先写入 content,之后事务更新其他表。即便 content 先成功,后续失败仅仅存在一条 ghost 数据。这样做虽然性能没有提升多少,但是content表是有可能替代为KV数据库的。
Yuyy
2022/10/31
9640
Go 进阶训练营 – 评论系统架构设计三:存储设计
我们公司用了6年的通用的权限管理系统设计方案
集中式认证服务(英语:Central Authentication Service,缩写CAS)是一种针对万维网的单点登录协议。它的目的是允许一个用户访问多个应用程序,而只需提供一次凭证。
程序员白楠楠
2020/11/23
1.6K0
django之评论系统及多级评论
相对来说,评论其实是另外一个比较独立的功能。Django 提倡,如果功能相对比较独立的话,最好是创建一个应用,把相应的功能代码写到这个应用里。我们的第一个应用叫 blog,它里面放了展示博客文章列表和细节等相关功能的代码。而这里我们再创建一个应用,名为 comments,这里面将存放和评论功能相关的代码。首先激活虚拟环境,然后输入如下命令创建一个新的应用:
菲宇
2019/06/13
7.2K1
django之评论系统及多级评论
缓存的不当使用
最近一朋友做社区重构,社区主要功能有发帖、回帖、查看帖子详情,详情页按不同条件展示回帖(除了预先定义的顺序外,可能每个用户看到的顺序都不一样,组合超过100个),大概的效果如下:
心平气和
2020/09/11
7340
缓存的不当使用
【自然框架】元数据的数据库结构的详细说明和示例(二):数据库描述部分
1、Manage_Table(表、视图、存储过程、函数的信息) 字段名 中文名 类型 大小 默认值 说明 TableName 表名 nvarchar 60 _ 表名 PKColumnID 主键字段的编号 int 4 1 主键字段的编号 TypeID 类型 char 2 _ 类型 HaveTableIDs 包含的表 nvarchar 500 _ 视图、存储过程等包含哪些表 Content 表说明 nvarchar 50 _ 表说明 ExcelTableName 工作表名称 nvarchar
用户1174620
2018/02/26
7010
【自然框架】元数据的数据库结构的详细说明和示例(二):数据库描述部分
相关推荐
简易评论系统设计
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档