feat(data-align): 添加删除日增量临时表功能

- 新增 DeleteTableMapper 接口及 XML 映射文件
- 实现删除多种日增量表的 SQL 语句- 创建 DeleteTableXxlJob 定时任务
- 支持按日期和分片批量删除临时表- 集成 XXL-JOB 执行日志记录
- 自动清理最近一个月的历史数据表
This commit is contained in:
2025-10-21 20:09:20 +08:00
parent a6f4d437d2
commit 5c4d8862a2
3 changed files with 159 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
package com.hanserwei.hannote.data.align.domain.mapper;
import org.apache.ibatis.annotations.Param;
/**
* 删除表
*/
public interface DeleteTableMapper {
/**
* 删除日增量表:关注数计数变更
*
* @param tableNameSuffix 表名后缀
*/
void deleteDataAlignFollowingCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
/**
* 删除日增量表:粉丝数计数变更
*
* @param tableNameSuffix 表名后缀
*/
void deleteDataAlignFansCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
/**
* 删除日增量表:笔记收藏数计数变更
*
* @param tableNameSuffix 表名后缀
*/
void deleteDataAlignNoteCollectCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
/**
* 删除日增量表:用户被收藏数计数变更
*
* @param tableNameSuffix 表名后缀
*/
void deleteDataAlignUserCollectCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
/**
* 删除日增量表:用户被点赞数计数变更
*
* @param tableNameSuffix 表名后缀
*/
void deleteDataAlignUserLikeCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
/**
* 删除日增量表:笔记点赞数计数变更
*
* @param tableNameSuffix 表名后缀
*/
void deleteDataAlignNoteLikeCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
/**
* 删除日增量表:笔记发布数计数变更
*
* @param tableNameSuffix 表名后缀
*/
void deleteDataAlignNotePublishCountTempTable(@Param("tableNameSuffix") String tableNameSuffix);
}

View File

@@ -0,0 +1,70 @@
package com.hanserwei.hannote.data.align.job;
import com.hanserwei.hannote.data.align.constant.TableConstants;
import com.hanserwei.hannote.data.align.domain.mapper.DeleteTableMapper;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* 删除最近一个月的日增量临时表
*/
@Component
public class DeleteTableXxlJob {
/**
* 表总分片数
*/
@Value("${table.shards}")
private int tableShards;
@Resource
private DeleteTableMapper deleteTableMapper;
/**
* 1、简单任务示例Bean模式
*/
@XxlJob("deleteTableJobHandler")
public void deleteTableJobHandler() {
XxlJobHelper.log("## 开始删除最近一个月的日增量临时表");
// 今日
LocalDate today = LocalDate.now();
// 日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDate startDate = today;
// 从昨天开始往前推一个月
LocalDate endDate = today.minusMonths(1);
// 循环最近一个月的日期,不包括今天
while (startDate.isAfter(endDate)) {
// 往前推一天
startDate = startDate.minusDays(1);
// 日期字符串
String date = startDate.format(formatter);
for (int hashKey = 0; hashKey < tableShards; hashKey++) {
// 表名后缀
String tableNameSuffix = TableConstants.buildTableNameSuffix(date, hashKey);
XxlJobHelper.log("删除表后缀: {}", tableNameSuffix);
// 删除表
deleteTableMapper.deleteDataAlignFollowingCountTempTable(tableNameSuffix);
deleteTableMapper.deleteDataAlignFansCountTempTable(tableNameSuffix);
deleteTableMapper.deleteDataAlignNoteCollectCountTempTable(tableNameSuffix);
deleteTableMapper.deleteDataAlignUserCollectCountTempTable(tableNameSuffix);
deleteTableMapper.deleteDataAlignUserLikeCountTempTable(tableNameSuffix);
deleteTableMapper.deleteDataAlignNoteLikeCountTempTable(tableNameSuffix);
deleteTableMapper.deleteDataAlignNotePublishCountTempTable(tableNameSuffix);
}
}
XxlJobHelper.log("## 结束删除最近一个月的日增量临时表");
}
}

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hanserwei.hannote.data.align.domain.mapper.DeleteTableMapper">
<delete id="deleteDataAlignFollowingCountTempTable" parameterType="map">
DROP TABLE IF EXISTS `t_data_align_following_count_temp_${tableNameSuffix}`;
</delete>
<delete id="deleteDataAlignFansCountTempTable" parameterType="map">
DROP TABLE IF EXISTS `t_data_align_fans_count_temp_${tableNameSuffix}`;
</delete>
<delete id="deleteDataAlignNoteCollectCountTempTable" parameterType="map">
DROP TABLE IF EXISTS `t_data_align_note_collect_count_temp_${tableNameSuffix}`;
</delete>
<delete id="deleteDataAlignUserCollectCountTempTable" parameterType="map">
DROP TABLE IF EXISTS `t_data_align_user_collect_count_temp_${tableNameSuffix}`;
</delete>
<delete id="deleteDataAlignUserLikeCountTempTable" parameterType="map">
DROP TABLE IF EXISTS `t_data_align_user_like_count_temp_${tableNameSuffix}`;
</delete>
<delete id="deleteDataAlignNoteLikeCountTempTable" parameterType="map">
DROP TABLE IF EXISTS `t_data_align_note_like_count_temp_${tableNameSuffix}`;
</delete>
<delete id="deleteDataAlignNotePublishCountTempTable" parameterType="map">
DROP TABLE IF EXISTS `t_data_align_note_publish_count_temp_${tableNameSuffix}`;
</delete>
</mapper>