CMS—评论功能设计

一、需求分析 

1.1、常见行为

1.敏感词过滤
2.新增评论(作品下、评论下)
3.删除评论(作品作者、上级评论者、本级作者)
4.上级评论删除关联下级评论
5.逻辑状态变更(上线、下线、废弃...)
6.上逻辑状态变更关联下级评论
7.评论通知(作品作者、上级评论作者)
8.点赞通知
9.评论回复(下级品论者)
10.评论的已读未读
11.评论的媒体文件处理(包情包、图片)
12.评论赞、踩 
13.一级评论查询(分页、倒排)
14.上级评论关联下级评论(分页、倒排)
15.评论数量统计 
16.可见范围(自己、上级、粉丝)
17.操作范围(允许他人评、点、踩)
18.评论置顶(权重排序)
19.作者点赞显示 

1.2、数据特性

1.评论层级设计(两、三层)
2.数据量大如何存储、查询
3.赞、踩的高并发

二、使用案例 

2.1、评论功能设计 

2.1.1、表结构设计(暂用Mysql)

CREATE TABLE `cms_comments` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',`work_id` bigint DEFAULT NULL COMMENT '作品ID',`work_user_id` bigint DEFAULT NULL COMMENT '作品作者ID',`work_user_like` tinyint NOT NULL DEFAULT '1' COMMENT '作者点赞(1不赞,2点赞)',`comment_user_id` bigint DEFAULT NULL COMMENT '评论人ID',`comment_time` timestamp NULL DEFAULT NULL COMMENT '评论时间',`parent_id` bigint DEFAULT NULL COMMENT '上级ID(一级评论为作品ID)',`reply_user_id` bigint DEFAULT NULL COMMENT '被回复用户ID(三级时用)',`read_status` tinyint NOT NULL DEFAULT '1' COMMENT '阅读状态(1未阅读、2已阅读、3其它)',`level` tinyint NOT NULL DEFAULT '1' COMMENT '级别(1一级;2二级;3三级)',`state` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '01' COMMENT '评论状态(01草稿、02待审核、03未通过、04已上线、05已下线、06删除)',`comment_content` varchar(150) DEFAULT NULL COMMENT '评论内容',`top_status` tinyint NOT NULL DEFAULT '1' COMMENT '置顶状态(1不置顶,2置顶)',`like_number` bigint DEFAULT '0' COMMENT '点赞数',`remark_number` bigint DEFAULT '0' COMMENT '评论数',PRIMARY KEY (`id`),KEY `work_id` (`work_id`) USING BTREE,KEY `work_user_id` (`work_user_id`) USING BTREE,KEY `comment_time` (`comment_time`),KEY `reply_user_id` (`reply_user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='内容评论表—JunSouth';

2.1.2、接口设计 

0.评论信息的敏感词过滤、审核。

1.新增评论信息(作品信息、上级信息、用户信息、级别、评论内容);附带功能:通知作品作者、上级作者、增加评论数量。
2.通过作品信息查询一级评论(分页、倒排、上线状态)。
3.通过一级评论信息查询二、三级评论(分页、倒排、上线状态)。
4.通过用户信息查询一级评论。
5.通过用户信息查询二、三级评论。

6.通知一级评论作者、二级评论作者回复信息。
7.通过作品信息下架一级、二级、三级评论。

8.通过一级评论信息下架一级、二级、三级评论。
9.通过二级评论信息下架二级、三级评论。
10.通过用户信息下架用户评论。
11.通过ID数组维护评论逻辑状态(管理端)。
12.通过ID数组物理删除评论信息(管理端)。

13.一级评论点赞(批量一次处理)。
14.一级评论数量统计(批量一次处理)。
15.作者队点赞。
16.一级评论置顶。

2.2、点赞、评论数功能设计 

2.2.1、需求分析 

1.无评论点赞细节应用,只统计单条评论的点赞数量 、评论数量
2.查频率高、写高并发 
3.回显实时性要求高 
4.传输数据量小 
5.数据是单体小,整体范围大、量多 
6.数据有冷热之分 
7.数据价值低 

2.2.2、接口设计 

1.只记录评论赞的总数。
2.用户操作完后前端,调点赞接口,返回点赞结果。
3.后端通过评论ID为Key 操作Redis的Hyperloglog(基数),在此key的基础上+1,并返回结果,此Key的结果。
4.每隔1h,Redis的评论点赞数据同步到DB。

private final RedisTemplate redisTemplate;@PostMapping("/test001")
public R test001(@RequestBody Comment comment){String key = "commentId:"+comment.getId();Long userId = comment.getUserId();// 赛值redisTemplate.opsForHyperLogLog().add(key, userId);// 获取数量Long size = redisTemplate.opsForHyperLogLog().size(key);System.out.println("size(): "+size);return R.ok("Success",size);
}

2.3、数据量过大—处理 

低价值数据,且不涉及修改,和金额处理,可采用MongoDB数据库。

1.内置了 MapReduce 引擎,数据分片,水平扩展性好,便于做集群。
2.通过 Journal日志(预写日志)、Oplog日志(操作记录)保证数据可靠。
3.支持主键索引、单字段索引、组合索引等,基本与Mysql一致。
4.查询功能与 SQL 相似。
5.支持字段扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UG NX二次开发(C++)-库缺少需要的入口点的原因与解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、“库缺少需要的入口点”错误展示3、可能出现的原因与解决方案3.1 对于采用CTRL+U方式调用3.2 对于menu菜单下调用1、前言 在UG NX二次开发过程中,有时会遇到形形色色的bug,比如有个读…

form中的input设置成readonly, 与设置成disable有何区别?

在HTML中, 元素是用于在表单中接收用户输入的元素。readonly 和 disabled 都是用来限制用户对输入字段的交互,但它们之间有一些区别: Readonly (readonly): 当将一个输入字段设置为 readonly 时,用户可以看到字段的内…

【深度学习】机器学习概述(二)优化算法之梯度下降法(批量BGD、随机SGD、小批量)

​ 文章目录 一、基本概念二、机器学习的三要素1. 模型a. 线性模型b. 非线性模型 2. 学习准则a. 损失函数b. 风险最小化准则 3. 优化机器学习问题转化成为一个最优化问题a. 参数与超参数b. 梯度下降法梯度下降法的迭代公式具体的参数更新公式学习率的选择 c. 随机梯度下降批量…

(第5天)进阶 RHEL 7 安装单机 Oracle 19C NON-CDB 数据库

进阶 RHEL 7 安装单机 Oracle 19C NON-CDB 数据库(第5天) 真快,实战第 5 天了,我们来讲讲 19C 的数据库安装吧!19C 是未来几年 Oracle 数据库的大趋势,同样的作为长期稳定版,11GR2 在 2020 年 10 月份官方就宣布停止 Support 了,19C 将成为新的长期稳定版,并持续支持…

JavaScript 数组常用的方法介绍 四

JavaScript 数组常用的方法介绍 四 push() 用于将一个或多个元素添加到数组的末尾,并返回修改后的数组的新长度。(注意: push() 方法会修改原始数组,而不是创建一个新的数组。) 语法: array.push(element1, element2, ..., elem…

转载: iOS 优雅的处理网络数据

转载: iOS 优雅的处理网络数据 原文链接:https://juejin.cn/post/6952682593372340237 相信大家平时在用 App 的时候, 往往有过这样的体验,那就是加载网络数据等待的时间过于漫长,滚动浏览时伴随着卡顿,甚至在没有网…

找不到mfc100u.dll,程序无法继续执行?三步即可搞定

在使用电脑过程中,我们经常会遇到一些错误提示,其中之一就是“找不到mfc100u.dll”。mfc100u.dll是Microsoft Foundation Class(MFC)库中的一个版本特定的DLL文件。MFC是微软公司为简化Windows应用程序开发而提供的一套C类库。它包…

JVM虚拟机系统性学习-JVM调优实战之内存溢出、高并发场景调优

调优实战-内存溢出的定位与分析 首先&#xff0c;对于以下代码如果造成内存溢出该如何进行定位呢&#xff1f;通过 jmap 与 MAT 工具进行定位分析 代码如下&#xff1a; public class TestJvmOutOfMemory {public static void main(String[] args) {List<Object> list…

C#学习笔记

static viod Main(string[] args) {Console.WriteLine(“Hello,word!”); Console.ReadKey(); //停留弹窗 } static 静态 void 无返回值 Main 函数 - 程序起点 2.2 命名空间及标识符、关键字 namespace 别名使用 取别名:using Co = System.Console; 使用:Co.WriteLine(“H…

Python | 高斯分布拟合示例

什么是正态分布或高斯分布&#xff1f; 当我们绘制一个数据集&#xff08;如直方图&#xff09;时&#xff0c;图表的形状就是我们所说的分布。最常见的连续值形状是钟形曲线&#xff0c;也称为高斯分布或正态分布。 它以德国数学家卡尔弗里德里希高斯的名字命名。遵循高斯分布…

git的介绍

Git 是一个分布式版本控制系统&#xff0c;用于跟踪代码的更改并协同开发。它具有以下基本概念和使用方式&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git 仓库是存储代码的地方。它可以是本地仓库&#xff08;位于开发者的计算机上&#xff09;或远程仓库…

Positive Technologies 专家总结了调查结果,并指出了 2023 年信息安全威胁发展的主要趋势

Positive Technologies 专家总结了调查结果&#xff0c;并指出了 2023 年信息安全威胁发展的主要趋势 &#x1f977; 间谍软件最流行 在攻击俄罗斯组织时使用的所有恶意软件中&#xff0c;间谍软件所占比例接近一半&#xff08;45%&#xff09;&#xff0c;加密软件仅占 27%。…

Vue学习笔记-Vue3中的provide与inject

作用 provide和inject用于实现祖孙间的数据通信 用法 导入&#xff1a;import {provide,inject} from vue 使用&#xff1a; provide&#xff1a;祖组件使用该方法提供数据&#xff08;可以给任意后代组件&#xff0c;但一般用于孙组件及其后代组件&#xff0c;因为父子间的…

算法通关村第十二关—字符串转换(青铜)

一、转换成小写字母 LeetCode709.给你一个字符串s&#xff0c;将该字符串中的大写字母转换成相同的小写字母&#xff0c;返回新的字符串。 示例1&#xff1a; 输入&#xff1a;s"Hello" 输出&#xff1a;"hello" 示例2&#xff1a; 输入&#xff1a;s&qu…

C语言——输出魔方阵

目录 一、前言&#xff1a; 二、算法设计&#xff1a; 三、代码实现&#xff1a; 五、效果展示&#xff1a; 一、前言&#xff1a; 魔方矩阵又称幻方&#xff0c;是有相同的行数和列数&#xff0c;并在每行每列、对角线上的和都相等的矩阵。魔方矩阵中的每个元素不能相同。你…

算法通关村第十九关 | 青铜 | 动态规划

1.统计路径总数&#xff08;递归&#xff09; 原题&#xff1a;力扣62. 每次移动都是将问题规模缩小。 要理解&#xff1a;return search(m - 1, n) search(m, n - 1); public class Solution {public int uniquePaths (int m, int n) {return search(m, n);}public int s…

外包干了4个月,测试技术退步明显

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入杭州某软件公司&#xff0c;干了3年的功能测试&#xff0c;当然有半年是被封在了家里&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我…

牛客网BC107矩阵转置

答案&#xff1a; #include <stdio.h> int main() {int n0, m0,i0,j0,a0,b0;int arr1[10][10]{0},arr2[10][10]{0}; //第一个数组用来储存原矩阵&#xff0c;第二个数组用来储存转置矩阵scanf("%d%d",&n,&m); if((n>1&&n<10)&&am…

LRU算法(面试遇到两次)

原理&#xff1a; 最近最久未使用&#xff08;Least Recently Used LRU&#xff09;算法是⼀种缓存淘汰策略。如果新存入或者访问一个值&#xff0c;则将这个值放在队列开头。如果存储容量超过上限cap&#xff0c;那么删除队尾元素&#xff0c;再存入新的值。新插入的元素…

【学习】卡尔曼滤波

【精 | 有代码】卡尔曼滤波器的直观介绍和手写代码&#xff01; 卡尔曼滤波器的直观介绍&#xff08;第 1 部分&#xff09;: https://www.youtube.com/watch?v5Y-dnt2tNKY 【手写代码一步步展示&#xff01;精&#xff01;强推&#xff01;】Coding Kalman Filter in Pytho…