采集数据的任务-数据的升级
在上一章中讲解了项目中责任链的数据的保存节点的执行过程,当执行后会在数据库保存统计到的指标数据,由于是最开始执行的任务,所以数据是最基本的维度,存在了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());
付费内容提示
该文档的全部内容仅对「JavaUp项目实战&技术讲解」知识星球用户开放
加入星球后,你可以获得:
- 超级八股文:100万+字的全栈技术知识库,涵盖技术核心、数据库、中间件、分布式等深度剖析的讲解
- 讲解文档:黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的从0到1的550+详细文档
- 讲解视频:黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的核心业务详细讲解
- 1 对 1 解答:可以对我进行1对1的问题提问,而不仅仅只限于项目
- 针对性服务:有没理解的地方,文档或者视频还没有讲到可以提出,本人会补充
- 面试与简历指导:提供面试回答技巧,项目怎样写才能在简历中具有独特的亮点
- 中间件环境:对于项目中需要使用的中间件,可直接替换成我提供的云环境
- 面试后复盘:小伙伴去面试后,如果哪里被面试官问住了,可以再找我解答
- 远程的解决:如果在启动项目遇到问题,本人可以帮你远程解决
进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。
