项目中大表治理方案实践

一、业务背景

目前生产库数据库服务器数据存储达到了13T,其中license_spart表数据量达到了200亿,占用7.5T,空间占用率达到54%。而且这张表每年数据增长量达到30亿。其中有效VALID数据占20亿,无效数据INVALID占180亿。由于业务上有些场景,需要查询无效数据,所以不能直接删除。随着license_spart表规模持续扩大,会带来严重的性能问题、存储成本增加、备份与恢复困难、数据一致性问题(生产4台服务器)等等。

二、整体目标

将license_spart数据整体迁移到归档库,主库license_spart只保留最新的3个月的有效VALID数据,归档库按照年份保存有效和无效数据,实现主库license_spart存储大幅缩减。

二、治理策略

1、归档库按照年份创建数据表

整体采用分库分表方案,申请归档库数据库服务器资源,然后创建license_spart_2018到license_spart_2035这18张表。归档库表字段跟主库license_spart表字段高度保持一致。

2、分析数据量及规模,指定定时同步策略

分析主库license_spart表的日增长量达1000w(其中有效数据达20w),所以针对2025年以前的数据,采用【全量】+【实时】同步方式;针对2025年之后的数据,采用【实时】方式。

同步方式定时任务名源表目标表查询条件
全量+实时license_spart_2018license_spartlicense_spart_2008lsn < ‘LIC2019’
全量+实时license_spart_2019license_spartlicense_spart_2019lsn like ‘LIC2019%’
实时license_spart_2026license_spartlicense_spart_2026lsn like ‘LIC2026%’

由于数据量比较大,可以在业务不繁忙时间(比如凌晨0点~5点),分100批次同步数据,每次同步5w数据,根据实际情况可以动态调整参数大小。

主库数据同步完成后,建议保留3~4个月时间(2个迭代版本),无问题,再清空生产主库无效数据。

3、编写读取归档库工具类

Spring框架中,Spring-JDBC模块提供了AbstractRoutingDataSource,其内部可以包含了多个DataSource,通过继承该类并覆盖determineCurrentLookupKey方法,可以根据业务需求动态选择数据源。利用AOP注解实现动态切换数据源,参考利用AOP实现数据库读写分离。

编写一个公共查询归档库Service方法,由于归档库跟主库物理分离,所以采用无事务方式,否则会不生效。lsn组成分为LIC+年份+XXXX+标识等构成,通过对lsn的前7位进行切分,能够找对对应的归档库。

@DataSource("archiving")
public List<String> getArchivingLsnList(List<String> lsnList){// 根据入参lsn进行切分...
}

这样在业务代码查询license_spart时候,如果返回lsnList结果为空,再利用getArchivingLsnList查询归档库数据,进行补充。

4、生产验证及回滚

生产上线后,验证同步的数据是否准确,业务逻辑查询和修改是否无误等。如果有问题,及时回滚。

5、定时任务删除生产库数据

编写定时任务定期清理2个月前的数据,利用相关同步工具每天进行物理删除2个月前的主库数据。

针对主库旧表数据清理,采用表重命名方式,进行替换,最后删除旧表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87494.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快应用(QuickApp)技术解析与UniApp跨端开发生态探秘优雅草卓伊凡

快应用&#xff08;QuickApp&#xff09;技术解析与UniApp跨端开发生态探秘优雅草卓伊凡引言&#xff1a;一场由快应用引发的技术辩论近日&#xff0c;优雅草科技的资深开发者卓伊凡在与甲方的一次项目沟通中&#xff0c;因技术选型问题展开了激烈讨论。甲方对快应用&#xff0…

《Font Awesome 参考手册》

《Font Awesome 参考手册》 引言 Font Awesome 是一个功能丰富的图标库,旨在帮助设计师和开发者快速地在网页上添加图标。它提供了超过700个矢量图标,并且支持响应式设计。本文将为您详细介绍 Font Awesome 的使用方法、图标分类、图标定制以及与 CSS 的结合。 一、Font A…

Linux基本命令篇 —— uname命令

uname命令是Linux系统中用于显示系统信息的实用工具&#xff0c;它可以提供关于操作系统、内核版本、硬件架构等重要信息。下面我将详细介绍这个命令的用法和常见应用场景。 目录 一、基本语法 二、常用选项 三、使用示例 显示所有系统信息&#xff08;最常用&#xff09; …

React Native 开发环境搭建--window--android

官网&#xff1a; https://reactnative.cn/docs/environment-setup 必须安装的 node, JDK ,android Studio 安装node 以前装了nvm, 用nvm install 18.0.0 就可以了 安装JDK 1、下载 ---- 我安装的是11 【JAVA17下载传送门】 注意&#xff01;&#xff01;&#xff01;1 …

ODS 系统是什么?企业为什么需要搭建 ODS?

目录 一、ODS 系统基础认知&#xff1a;先弄明白它是啥 1. 什么是 ODS 系统&#xff1f; 2. ODS 系统的起源 3. ODS 系统的特点 二、ODS 系统能干啥&#xff1f;核心功能解析 1. 数据集成 2. 数据清洗和转换 3. 实时数据更新 4. 数据查询和分析 三、企业为什么非得搭…

通过网页调用身份证阅读器http websocket方法-华视电子————仙盟创梦IDE

1.安装全浏览器网页专用监控软件 2.安装后 3.配置web接口 4.测试读取 5.驱动监控地址 时间段内读取身份证:如超时时间10000ms,则在点击按钮10秒内,放上身份证就可以读成功,超时返回失败; 读身份证:把身份证放上去后点击读卡,读成功,再次读卡需要将身份证拿起来再放回去; 不拿…

Spring Cloud 前端调用后端接口方式

在 Spring Cloud 微服务架构中&#xff0c;前端调用后端接口通常不直接通过 Eureka&#xff0c;而是通过以下两种核心方式实现&#xff1a; 一、前端直接调用后端服务&#xff08;需解决跨域和地址管理问题&#xff09; 1. AJAX 直接调用 前端通过 HTTP 请求&#xff08;如 …

【stm32】HAL库开发——CubeMX配置RTC,单片机工作模式和看门狗

目录 一、CubeMX配置RTC 1.RTC实时重要一环——BKP 寄存器 2.RTC实时时钟 2.1打开RTC并设置时间 2.2打开外部低速时钟 2.3代码实现&#xff1a; 二、单片机工作模式 1.低功耗睡眠模式(Sleep) 2.低功耗停止模式(Stop) 3.低功耗待机模式(StandBy) 三、看门狗 1.独立看…

9.Docker的容器数据卷使用(挂载)

什么是容器数据卷技术&#xff1f; 到这里&#xff0c;我算是入门docker了&#xff01; docker的理念&#xff1a;将环境和应用打包成一个镜像&#xff01;直接安装就能使用 如果数据都在容器中&#xff0c;那么我们一旦将容器删除&#xff0c;数据就会丢失&#xff01;因为…

使用 TCollector 写入 TDengine

TCollector 是 openTSDB 的一部分&#xff0c;它用来采集客户端日志发送给数据库。 只需要将 TCollector 的配置修改指向运行 taosAdapter 的服务器域名&#xff08;或 IP 地址&#xff09;和相应端口即可将 TCollector 采集的数据存在到 TDengine 中&#xff0c;可以充分利用…

高斯消元法详解

文章目录 概念用法特殊情况 我的奇怪方法 概念 什么是高斯消元?让我们看一看 OI-Wiki 的解释&#xff1a; 高斯消元法&#xff08;Gauss–Jordan elimination&#xff09;是求解线性方程组的经典算法&#xff0c;它在当代数学中有着重要的地位和价值&#xff0c;是线性代数课…

暴雨服务器成功中标华中科技大学集成电路学院服务器采购项目

近日&#xff0c;武汉暴雨信息发展有限公司在激烈的竞争中脱颖而出&#xff0c;成功中标华中科技大学集成电路学院的服务器采购项目。此次中标产品为暴雨旗下的塔式重装AM400服务器&#xff0c;这一成果标志着暴雨信息在高性能计算领域的卓越实力得到了高校科研机构的高度认可。…

集群聊天服务器---MySQL数据库的建立

数据库的建立表格 user表 字段名称字段类型字段说明约束idINT用户idPRIMARY KEY, AUTO_INCREMENTnameVARCHAR(50)用户名NOT NULL, UNIQUEpasswordVARCHAR(50)用户密码NOT NULLstateENUM(online, offline)当前登录状态DEFAULT offline friend表 字段名称字段类型字段说明约束…

MongoDB 安装使用教程

一、MongoDB 简介 MongoDB 是一个高性能、开源的 NoSQL 文档型数据库&#xff0c;使用 BSON&#xff08;二进制 JSON&#xff09;格式存储数据。适合存储大规模、高并发的非结构化数据&#xff0c;常用于大数据、日志存储、微服务架构中。 二、下载安装 2.1 官网下载 访问 …

FastAPI 小白教程:从入门级到实战(源码教程)

目录 1. FastAPI 基本介绍 安装 FastAPI 2. 简单的 CRUD 示例 2.1 创建基本应用 2.2 添加 CRUD 操作​​​​​​​ 3. 处理跨域请求 (CORS) 4. 普通案例&#xff1a;待办事项 API​​​​​​​ 5. 企业案例&#xff1a;认证和数据库集成 5.1 使用 SQLAlchemy 和 JWT…

java中jasypt是用来做什么的?

思路&#xff1a; 简要介绍Jasypt&#xff1a;一句话说明它的作用。配置解析&#xff1a;分别解释password和algorithm的作用。工作流程&#xff1a;说明如何加密敏感数据并在配置文件中使用。安全提醒&#xff1a;强调密钥管理的重要性。 最终回答&#xff1a; Jasypt&…

牛客周赛 Round 98

1.小红与奇数 解题思路&#xff1a;如果给定的数是偶数, 由于1是任意正数的因子, 偶数1奇数 若给定的数是奇数, 1/自身, 都变成了偶数 #include <bits/stdc.h> using namespace std; void solve() {int x;cin >> x;if (x & 1)cout << "No" <…

(2)手摸手-学习 Vue3 之 变量声明【ref 和 reactive】

手摸手-学习 Vue3 之 变量声明【ref 和 reactive】 前言refreactive 前言 vue3 前端代码开发过程中&#xff0c;必然会涉及变量声明&#xff0c;会用到&#xff1a;ref、reactive 。本章节 进行讲解说明。 演示的项目&#xff0c;经处理后的结构如下&#xff1a; ref 用途…

[Terence Tao访谈] 无限 | 关注模型 | 矢量场 | 策略性“作弊” | Lean

关注模型 改变视角真的很重要 无限&#xff1a;假设是球形的奶牛 陶哲轩&#xff1a;一个很好的例子是数学中的塞迈雷迪定理&#xff0c;于1970年代得以证明&#xff0c;它涉及在一组数字集合中寻找某种类型的模式&#xff0c;即等差数列&#xff0c;例如3、5、7或10、15、20。…

汽车v型推力杆总成三维5自由度性能及疲劳测试系统

V型推力杆总成装置&#xff0c;通常设置在载重汽车中、后桥上&#xff0c;成对使用。其一端通过球面销与车架铰接&#xff0c;另一端则安装在车桥上&#xff0c;通过关节轴承与车桥铰接&#xff0c;其主要作用是稳定车桥&#xff0c;保持车桥的稳定位置&#xff0c;同时克服弹簧…