数据归档方案(带流程图)

article/2025/8/27 20:53:39

需求背景:最近两天新开发了一个功能由于热表中存储数据较多导致插入查询缓慢,所以要求做数据归档
需求:以年为单位进行归档,但每个归档表又存在一个阈值
方案可以使用定时调用

下图为实现思路(流程图):

在这里插入图片描述
1.首先判断年度归档表是否存在,不存在则创建归档表把数据进行归档
2.存在则判断表中数据是否超过阈值,没超过则直接进行归档
3.若超过阈值则需要判断是否存在归档的子表,不存在则创建子表进行归档
4.存在则重复上述操作

下面为代码演示

1.主要逻辑

@Transactional(rollbackFor = Exception.class)@Overridepublic void dataArchiving() {//首先获取当前年份String yyyy = DateUtils.formatDate(new Date(), DateUtils.yyyy);//拼接归档表名称String tableName = "urge_send_message_log_archive_"+yyyy;//判断数据库中是否存在该表logger.info("判断数据库中是否存在"+tableName+"表");int isHave = urgeSendMessageLogService.isHaveTableName(tableName);if (isHave>0){//获取归档表当前存储数据Long count  = urgeSendMessageLogService.getCount(tableName);//判断数据量是否已经达到阈值(配置类参数全部提取至配置文件)if (count > threshold){//初始化子表int i =  1;while (true){//如果大于阈值判断子表是否存在tableName = tableName+"_"+i;//判断子表是否符合归档条件if (extracted(tableName)){break;}i++;}}}else {//拷贝源表结构创建新表urgeSendMessageLogService.backUpTable(tableName);logger.info("创建归档表成功!"+tableName);}//获取当前时间String endTime = DateUtils.formatDate(new Date(), DateUtils.standard);//查询符合条件的历史数据List<UrgeSendMessageLog>  dataArchivings = urgeSendMessageLogService.getDataArchiving(endTime);//把查询出来的数据存入归档表urgeSendMessageLogService.setDataArchiving(dataArchivings,tableName);//批量删除已归档数据urgeSendMessageLogService.deleteDataArchiving(endTime);}

2.判断数据库中是否存在该表SQL

        SELECT COUNT(table_name)from information_schema.TABLESwhere TABLE_NAME = #{表名}

3.获取表当前存储数据

select COUNT(id) from ${表名}

4.拷贝源表结构创建新表

CREATE TABLE ${新表表名}LIKE 原表表名

5.对指定表进行批量操作

    insert into ${表名} (字段,字段)values<foreach collection="dataArchivings" item="entity" separator=",">(#{entity.字段},#{entity.字段})</foreach>

注意点:

注入表名时需使用 ${}
#{}对于的变量会自动加上单引号
${}对应的变量不会加上单引号

如有问题欢迎大佬指出


http://chatgpt.dhexx.cn/article/Rbs9XkK8.shtml

相关文章

webpack优化系列四:vue打包后生成的chunk-vendors文件过大,利用SplitChunks插件,分离chunk

SplitChunksPlugin SplitChunks是Webpack中一个提取或分离代码的插件&#xff0c;主要作用是提取公共代码&#xff0c;防止代码被重复打包&#xff0c;拆分过大的js文件&#xff0c;合并零散的js文件。 推荐网址&#xff1a;https://webpack.docschina.org/plugins/split-chunk…

chunk-vendors.js 语法错误

chunk-vendors.js 语法错误 打开错误文件查看 解决方法 根据上面的错误检查&#xff0c;在vue.config.js中添加transpileDependencies参数配置 transpileDependencies: [arcgis]

Webpack 的 Chunk,想怎么分就怎么分

想必大家都用过 webpack&#xff0c;也或多或少了解它的原理&#xff0c;但是不知道大家有没有写过 Webpack 的插件呢&#xff1f; 今天我们就一起来写一个划分 Chunk 的 webpack 插件吧&#xff0c;写完后你会发现想怎么分 Chunk 都可以&#xff01; 首先我们简单了解下 web…

堆漏洞挖掘中的Chunk分类(allocated chunk、free chunk、top chunk、last remainder chunk)

此图是在上篇文章介绍arena时用到的&#xff0c;我们可以看到&#xff1a;堆块被分为不同的种类&#xff0c;下面我们将来介绍这些。每一类就是一个malloc_chunk结构体&#xff0c;因为这些chunk同属于一个堆块&#xff0c;所以在一块连续的内存中&#xff0c;只是通过区域中特…

GBase 8s 块(chunk)

块是用于数据库服务器数据存储数据文件。可以是文件系统或裸设备。单个块的最大大小是 4TB。数据库最多可支持块数为 32,766 个。 在 UNIX 或 LINUX 上&#xff0c;建议使用裸设备&#xff0c;在 Windows 上&#xff0c;建议使用 NTFS文件系统。 下图对数据库块进行了图解说明…

Spring Batch 中的 chunk

我们都知道 Spring Batch 有 2 种任务方式。 主要是在 Step 阶段&#xff0c;在 Step 阶段&#xff0c;我们可以执行一个 Tasklet&#xff0c;我们也可以按照 Chunk 来执行。 主要区别 如果使用 Tasklet 的话&#xff0c;我们可以一个 Step 对应一个 Tasklet&#xff0c;Spr…

Webpack 理解 Chunk

期望 希望读过本篇文章&#xff0c;你在看Webpack配置的时候&#xff0c;能在脑中形成Chunk的生成过程。 Chunk Chunk不同于entry、 output、module这样的概念&#xff0c;它们对应着Webpack配置对象中的一个字段&#xff0c;Chunk没有单独的配置字段&#xff0c;但是这个词…

Http chunk介绍

总结&#xff1a; HTTP 1.1时&#xff0c;Response要嘛通过Content-Length来指定要传输的内容大小&#xff0c;要嘛通过Transfer-Encoding: chunked来传输动态大小的内容&#xff0c;此时要求Response传输的内容要符合chunk encoding的规定。 从抓包的角度来说&#xff0c;两个…

lua中chunk的理解

在Lua中&#xff0c;一个chunk是一段可执行的Lua代码。通常&#xff0c;一个chunk由一系列语句和表达式组成&#xff0c;可以是一个完整的程序文件&#xff0c;也可以是一个交互式控制台中输入的一行代码。 例如&#xff0c;下面是一个简单的Lua chunk&#xff1a; print(&qu…

【深度学习】Pytorch chunk函数

Pytorch chunk的方法做的是对张量进行分块&#xff0c;返回一个张量列表。但如果指定轴的元素个数被chunks除不尽&#xff0c;最后一块的元素个数会少。 torch.chunk(tensor, chunks, dim0) ->得到一个list的tensors 这个函数的作用是把一个tensor划分到特定数目的块。 chu…

不会还有人不知道module、bundle和chunk的区别吧?

module 非连续的功能块——提供了更小的表面积而不是整个程序。书写良好的modules提供了可靠的抽象及封装边界&#xff0c;组成了统一的设计和清晰的目的&#xff1b;模块解析&#xff08;ModuleResolution&#xff09;一个模块可以作为另一个模块的依赖模块&#xff0c;resolv…

torch.chunk

torch.chunk(tensor, chunk_num, dim)与torch.cat()原理相反&#xff0c;它是将tensor按dim&#xff08;行或列&#xff09;分割成chunk_num个tensor块&#xff0c;返回的是一个元组。 a torch.Tensor([[4,5,7], [3,9,8], [9,6,7]]) b torch.chunk(a, 3, dim 1) print(a) pri…

webpack中的chunk

Webpack 理解 Chunk - 掘金 Webpack 理解 Chunk 期望 希望读过本篇文章&#xff0c;你在看Webpack配置的时候&#xff0c;能在脑中形成Chunk的生成过程。 Chunk Chunk不同于entry、 output、module这样的概念&#xff0c;它们对应着Webpack配置对象中的一个字段&#xff0…

什么是chunk?

本文借鉴《自己动手实现Lua&#xff1a;虚拟机、编译器和标准库》&#xff0c;算是对自己学习的总结&#xff0c;也希望分享下所学知识~~ 什么叫Chunk&#xff1f; 一段可以被Lua解释器解释执行的代码就叫做chunk 可以很小&#xff0c;小到只有一两条语句&#xff1b;可以很大…

生日悖论matlab模拟

概率论课堂小作业 要求用matab模拟生日悖论 条件&#xff1a;30人||100次 本来想白嫖网上的解答 结果竟然找不到用matlab模拟仿真的 所幸不难 自己动手&#xff0c;也为后人铺路。 话不多说&#xff0c;直接上代码 clc clear m100; %仿真次数 N30;%学生人数 for j 1:mB zero…

Python关于生日悖论分析

生日悖论指如果一个房间里有23人或以上&#xff0c;那么至少有两个人生日相同的概率大于50%。编写程序&#xff0c;输出在10000例随机样本数量下&#xff0c;n个人中至少两个人生日相同的概率。&#xff08;n从10到50&#xff0c;不考虑闰年&#xff09; 代码&#xff1a; imp…

男孩女孩问题 生日悖论 三门问题

上篇文章 洗牌算法详解 讲到了验证概率算法的蒙特卡罗方法&#xff0c;今天聊点轻松的内容&#xff1a;几个和概率相关的有趣问题。 计算概率有下面两个最简单的原则&#xff1a; 原则一、计算概率一定要有一个参照系&#xff0c;称作「样本空间」&#xff0c;即随机事件可能…

生日悖论问题

生日悖论是指&#xff0c;如果一个房间裡有23个或23个以上的人&#xff0c;那么至少有两个人的生日相同的概率要大于50%。这就意味着在一个典型的标准小学班级(30人)中&#xff0c;存在两人生日相同的可能性更高。对于60或者更多的人&#xff0c;这种概率要大于99%。从引起逻辑…

生日悖论MATLAB仿真

生日悖论MATLAB仿真 终于熬过了这学期&#xff01;不知不觉大学的3/8已经过去了。回顾以下本学期让我印象最深刻&#xff0c;也最有成就感的事情是写出了我人生中第一个MATLAB程序&#xff01;由于先前零基础&#xff0c;所以从idea到code实现的整个过程是非常坎坷的QAQ那么话…

生日悖论 Birthday Paradox 至少有两人同一天生日概率

首先我们来看下生日悖论&#xff1a; 假设有n个人&#xff0c;365天的时间&#xff0c;假设所有人生日不相同的概率为&#xff08;1-P&#xff09; 第一个人可选择365 天中的任意365天&#xff0c;人数为1时所有人生日不相同的概率为365/365&#xff1b; 第二个人可选择365天…