CMS—评论功能设计

news2024/9/22 17:38:30

一、需求分析 

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.coloradmin.cn/o/1316136.html

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

相关文章

图片的批量建码怎么做?一图一码的制作方法

在使用图片展示内容时,经常会有同一类型的图片信息是有区别的,如果需要将每张图片批量生成二维码图片,那么出了一张一张去制作之外,有没有能够一键批量建码的功能可以解决这个问题呢?下面来给大家分享一下图片批量建码…

社交网络分析2(下):社交网络情感分析的方法、挑战与前沿技术

社交网络分析2(下):社交网络情感分析的方法、挑战与前沿技术 写在最前面7. 词嵌入(word embedding)的主要目的是什么?结合某方法简要地说明如何实现词嵌入。主要目的实现方法示例:GloVe案例分析…

透明PP专用UV胶水粘接PP材料高效率的提升生产效率

使用透明PP专用UV胶水粘接PP材料是提高生产效率的方法。以下方法,可以助您在生产中实现高效的PP材料粘接: ​1.选用合适的透明PP专用UV胶水 选择经过专门设计用于透明PP的UV胶水。这种胶水具有透明性,能保证粘接后的清晰度和外观。 2.自动…

Qt中槽函数在那个线程执行的探索和思考

信号和槽是Qt的核心机制之一,通过该机制大大简化了开发者的开发难度。信号和槽属于观察者模式(本质上是回调函数的应用)。是函数就需要考虑其是在那个线程中执行,本文讨论的就是槽函数在那个线程中执行的问题。 目录 1. connect…

关于负载和驱动能力的问题总结

这两天重新接触到了驱动能力这个说法,之前也听过,但是一直不理解是怎么回事儿,也就没有深究,现在想来,这里面还是有点门道的。 驱动能力,说的是什么呢?应该就是带载能力,而带载能力&…

热烈庆祝安徽普朗膜技术有限公司参加2024济南生物发酵展

公司自2004年注册成立以来主要业务领域主要有以乳酸、氨基酸、抗生素为主的发酵液的提取分离;醋、酱油发酵产品的产品升级,果汁、茶饮料等天然产物提取的除菌和澄清过滤;低聚木糖、低聚果糖、果葡糖浆、高果糖浆等过滤、纯化、浓缩&#xff1…

RRC下的NAS层

无线资源控制(Radio Resource Control,RRC),又称为无线资源管理(RRM)或者无线资源分配(RRA),是指通过一定的策略和手段进行无线资源管理、控制和调度,在满足服…

D34|不同路径

62.不同路径 初始思路: 1)确定dp数组以及下标的含义: dp[i][i]存放到第i1行和第i1列的方法数 2)确定递推公式: dp[i][i] dp[i -1][i] dp[i][i-1] 3)dp数组如何初始化 第0行是1; 第0列是1&a…

关于文件操作---C语言

引言 关于文件,想必大家或多或少都会有些了解,文件可以帮我们储存数据,不同格式的文件可以储存不同类型的数据,也可以将文件中的数据用不同的方式打开。电脑中的文件,是放在硬盘上的。在我们编写代码并运行的时候&…

KAKFA实践零碎记录

这里写目录标题 1 内存泄露2 生产者报错 1 内存泄露 错误信息 反复执行:创建消费者->关闭消费者后,内存缓慢上升且GC不能回收内存 错误原因 关闭消费者需要执行KafkaConsumer#close()函数 public void close() {this.close(Duration.ofMillis(30000…

12.12_黑马数据结构与算法笔记Java

目录 079 优先级队列 无序数组实现 080 优先级队列 有序数组实现 081 优先级队列 堆实现 1 082 优先级队列 堆实现 2 083 优先级队列 堆实现 3 084 优先级队列 e01 合并多个有序链表1 084 优先级队列 e01 合并多个有序链表2 085 阻塞队列 问题提出 086 阻塞队列 单锁实…

double DQN 跑 Pendulum-v1

gym-0.26.1 Pendulum-v1 环境详细信息 double DQN 实验环境 是为了体现 double DQN对高估的缓解, 因为 Pendulum-v1 reward最大是为0,可以有明显的对比。 相关论文 Deep Reinforcement Learning with Double Q-Learning 对动手深度强化学习里的代码做了一些修改。…

Java连接数据库实现用户登录和注册功能

目录 需求内容如下 示例代码 数据库studb Java代码 效果图 需求内容如下 1,创建数据库studb 2,库中添加用户表userinfo,包含如下字段 用户id ,用户名,用户密码,用户权限 (数据类型和约束自己定义&#xff09…

SpringBoot2—开发实用篇2

目录 数据层解决方案 SQL NoSQL SpringBoot整合Redis SpringBoot整合MongoDB SpringBoot整合ES 数据层解决方案 SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与MyBatisPlus框架,后面又学了Druid数据源的配置&am…

TrustGeo代码理解(一)main.py

代码链接:https://github.com/ICDM-UESTC/TrustGeo 一、导入各种模块和数据库 # -*- coding: utf-8 -*- import torch.nnfrom lib.utils import * import argparse, os import numpy as np import random from lib.model import * import copy from thop import profile imp…

文本聚类——文本相似度(聚类算法基本概念)

一、文本相似度 1. 度量指标: 两个文本对象之间的相似度两个文本集合之间的相似度文本对象与集合之间的相似度 2. 样本间的相似度 基于距离的度量: 欧氏距离 曼哈顿距离 切比雪夫距离 闵可夫斯基距离 马氏距离 杰卡德距离 基于夹角余弦的度量 公式…

【从零开始学习JVM | 第七篇】深入了解 堆回收

前言: Java堆作为内存管理中最核心的一部分,承担着对象实例的存储和管理任务。堆内存的高效使用对于保障程序的性能和稳定性至关重要。因此,深入理解Java堆回收的原理、机制和优化策略,对于Java开发人员具有重要的意义。 本文旨在…

竞赛保研 python图像检索系统设计与实现

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python图像检索系统设计与实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖&#xff0c…

Python基础04-数据容器

零、文章目录 Python基础04-数据容器 1、了解字符串 &#xff08;1&#xff09;字符串的定义 字符串是 Python 中最常用的数据类型。我们一般使用引号来创建字符串。创建字符串很简单&#xff0c;只要为变量分配一个值即可。<class ‘str’>即为字符串类型。一对引号…

计算机毕业设计 基于SpringBoot的二手物品交易管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…