一、需求分析
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、结构设计
暂用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.2、数据量过大—处理
低价值数据,且不涉及修改,和金额处理,可采用MongoDB数据库。
1.内置了 MapReduce 引擎,数据分片,水平扩展性好,便于做集群。
2.通过 Journal日志(预写日志)、Oplog日志(操作记录)保证数据可靠。
3.支持主键索引、单字段索引、组合索引等,基本与Mysql一致。
4.查询功能与 SQL 相似。
5.支持字段扩展。
2.3、高并发—处理
CREATE TABLE `comment_likes` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`comment_id` bigint DEFAULT NULL COMMENT '评论ID',
`user_id` bigint DEFAULT NULL COMMENT '点赞人ID',
`status` tinyint DEFAULT '0' COMMENT '0点赞、1取消',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `agdkey` (`comment_id`,`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='评论点赞记录表';