Loading [MathJax]/jax/output/CommonHTML/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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
硬件服务器,到底是安装Linux操作系统好?还是Windows操作系统好?
作为网络工程师,但凡你进过机房,肯定见过硬件服务器,现在可能很多工程师没有见过实质的硬件服务器,因为云服务器的兴起,好多人都没有机会见过“幕后”的硬件服务器,但是你要知道,不管是阿里云、腾讯云、华为云,还是国外的谷歌云、亚马逊云等等,所有的云服务器,以及政府、军工、大型企业自建的数据中心,其背后都是硬件服务器在支撑着。
网络技术联盟站
2023/10/06
3.1K0
硬件服务器,到底是安装Linux操作系统好?还是Windows操作系统好?
Linux面试题整理[通俗易懂]
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
全栈程序员站长
2022/08/23
9420
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
总体而言,Linux操作系统是一个强大、灵活且可定制的操作系统,广泛应用于服务器、嵌入式系统、超级计算机等各种领域。
SarPro
2024/02/20
2600
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
Linux 宝典《最新版》【玩转腾讯云】
什么是Linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
IT茂茂
2020/03/19
4.3K0
Linux 宝典《最新版》【玩转腾讯云】
面试必备(背)-Linux八股文系列!
Linux 是免费可自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。
微客鸟窝
2022/04/08
4K0
面试必备(背)-Linux八股文系列!
Linux面试题(2021最新版)
作为 Java 的从业者,在找工作的时候,一定会被问及关于Linux 相关的知识。Linux知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。在这里我们将详细的整理常见的Linux面试题目, 提供给大家学习参考。
Java程序猿
2021/04/19
7.4K0
Linux面试题Top100
回答: Linux是基于Linux内核的操作系统。它是一个开源操作系统,可以在不同的硬件平台上运行。它为用户提供了免费的低成本操作系统。这是一个用户友好的环境,他们可以在其中轻松修改和创建源代码的变体。
陈哈哈
2020/07/06
14.9K0
Linux面试题Top100
【操作系统】探究进程奥秘:显示进程列表的解密与实战
总体而言,Linux操作系统是一个强大、灵活且可定制的操作系统,广泛应用于服务器、嵌入式系统、超级计算机等各种领域。
SarPro
2024/02/20
2260
【操作系统】探究进程奥秘:显示进程列表的解密与实战
2020最新版Linux面试题(二)
一般来说,面试不会问 inode 。但是 inode 是一个重要概念,是理解 Unix/Linux 文件系统和硬盘储存的基础。
码农编程进阶笔记
2021/07/20
1.8K0
终于制服了它们
原本打算写一篇《计算机教育中缺失的一课》,涉及到 Shell。写着写着发现:什么是 Shell?什么是终端?什么是命令行?傻傻分不清了,竟然!于是,赶紧查阅了大把大把的资料学习了一下,最终,成功地制服了它们,太不容易了。
沉默王二
2021/01/12
5550
终于制服了它们
【Linux操作系统】探秘Linux奥秘:日志管理的解密与实战
总体而言,Linux操作系统是一个强大、灵活且可定制的操作系统,广泛应用于服务器、嵌入式系统、超级计算机等各种领域。
SarPro
2024/02/20
2690
【Linux操作系统】探秘Linux奥秘:日志管理的解密与实战
Linux知识点总结
Linux Linux系统概述 请简述Linux操作系统有什么优点? 提供了先进的网络支持:内置TCP/IP协议; 真正意义上的多任务、多用户作系统 与UNIX系统在源代码级兼容,符合IEEE POSIX标准 支持数十种文件系统格式 开放源代码,用户可以自己对系统进行改进 Linux系统的特点 与UNIX兼容 自由软件,源码公开 性能高,安全性强 便于定制和再开发 互操作性高 全面的多任务和真正的32位操作系统 在服务器市场及嵌入式系统领域应用广泛,是一种高性能、低开支的可以替换其他昂贵操作系统的系统。 L
用户1093975
2018/08/02
1.9K0
《Linux操作系统编程》第三章 Linux操作系统基础: 了解Linux操作系统的相关概念
​ 让学生了解Linux操作系统的相关概念:Linux操作系统的定义、Linux操作系统的组成、Linux操作系统的主要版本、Linux操作系统的运行模式、发展,以及Linux操作系统的主要版本和运行模式。使学生具有上机操作Linux系统的能力。
猫头虎
2024/04/08
2510
《Linux操作系统编程》第三章 Linux操作系统基础: 了解Linux操作系统的相关概念
【Linux操作系统】探秘Linux奥秘:操作系统的入门与实战
总体而言,Linux操作系统是一个强大、灵活且可定制的操作系统,广泛应用于服务器、嵌入式系统、超级计算机等各种领域。
SarPro
2024/02/20
4460
【Linux操作系统】探秘Linux奥秘:操作系统的入门与实战
【Linux操作系统】探秘Linux奥秘:进程与任务管理的解密与实战
总体而言,Linux操作系统是一个强大、灵活且可定制的操作系统,广泛应用于服务器、嵌入式系统、超级计算机等各种领域。
SarPro
2024/02/20
2280
【Linux操作系统】探秘Linux奥秘:进程与任务管理的解密与实战
Linux面试题基础宝典==面试必备
另外,du 命令也可以做类似的事情,可以看看 《查找 Linux 系统中的占用磁盘空间最大的前 10 个文件或文件夹》 文章。
心跳包
2020/08/31
2.7K0
Linux面试题基础宝典==面试必备
【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战
总体而言,Linux操作系统是一个强大、灵活且可定制的操作系统,广泛应用于服务器、嵌入式系统、超级计算机等各种领域。
SarPro
2024/02/20
3810
【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战
linux常见面试题
Linux是一种基于UNIX的操作系统,最初是由Linus Torvalds引入的。它基于Linux内核,可以运行在由Intel,MIPS,HP,IBM,SPARC和Motorola制造的不同硬件平台上。Linux中另一个受欢迎的元素是它的吉祥物,一个名叫Tux的企鹅形象。
心跳包
2020/08/31
2.8K0
运维的基本概念:操作系统基础(Linux/Windows)
在信息技术(IT)领域,操作系统(Operating System, OS)是计算机系统的核心软件,负责管理硬件资源和提供基础服务。对于运维工程师来说,掌握操作系统的基础知识是确保系统稳定运行的关键。本文将详细介绍Linux和Windows操作系统的基础知识,帮助读者更好地理解和应用这些知识。
Echo_Wish
2024/09/13
3500
运维的基本概念:操作系统基础(Linux/Windows)
Linux 基本组件与性能优化与根目录
这些目录的存在和排列可能会因Linux发行版、操作系统版本或特定系统配置而有所不同。
久绊A
2024/03/01
3010
推荐阅读
相关推荐
硬件服务器,到底是安装Linux操作系统好?还是Windows操作系统好?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档