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.支持字段扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值