Spring 分批处理 + 冷热数据分离:历史订单高效迁移与数据清理实战
在实际业务中,随着时间推移,订单量持续增长,若未及时进行数据治理,会造成数据库膨胀、查询缓慢、性能下降等问题。为了实现数据分层管理和系统高性能运行,我们在项目中采用了“冷热数据分离 + 分批迁移 + 数据清理”的综合方案。
本文将围绕以下几个核心点展开:
-
✅ 为什么要进行冷热数据分离?
-
✅ 如何用分批分页迁移历史订单?
-
✅ 如何在迁移完成后安全删除同步表数据?
🔍 一、为什么要冷热数据分离?
随着订单业务增长,即使采用分库分表,数据总量依旧快速膨胀。对历史订单的访问热度远远低于进行中订单。因此我们有必要:
-
将热数据(15日内未完成订单)保存在主订单表,供高频访问;
-
将冷数据(15日前完成订单)归档到历史订单表,减少主库压力;
-
提升整体系统性能和数据库查询效率。
❗注意:虽然阿里云 OSS 等对象存储价格低,但不支持复杂查询操作(如 SQL 聚合、分页、统计),无法满足用户和运营的历史订单检索与分析需求,因此必须选择支持查询的数据库,如分布式数据库 TiDB。
🔄 二、分批分页迁移:保证性能和稳定性
✨ 核心思想:
-
一次迁移 1000 条数据,控制内存和 SQL 压力;
-
使用
offset
+limit
实现分页; -
按天定时迁移前一天完成的订单;
-
保证数据完整性,支持失败重试。
🔧 迁移代码示例:
@Override
public void migrate() {log.debug("历史订单迁移开始...");int offset = 0, perNum = 1000;LocalDateTime startTime = DateUtils.getDayStartTime(DateUtils.now().minusDays(1));LocalDateTime endTime = DateUtils.getDayEndTime(DateUtils.now().minusDays(1));Integer total = historyOrdersSyncService.countBySortTime(startTime, endTime);if (total <= 0) return;while (offset < total) {baseMapper.migrate(startTime, endTime, offset, perNum);offset += perNum;}log.debug("历史订单迁移结束。");
}
🧹 三、迁移完成后,如何安全删除同步表数据?
在实现冷热分离过程中,我们使用中间同步表(用于异步迁移),为避免数据重复、节省空间,迁移完成后需及时删除同步表中已处理的数据。
为了防止误删或未迁移完全,我们加入了删除前校验机制。
🛡 删除逻辑及校验示例:
@Override
public void deleteMigrated() {LocalDateTime startTime = DateUtils.getDayStartTime(DateUtils.now().minusDays(1));LocalDateTime endTime = DateUtils.getDayEndTime(DateUtils.now().minusDays(1));// 1. 检查是否存在可删除数据Integer totalOfDelete = historyOrdersServeSyncService.countBySortTime(startTime, endTime);if (totalOfDelete <= 0) {log.debug("无迁移服务单数据需要删除");return;}// 2. 校验迁移是否完整Integer totalMigrated = lambdaQuery().between(HistoryOrdersServe::getSortTime, startTime, endTime).count();if (NumberUtils.null2Zero(totalMigrated) <= 0 || totalOfDelete > totalMigrated) {log.error("服务单未完全迁移,同步数据删除失败");return;}// 3. 删除同步表中已迁移数据historyOrdersServeSyncService.deleteBySortTime(startTime, endTime);
}
⚠️ 删除保障机制:
校验项 | 描述 |
---|---|
数量比对 | 同步表中“待删除数量”必须 ≤ 历史表中“已迁移数量” |
分时间段 | 删除与迁移都按天执行,避免大批量误删 |
日志记录 | 失败及时报警,便于排查 |
🧠 四、架构补充说明
🔗 为什么不直接删除主表而使用同步表?
-
避免直接影响主库性能;
-
支持异步、可重试的迁移策略;
-
可配合 binlog + MQ 实现实时同步机制。
💽 使用 TiDB 存储历史数据的优势:
-
支持 MySQL 协议,易于对接;
-
同时支持 OLTP 和 OLAP 查询(HTAP);
-
分布式架构,水平扩展,适合大规模数据归档。
✅ 总结
历史订单迁移不仅是技术优化,更是数据治理的关键环节。
本方案通过以下几个方面保证效率与稳定:
-
使用分页迁移,避免性能瓶颈;
-
同步表中间态设计,解耦迁移流程;
-
增加数据完整性校验与清理逻辑;
-
结合 定时任务 实现每日自动迁移与清理;
-
历史数据存储选择 支持 SQL 的分布式数据库(如 TiDB),满足查询与统计需求。
相关文章:
Spring 分批处理 + 冷热数据分离:历史订单高效迁移与数据清理实战
在实际业务中,随着时间推移,订单量持续增长,若未及时进行数据治理,会造成数据库膨胀、查询缓慢、性能下降等问题。为了实现数据分层管理和系统高性能运行,我们在项目中采用了“冷热数据分离 分批迁移 数据清理”的综…...
Mybatis中的一级二级缓存扫盲
思维导图: MyBatis 提供了一级缓存和二级缓存机制,用于提高数据库查询的性能,减少对数据库的访问次数。(本质上是减少IO次数)。 一级缓存 1. 概念 一级缓存也称为会话缓存,它是基于 SqlSession 的缓存。在同…...
Elasticsearch 常用的 API 接口
文档类 API Index API :创建并建立索引,向指定索引添加文档。例如:PUT /twitter/tweet/1 ,添加一个文档。 Get API :获取文档,通过索引、类型和 ID 获取文档。如GET /twitter/tweet/1。 DELETE API &…...
纯前端专业PDF在线浏览器查看器工具
纯前端专业PDF在线浏览器查看器工具 工具简介 我们最新开发的PDF在线浏览器工具现已发布!这是一个基于Web的轻量级PDF阅读器,无需安装任何软件,直接在浏览器中即可查看和操作PDF文档。 主要功能 ✅ PDF文件浏览 支持本地PDF文件上传流畅的…...
传奇各职业/战士/法师/道士手套/手镯/护腕/神秘腰带爆率及出处产出地/圣战/法神/天尊/祈祷/虹魔/魔血
护腕排行(战士): 名字攻击攻击(均)魔法魔法(均)道术道术(均)防御防御(均)魔御魔御(均)重量要求图标外观产出圣战手镯2-32.50-000-000-10.50-002攻击: 400.02%双头金刚(50级/5000血/不死系)|赤月魔穴(1725,2125)60分钟2只 0.02%双头血魔(55级/5000血/不死系)|赤月魔穴(1725,212…...
觅知解析计费系统重构版在线支付卡密充值多解析接口免授权无后门源码扶风二开
一、源码描述 这是一套视频解析计费源码(扶风二开),可配置多接口和专用特征解析接口,对接在线支付和卡密支付,支持在线充值和卡密充值,支持点数收费模式和包月套餐收费模式,可配置多个视频解析…...
C++11新特性_委托构造函数
格式定义 在 C11 里,委托构造函数的格式为:一个构造函数能够在其成员初始化列表里调用同一个类的其他构造函数。基本语法如下: class ClassName { public:// 被委托的构造函数(目标构造函数)ClassName(参数列表1) : …...
网工_IP协议
2025.02.17:小猿网&网工老姜学习笔记 第19节 IP协议 9.1 IP数据包的格式(首部数据部分)9.1.1 IP协议的首部格式(固定部分可变部分) 9.2 IP数据包分片(找题练)9.3 TTL生存时间的应用9.4 常见…...
C++负载均衡远程调用学习之QPS性能测试
目录 1.昨日回顾 2.QPS_TEST_PROTOBUF协议的集成 3.QPS_TEST_SERVER端实现 4.QPS_TEST_QPS简单介绍 5.QPS_TEST_QPS客户端工具编写和性能测试 1.昨日回顾 2.QPS_TEST_PROTOBUF协议的集成 ## 14) Reactor框架QPS性能测试 接下来我们写一个测试用例来测一下我们…...
C++负载均衡远程调用学习之消息队列与线程池
目录 1.昨日回顾 2.单线程的多路IO服务器模型和多线程模型区别 3.服务器的集中并发模式 4.LARSV0.8-task_msg消息队列任务数据类型 5.LARSV0.8--thread_queue消息队列的发送和接收流 6.LARSV0.8-thread_pool线程池的实现 7.LARSV0.8-thread_pool线程池的实现 8.LARSV0.8…...
Kotlin 基础
Kotlin基础语法详解 Kotlin是一种现代静态类型编程语言,由JetBrains开发,与Java完全互操作。以下是Kotlin的基础语法详解: 1. 基本语法 1.1 变量声明 // 不可变变量(推荐) val name: String = "Kotlin" val age = 25 // 类型推断// 可变变量 var count: In…...
实验数据的转换
最近做实验需要把x轴y轴z轴的数据处理一下,总结一下解决的方法: 源文件为两个txt文档,分别为x轴和y轴,如下: 最终需要达到的效果是如下: 就是需要把各个矩阵的数据整理好放在同一个txt文档里。 步骤① …...
多种尝试解决Pycharm无法粘贴外部文本【本人问题已解决】
#作者:允砸儿 #日期:乙巳青蛇年 四月初五 笔者在写demo的时候遇到一个非常棘手的问题就是pycharm无法复制粘贴,笔者相信有很多的朋友遇到过这种问题,笔者结合搜素到的和自己揣摩出来的方法帮助朋友们解决这种问题。 1、第一种…...
【C++】红黑树迭代版
目录 前言: 一:什么是红黑树? 二:插入什么颜色节点? 三:定义树 四:左单旋和右单旋 1.右单旋 2.左单旋 五:调整树 1.当parent节点为黑色时 2.当parent节点为红色时 2.1 u…...
OSPF路由协议配置
初始环境与准备: 物理连接:按照文件的拓扑连接了 3 台路由器 (R01, R02, R03)、2 台交换机 (Switch0, Switch1) 和 2 台 PC (PC0, PC1)。关键发现:路由器之间的连接实际使用的是以太网线(连接到 FastEthernet 接口),而不是串口线。…...
linux下抓包工具--tcpdump介绍
文章目录 1. 前言2. 命令介绍3. 常见选项3.1. 接口与基本控制3.2 输出控制3.3 文件操作3.4 高级调试 4. 过滤表达式4.1 协议类型4.2 方向与地址4.3 逻辑运算符 5. 典型使用场景5.1 网络故障排查5.2 安全分析与入侵检测5.3 性能分析与优化 linux下抓包工具--tcpdump介绍 1. 前言…...
探索 Disruptor:高性能并发框架的奥秘
在当今的软件开发领域,处理高并发场景是一项极具挑战性的任务。传统的并发解决方案,如基于锁的队列,往往在高负载下表现出性能瓶颈。而 Disruptor 作为一个高性能的并发框架,凭借其独特的设计和先进的技术,在处理海量数…...
smss源代码分析之smss!SmpLoadSubSystemsForMuSession函数分析加载csrss.exe
第一部分: Next SmpSubSystemsToLoad.Flink; while ( Next ! &SmpSubSystemsToLoad ) { p CONTAINING_RECORD( Next, SMP_REGISTRY_VALUE, Entry )…...
《AI大模型应知应会100篇》第44篇:大模型API调用最佳实践(附完整代码模板)
第44篇:大模型API调用最佳实践(附完整代码模板) 摘要 当你的应用突然面临每秒1000请求时,如何保证大模型API调用既稳定又经济?本文通过12个实战代码片段、3套生产级架构方案和20优化技巧,带你构建高性能的…...
第5篇:EggJS中间件开发与实战应用
在Web开发中,中间件(Middleware)是处理HTTP请求和响应的核心机制之一。EggJS基于Koa的洋葱模型实现了高效的中间件机制,本文将深入探讨中间件的执行原理、开发实践以及常见问题解决方案。 一、中间件执行机制与洋葱模型 1. 洋葱模…...
数字智慧方案6187丨智慧应急指挥平台体系建设方案(78页PPT)(文末有下载方式)
数字智慧方案6187丨智慧应急指挥平台体系建设方案 详细资料请看本解读文章的最后内容。 引言 随着社会经济的快速发展,应急管理面临着越来越复杂的挑战。智慧应急指挥平台体系的建设,旨在通过先进的信息技术和智能化手段,提升应急管理的效…...
Linux 常用命令 - tar【归档与压缩】
简介 tar 这个名称来源于 “tape archive”,最初设计用于将文件归档到磁带上。现在,tar 命令已经成为 Linux 系统中最常用的归档工具,它可以将多个文件和目录打包成一个单独的归档文件,并且可以选择使用不同的压缩算法进行压缩&a…...
python常用科学计算库及使用示例
一、NumPy - 数值计算基础库 安装 pip install numpy 核心功能示例 1. 数组创建与运算 import numpy as np# 创建数组 arr np.array([1, 2, 3, 4]) matrix np.array([[1, 2], [3, 4]])# 数学运算 print(arr 1) # [2 3 4 5] print(matrix …...
【中间件】brpc_基础_bthread头文件
bthread.h学习笔记 源码 1 概述 bthread.h 定义了一个用户级线程库,提供类似 POSIX 线程(pthread)的功能,但针对高并发和调度优化进行了扩展。支持线程管理、同步原语、中断机制、线程特定数据等功能,适用于需要高效…...
【AI面试准备】Git与CI/CD及单元测试实战指南
介绍Git、CI/CD 流程、单元测试框架(如 NUnit、JUnit)。如何快速掌握,以及在实际工作中如何运用 目录 一、Git:分布式版本控制系统核心概念高频命令实战建议 二、CI/CD:自动化交付流水线核心流程工具链组合关键配置示…...
个人健康中枢的多元化AI软件革新与精准健康路径探析
引言 人工智能技术的迅猛发展正在重塑医疗健康领域的服务模式和用户体验。随着多模态大模型、MCP协议、A2A协议和思考链算法等创新技术的出现,个人健康中枢正在经历一场深刻的软件革新。这些技术不仅打破了传统健康管理系统的信息孤岛,还通过多维度数据整合和深度推理能力,…...
Java文件上传
war包利用 WAR包结构详解-CSDN博客 Tomcat弱口令及war包漏洞复现(保姆级教程)-CSDN博客 Tomcat 8.x弱口令获取manager权限上传任意war包漏洞复现 - Stunmaker - 博客园...
Python项目源码63:病历管理系统1.0(tkinter+sqlite3+matplotlib)
1.病历管理系统包含以下主要功能: 核心功能:病历信息录入(患者姓名、年龄、性别、诊断结果、主治医生),自动记录就诊时间,病历信息展示(使用Treeview表格),病历信息查询…...
Unity 与 Lua 交互详解
Unity 与 Lua 的交互是热更新实现的核心技术,下面我将从底层原理到实际应用全面解析交互机制。 一、交互基础原理 1. 通信架构 Unity (C#) 原生层↑↓ 通过P/Invoke调用 Lua虚拟机层 (C/C实现)↑↓ Lua脚本解释执行 业务逻辑层 (Lua脚本) 2. 数据类型映射表 Lu…...
【Vue】Vue与UI框架(Element Plus、Ant Design Vue、Vant)
个人主页:Guiat 归属专栏:Vue 文章目录 1. Vue UI 框架概述1.1 主流Vue UI框架简介1.2 选择UI框架的考虑因素 2. Element Plus详解2.1 Element Plus基础使用2.1.1 安装与引入2.1.2 基础组件示例 2.2 Element Plus主题定制2.3 Element Plus的优缺点分析 3…...
期刊、出版社、索引数据库
image 1、研究人员向期刊或者会议投稿,交注册费和相应的审稿费等相关费用[1]; 2、会议组织者和期刊联系出版社,交出版费用; 3、出版社将论文更新到自己的数据库中,然后将数据库卖给全世界各大高校或企业; 4…...
btrace2.0使用方法
2022 年我研究安卓性能优化的时候,写过一篇:btrace1.0使用方法 - Wesley’s Blog,现在 brace 进化到 2.0 了,让我们一起来看看如何使用。 具体的接入流程可以看官方文档: bytedance/btrace: 🔥ǵ…...
【计算机视觉】三维视觉:Instant-NGP:实时神经辐射场的革命性突破
深度解析Instant-NGP:实时神经辐射场的革命性突破 技术架构与核心创新哈希编码(Hash Encoding)性能对比 环境配置与安装指南硬件要求全平台安装流程 实战全流程解析1. 数据准备2. 训练与重建3. 结果导出与应用 核心技术深度解析哈希编码实现混…...
组件通信-provide、inject
概述:实现祖孙组件直接通信 具体使用: 在祖先组件中通过provide配置向后代组件提供数据 在后代组件中通过inject配置来声明接收数据 具体编码: 【第一步】父组件中,使用provide提供数据 父组件: <template&g…...
定制开发开源AI智能名片S2B2C商城小程序驱动的无界零售基础设施变革研究——基于京东模式的技术解构与商业重构
摘要:本文以京东无界零售战略为参照,探讨定制开发开源AI智能名片S2B2C商城小程序如何通过“技术赋能生态重构”双轮驱动,重塑零售基础设施的可塑化、智能化与协同化。研究显示,该模式通过“AI名片智能中枢S2B2C分布式网络开源技术…...
基于STM32的带恒温系统智能外卖柜设计
标题:基于STM32的带恒温系统智能外卖柜设计 内容:1.摘要 随着外卖行业的迅速发展,对外卖存放设备的智能化和功能性要求日益提高。本设计的目的是开发一种基于STM32的带恒温系统智能外卖柜。方法上,以STM32微控制器为核心,结合温度传感器、加…...
ARM架构详解:定义、应用及特点
一、ARM架构的定义 ARM(Advanced RISC Machine) 是一种基于精简指令集(RISC)的处理器架构,由ARM公司(现属英伟达)设计,以低功耗、高能效为核心目标。其商业模式为IP授权,…...
Spring Boot 集成 Elasticsearch 的详细步骤
以下是 Spring Boot 集成 Elasticsearch 的详细步骤: 环境安装 安装 Java :Elasticsearch 基于 Java,需先安装 JDK 11 或更高版本。从官 方网站下载安装包,按教程安装配置,安装后通过命令行输入java -version验证。 …...
提示词版本化管理:AI开发中被忽视的关键环节
当我的提示词"消失"在团队协作中 上周五下午,我经历了一场小型"灾难"。作为一名AI产品经理,我花了整整三天精心打磨的客服机器人提示词,在周末更新后突然"失效"了。机器人不再能够准确识别用户意图࿰…...
专题二十二:DHCP协议
一、DHCP简介 HCP是Dynamic Host Configuration Protocol的缩写,即动态主机配置协议。DHCP是一个很重要的局域网的网络协议,DHCP使用UDP封装的67和68端口,DHCP客户端使用68端口,DHCP服务器使用67端口进行回应。 DHCP可以提供两种…...
轻量级在线Excel预览工具
轻量级在线Excel预览工具 简介 在日常工作中,我们经常需要快速查看Excel文件的内容,但不一定总是需要打开完整的Excel软件。为了解决这个问题,我开发了一个轻量级的在线Excel预览工具,让您可以通过浏览器快速查看Excel文件内容。…...
【OFDM过程中正交子载波特性的应用及全面解析】
OFDM过程中正交子载波特性的应用及全面解析 一、正交子载波的核心作用 正交子载波是OFDM技术的基石,其特性贯穿整个发送和接收流程: 正交性定义 子载波频率间隔为符号速率的倒数( Δ f 1 T \Delta f \frac{1}{T} ΔfT1)&…...
旧版本NotionNext图片失效最小改动解决思路
旧版本NotionNext图片失效最小改动解决思路 契机 好久没写博客了,最近在notion写博客的时候发现用notionNext同步到个人网站时,图片无法预览。猜测是notion加了防盗链措施,去notionNext官方github上寻找解决方案,需要升级到4.8.…...
4.5 使用busybox制作根文件系统
4.1. 使用busybox制作文件系统 4.1.1 busybox源码下载: 下载地址:Index of /downloads 4.1.2. busybox源码中修改Makefile ARCH arm CROSS_COMPILE /usr/local/arm/arm-2009q3/bin//arm-none-linux-gnueabi-4.1.3. make menuconfig配置busybox &…...
LeetCode[102]二叉树的层序遍历
思路: 题目描述从左到右一层一层的进行遍历,就遍历二叉树的这种题我更喜欢用递归来做, 我使用java来做的,结果集是两个List集合,那么我们是不是应该每到新的一层就给这个结果集添加一个内部的List,那么怎么…...
【C到Java的深度跃迁:从指针到对象,从过程到生态】第五模块·生态征服篇 —— 第二十章 项目实战:从C系统到Java架构的蜕变
一、跨语言重构:用Java重写Redis核心模块 1.1 Redis的C语言基因解析 Redis 6.0源码核心结构: // redis.h typedef struct redisObject { unsigned type:4; // 数据类型(String/List等) unsigned encoding:4; // …...
implement the “pixel-wise difference“
根据在处理图像数据的来源和格式的不同,在具体实现“两幅图像残差比较”的时候,分为两类方法。 类型一:PyTorch 的 Tensor 图像格式 imgs_pil_o [transforms.ToPILImage()(img_o) for img_o in imgs_o] imgs_pil_w [transforms.ToPILImag…...
GoogleTest:TEST_F
GoogleTest:简单示例及ASSERT/EXPECT说明-CSDN博客 介绍了写一个简单的测试用例 如果某些测试用例在开始测试前需要先做一些准备工作,那么如果每次都需要先准备,那么会比较的麻烦,基于这种情况可以使用GoogleTest的TEST_F方法。 简单点说,就是需要先定义一个继承于testin…...
【优选算法 | 位运算】位运算基础:深入理解二进制操作
算法相关知识点可以通过点击以下链接进行学习一起加油!双指针滑动窗口二分查找前缀和 在本篇文章中,我们将全面解析位运算的基本原理与实际应用。位运算通过直接操作数字的二进制表示,能够在许多计算中提供极大的效率提升。无论是用于加速数学…...
推荐免费的RVC模型下载网站
前沿 近年来,随着人工智能与计算机生成内容(AICG)技术的飞速发展,众多人才纷纷投身于这一领域。从ChatGPT到Stable Diffusion,再到RVC,这些广为人知的AI技术正逐步改变我们的生产方式。众所周知,…...