数据归档方案(带流程图)
需求背景:最近两天新开发了一个功能由于热表中存储数据较多导致插入查询缓慢,所以要求做数据归档
需求:以年为单位进行归档,但每个归档表又存在一个阈值
方案可以使用定时调用
下图为实现思路(流程图):
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>
注意点:
注入表名时需使用 ${}
#{}对于的变量会自动加上单引号
${}对应的变量不会加上单引号
如有问题欢迎大佬指出
数据归档方案(带流程图)相关推荐
- 文件服务器数据归档,数字化转型之数据清理与归档
传统上,数据的清理和归档属于DBA的职责,随着企业数字化转型.数据治理工作的推进,这项工作也被纳入了数据治理工作的重要内容.数据团队定期将应用系统线上过期的数据清理并归入数据湖中,以提供查询和分析所用 ...
- Flink + Iceberg + 对象存储,构建数据湖方案
简介:上海站 Flink Meetup 分享内容,如何基于Flink.对象存储.Iceberg 来构建数据湖生态. 本文整理自 Dell 科技集团高级软件研发经理孙伟在 4 月 17 日 上海站 Fl ...
- ArcGIS版本高级应用 数据归档(历史归档 存档数据)
QQ交流群:607330463 GIS开发技术最强交流群 未经允许 禁止转载 可以参考 目录 1地理数据库 (Geodatabase) 存档 2启用存档 3存档过程 4使用历史版本 5使用历史标 ...
- 那些年跟领导聊过的数据归档【DB篇】:从梳理到落地-DB单表千万级归档详细流程讲解
文章目录 知人论世 执笔蓝图 V1 - 浅尝辄止 V2 - 初窥门镜 V3 - 木已成舟 躬行方案 安内 攘外 卓有成效 沉淀之石 道阻且长 知人论世 无论何种需求的出现都是因为某种迫切解决的问题契机 ...
- 无线远程模块的应用,手机APP远程监控PLC数据技术方案
无线远程模块的应用,手机APP远程监控PLC数据技术方案 (巨控何工_原创) 无线远程模块用途:广泛,遍及智能交通.环境保护.政府工作.公共安全.智能消防.工业监测.环境监测.路灯照明管控.景观照明管 ...
- 非结构化数据治理方案
随着互联网技术的日新月异,内容数据逐渐在各行业的业务中占据更重要的地位.日常的业务过程中,需要处理的大量电子文档.图片.音频.视频等,都属于内容数据范畴. 例如,某银行的无人营业网点的远程业务办理中, ...
- 分布式场景实战第六节 微服务数据治理方案
16 数据一致性:下游服务失败上游服务如何独善其身? 前面三讲我们聊了微服务的 9 个痛点,有些痛点没有好的解决方案,而有些痛点刚好有一些对策,后面的课程我们就来讲解某些痛点对应的解决方案. 这一讲我 ...
- iOS数据持久化方案
技术由来 数据持久化是iOS开发中必不可少的一项技能.因为开发中我们多会涉及到用户信息存储.文件存储.应用内容缓存中的一个或者几个场景. 数据持久化的几种方式 NSUserDefaults plist ...
- 某电力企业数据备份方案解析
企业的大量信息包含在数据中,如何保护企业的数据,在现代企业管理中,已经越来越重要.本文主要讨论某电力企业业务管理系统中的数据备份实现技术和相关的方式.策略等,同时,对SmallWorld的备份做了一定 ...
- 千万级大表如何更快速的创建索引_分享一份生产环境mysql数据库大表归档方案,值得收藏...
概述 分享下最近做的一个mysql大表归档方案,仅供参考. 整体思路 一.明确哪些大表需做归档 1.数据库表概要信息统计 SELECTt1.table_schema,t1.table_name,`EN ...
最新文章
- 微信公众平台消息接口PHP版
- 2道面试题:输入URL按回车HTTP2
- 在执行ab压力测试时出现socket: Too many open files (24)的解决方法
- Using Artica Squid Open Source Project to Build Powerful and Safe but Simple to Use Proxy
- oracle数据库实例,数据库的理解
- 神经网络中使用Batch Normalization 解决梯度问题
- jsp内置对象--response
- Spark 【数据挖掘平台介绍】 - Spark 1.1.0(看范式粒度)
- asp.net 二级域名表单认证情况下共享Cookie
- 编译安装-httpd-2.2.15.tar.gz
- python认证考试mac_Mac OS 平台使用 Python 和 Docker 创建测试用 Https Server
- 遇到一次传导干扰的怪事
- workstation服务重启后自动停止,需要手动启动,解决方案
- Bootstrap辅助类之文本情景类
- 清华EMBA课程系列思考之九 -- 中国经济前沿问题解读
- 健身装备有哪些推荐?健身运动装备品牌排行榜
- 三边是整数的直角三角形的解
- ubuntu中/etc/hosts文件的作用
- java点击菜单缩小图片_java语言点击图片变大再点变小
- 定义银行账户类Account,有属性:卡号cid,余额balance,所属用户Customer 银行账户类Account有方法: (1)getInfo(),返回String类型,返回卡的详细信息