采集数据的任务-数据的升级
在上一章中讲解了项目中责任链的数据的保存节点的执行过程,当执行后会在数据库保存统计到的指标数据,由于是最开始执行的任务,所以数据是最基本的维度,存在了d_report_video_data_video_stats表中,以其中一条数据为例,看一下表中数据结构:
| id | rule_id | stats_time | video_type_id | parent_video_type_id | watch_like_rate | watch_count | watch_dislike_count | watch_dislike_rate | watch_like_count | watch_complete_count | watch_complete_rate | video_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 45 | 1 | 20250826 | 4 | 1 | 0.08 | 76 | 0 | 0.0 | 6 | 26 | 0.34 | 7762202481762402600 |
从本章节开始会详细讲解责任链中采集节点的下一个节点:数据的升级节点执行逻辑
数据升级的节点
org.javaup.chain.impl.UpgradeDimensionDataChainHandler#handler
protected void handler(TotalParamTransfers totalParamTransfers) {
//执行维度升级
ParamTransfers newParamTransfers = doUpgradeDimension(totalParamTransfers);
//如果newParamTransfers为空,说明维度已经升级到最高了,不需要再发型消息了
if (Objects.isNull(newParamTransfers)) {
return;
}
totalParamTransfers.setParamTransfers(newParamTransfers);
MessageProducerRecord messageProducerRecord = messageProducerRecordService.insertMessageProducerRecord(totalParamTransfers);
UpDimensionDomain upDimensionDomain = upgradeDimensionHandler.upgradeDimension(messageProducerRecord.getId(),
messageProducerRecord.getMessageId(),totalParamTransfers);
if (Objects.nonNull(upDimensionDomain.getDockDataCenterFrameException())) {
throw upDimensionDomain.getDockDataCenterFrameException();
}
}
一. 维度升级入口逻辑 doUpgradeDimension
public ParamTransfers doUpgradeDimension(TotalParamTransfers totalParamTransfers){
//视频维度
VideoDimensionType videoDimensionType = totalParamTransfers.getParamTransfers().getVideoDimensionType();
//时间类型
DateType dateType = totalParamTransfers.getParamTransfers().getRequestTime().getDateType();
//如果视频维度是父级的视频分类,并且时间维度是年维度,那么就不需要再进行升级了
if (videoDimensionType == VideoDimensionType.PARENT_VIDEO_TYPE && dateType == DateType.YEAR) {
log.info("一次的所有维度采集完成, 规则id:{}, 采集日期:{}", totalParamTransfers.getParamTransfers().getRuleId(),
totalParamTransfers.getParamTransfers().getRequestTime().getGatherDate());
return null;
}
//维度的升级
ParamTransfers newParamTransfers = upgradeDimensionParam(totalParamTransfers.getParamTransfers());
if (Objects.isNull(newParamTransfers)) {
return null;
}
log.info("维度升级执行,升级前的时间维度:{}, 升级前的视频维度:{}, 升级后的时间维度:{}, 升级后的视频维度:{}",
dateType.getMsg(), videoDimensionType.getMsg(),
newParamTransfers.getRequestTime().getDateType().getMsg(),
newParamTransfers.getVideoDimensionType().getMsg());
return newParamTransfers;
}
1. 读取当前维度:拿到当前的视频维度 videoDimensionType 与时间维度 dateType。
//视频维度
VideoDimensionType videoDimensionType = totalParamTransfers.getParamTransfers().getVideoDimensionType();
//时间类型
DateType dateType = totalParamTransfers.getParamTransfers().getRequestTime().getDateType();
2. 终止条件一(全部完成):若已是“父级视频分类 + 年”这组最高维度,则记录日志并返回 null。
//如果视频维度是父级的视频分类,并且时间维度是年维度,那么就不需要再进行升级了
if (videoDimensionType == VideoDimensionType.PARENT_VIDEO_TYPE && dateType == DateType.YEAR) {
log.info("一次的所有维度采集完成, 规则id:{}, 采集日期:{}", totalParamTransfers.getParamTransfers().getRuleId(),
totalParamTransfers.getParamTransfers().getRequestTime().getGatherDate());
return null;
}
3. 继续升级:否则调用 upgradeDimensionParam(paramTransfers) 执行具体升级。
//维度的升级
ParamTransfers newParamTransfers = upgradeDimensionParam(totalParamTransfers.getParamTransfers());
付费内容提示
该文档的全部内容仅对「码力全开」项目实战&技术讲解 知识星球用户开放
加入星球,一次获得完整项目资料、全栈技术知识库和长期答疑服务。
100万+字全栈技术知识库深入讲解技术核心、数据库、中间件和分布式等内容
8套热门的实战项目持续更新的企业级项目覆盖高并发、微服务、数据中台 和 AI Agent 等方向
AI 技术知识大模型面试详解覆盖 AI 模型原理、Agent、RAG、MCP、Skills、Harness 等核心知识点
文档 + 视频两种讲解形式既能系统阅读,也能跟随视频理解核心业务
完整项目实战资料
每套项目均包含从 0 到 1 讲解文档核心业务讲解视频从基础项目到复杂业务场景,项目资料会持续更新。
- 01Nexus Agent AI 智能体
- 02Nexus Agent Pro 完全版
- 03黑马点评Plus
- 04大麦
- 05大麦Pro
- 06大麦AI
- 07流量切换
- 08数据中台
加入后还能获得
进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。从学习、面试到项目启动,都可以继续获得支持。
- 1 对 1 解答项目和技术问题都可以提问
- 针对性补充没有讲清楚的内容会继续补充
- 面试与简历指导梳理回答技巧和项目亮点
- 中间件云环境项目依赖可以直接接入使用
- 面试后复盘被问住的问题可以继续交流
- 远程问题解决项目启动问题可协助排查
