本文档详细描述了视频审核系统的数据库设计方案,包括表结构设计、字段说明、状态管理、索引设计以及落库逻辑等内容。
video_moderation_task - 视频审核任务表
CREATE TABLE `video_moderation_task` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`data_id` varchar(64) NOT NULL COMMENT '数据ID',
`video_url` varchar(512) NOT NULL COMMENT '视频URL',
`task_id` varchar(64) NOT NULL COMMENT '任务ID',
`status` varchar(20) NOT NULL DEFAULT 'SUBMITTED' COMMENT '任务状态 (SUBMITTED-已提交, PROCESSING-处理中, SUCCESS-成功, FAILED-失败)',
`risk_level` varchar(10) DEFAULT NULL COMMENT '风险级别 (none-无风险, low-低风险, medium-中风险, high-高风险)',
`result` text COMMENT '审核结果(JSON格式)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '重试次数',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_task_id` (`task_id`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='视频审核任务表';
| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint(20) | 否 | 无 | 主键ID,自增 |
| data_id | varchar(64) | 否 | 无 | 数据ID,用于标识审核的数据 |
| video_url | varchar(512) | 否 | 无 | 视频URL地址 |
| task_id | varchar(64) | 否 | 无 | 阿里云审核任务ID |
| status | varchar(20) | 否 | SUBMITTED | 任务状态 |
| risk_level | varchar(10) | 是 | NULL | 风险级别 |
| result | text | 是 | NULL | 审核结果,JSON格式存储 |
| create_time | datetime | 否 | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | 否 | CURRENT_TIMESTAMP | 更新时间 |
| retry_count | int(11) | 否 | 0 | 重试次数 |
系统中任务的状态流转如下:
状态流转图:
SUBMITTED -> PROCESSING -> SUCCESS
| |-> FAILED
|-> FAILED (提交失败)
为了提高查询效率,表中设计了以下索引:
id 字段,用于唯一标识每条记录task_id 字段,确保阿里云任务ID的唯一性status 字段,提高按状态查询任务的效率create_time 字段,提高按创建时间查询任务的效率当用户提交视频审核任务时,系统会执行以下落库操作:
data_id)task_idSUBMITTED通过XXL-JOB定时任务定期拉取审核结果:
SUBMITTED或PROCESSING的任务SUCCESS,并保存审核结果到result字段PROCESSINGFAILEDFAILED系统实现了重试机制来处理临时性错误:
retry_count字段加1FAILEDINSERT INTO `video_moderation_task` (`data_id`, `video_url`, `task_id`, `status`, `risk_level`, `result`)
VALUES
('video_1234567890', 'https://example.com/video.mp4', 'task_0987654321', 'SUCCESS', 'low', '{\"riskLevel\":\"low\",\"frameResult\":{}}');
alien-entity/src/main/java/shop/alien/entity/VideoModerationTask.javaalien-entity/src/main/java/shop/alien/entity/VideoModerationTaskMapper.javaalien-entity/src/main/resources/mapper/VideoModerationTaskMapper.xmlalien-util/src/main/java/shop/alien/util/common/safe/video/VideoModerationService.javaalien-job/src/main/java/shop/alien/job/jobhandler/VideoModerationJobHandler.javaresult字段存储的是JSON格式的审核结果,可根据需要进行解析video_url字段最大长度为512字符,应确保视频URL不超过此长度SUCCESS或FAILED的旧任务,避免数据量过大