当前位置: 首页 > news >正文

【经验】mysql冷热数据分离

        使用mysql存储时,为了提升数据的查询效率,降低磁盘存储压力等,我们常常使用"冷热数据分离"分离的方案。即,将数据从所谓的“热表”(即经常有写入和查询操作的活跃表)迁移到“冷表”(用于存档或不常访问的数据表),并随后清理热表中的数据。下面我们从整体上了解一下对数据做冷热数据分离需要考虑哪些因素?常见的方案有哪些?

一、确认冷热数据区分标准

        冷热数据分离的标准可以根据不同的业务场景和需求来定制,但通常会基于以下几个核心维度来定义:

1. 访问频率:

        热数据:频繁访问的数据,如最近产生的交易记录、用户活动日志或实时分析所需的数据。

        冷数据:很少访问的数据,比如历史归档记录、旧的报告或备份数据。

2. 数据时效性:

        热数据通常指最近时期内产生且与当前业务操作紧密相关的数据。

        冷数据则是过了某个时效点,不再频繁用于日常操作的数据。

3. 业务重要性:

        关键业务流程中的数据可能被视作热数据,即使访问频率不高,因其对决策支持至关重要。

        辅助或历史参考性质的数据则可能划分为冷数据。

4. 数据更新频率:

        经常需要修改或增删的数据倾向于归为热数据。

        不再或极少需要更新的数据则为冷数据。

5. 存储成本与性能需求:

        需要快速访问以保证系统响应速度的数据应存储在高性能介质上,视为热数据。

        对访问速度要求不高的数据可以存储在成本较低、读写速度较慢的介质上,作为冷数据。

6. 合规与法律要求:

        某些数据可能因合规或法律要求必须保存一定期限,但并不频繁使用,这类数据会被归类为冷数据。

        实施冷热分离时,还可以设定具体的时间界限,如最近3个月的数据为热数据,超过3个月自动转为冷数据。此外,还可以结合数据的重要性、敏感度等因素综合判断。为了实现有效的分离,企业往往会利用分层存储技术,如将热数据存储在SSD或内存中,冷数据则存储在HDD或低成本云存储中。

二、冷热数据分离

1、分区表(Partitioning)

        适用场景:当数据量巨大且有明确的时间或范围划分标准时,可以使用MySQL的分区功能,将数据按时间或范围划分到不同的物理区域。这样,查询时可以直接定位到相应的分区,减少数据扫描范围。

        操作方式:根据业务需求(如按月、按季度)创建分区表,将热数据置于活跃的分区,冷数据自动归档到历史分区。

2、数据库分片(Sharding)

        适用场景:适合超大规模数据存储,将数据分布在多个数据库或表中,每个分片存储一部分数据。

        操作方式:可以基于某种规则(如用户ID取模)将热数据和冷数据分散到不同分片,热分片可以配置在高性能硬件上,冷分片则配置在低成本存储。比如,按城市分库,业务热点城市分布在高性能硬件;非热点城市使用低成本存储。

        但一般规模数据,数据量差异性不大时,使用此方案反而可能增大维护成本。

3、归档策略

        适用场景:定期将不再频繁访问的数据从热表迁移到冷表或归档表。

        操作方式:利用INSERT INTO...SELECT结合DELETE语句,或者编写脚本自动执行迁移和清理工作。可以设置定时任务(cron job)来自动化这一过程。

        归档策略在我们的业务中也比较常用,通过定时任务在低峰期跑数据。但因为涉及到数据迁移,所以业务和功能要兼容。并且需要合理设计处理时间范围数据量级、数据删除前要进行数据验证,并设计好回滚方案

4、使用中间件或代理层

        适用场景:当需要更灵活的路由控制和透明的数据迁移时。

        操作方式:如ProxySQL、MaxScale等,可以在中间件层面实现数据访问的路由,将查询重定向到正确的热或冷数据存储,同时在后台执行数据迁移而不影响前端应用。

        此方案的好处是路由灵活,弊端是需要加入中间件或一层路由转发,链路变长,复杂度增加,耗时可能增加。

5、使用专门的归档工具或服务

        适用场景:企业级环境,需要自动化、安全的数据归档和恢复能力。

        操作方式:如MySQL Enterprise Backup、Percona XtraBackup等工具,以及云服务提供商提供的数据归档解决方案,可以自动化备份热数据,并在必要时进行数据恢复或迁移。

6、 冷热存储分离

        适用场景:当硬件资源允许时,直接在物理存储层面进行冷热分离。

        操作方式:将热数据放在高速存储介质(如SSD),冷数据迁移到低成本、大容量的存储设备(如HDD或云存储)。配合MySQL的分区或分片策略,实现数据的物理隔离

7、 数据库复制

        适用场景:需要保持数据副本,或者将冷数据迁移到备用数据库服务器。

        操作方式:利用MySQL的主从复制或组复制功能,将热数据同步到一个或多个从库,然后在从库上执行数据迁移和归档操作。读写分离,降低对主库IO。

三、归档一般执行过程:

        分区、数据库分片还会涉及到分库分表等工具的选择,后面我将放到分库分表相关的文章中讲解。这里我们详细说明下归档策略的一般执行过程:

1、创建冷表结构:

        首先确保冷表的结构与热表相同。你可以使用如下的SQL命令来复制表结构:

CREATE TABLE cold_table LIKE hot_table;

 2、数据迁移:

        使用 INSERT INTO...SELECT 语句将热表的数据插入到冷表中。比如:

INSERT INTO cold_tableSELECT * FROM hot_tableWHERE some_condition;

        如果没有特定条件,直接移除 WHERE some_condition即可。

        但一般冷数据将分布到性能相对较弱的数据库集群中,所以实际迁移逻辑会更复杂,可能需要拆分开,连接不同的数据库。

3、数据验证:

        在执行删除操作之前,确保冷表中已经正确地包含了需要的所有数据。可以通过比较记录数或关键字段来验证。

        数据验证这一步非常重要,是数据迁移过程中保证完整性和正确性的关键步骤。

        虽然数据可以通过binlog或者备份恢复,但恢复过程需要一定时间,而且有一定风险。所以在迁移数据时,最好一步到位。

4、清理热表数据:

        一旦确认数据迁移无误,就可以从热表中删除已迁移的数据。如果之前迁移时有特定条件,同样应用这个条件来删除数据:

DELETE FROM hot_tableWHERE some_condition;

        同样,如果没有特定条件,直接执行全表删除需谨慎

5、优化表:

        删除大量数据后,为了恢复性能和管理存储空间,建议对热表进行优化:

OPTIMIZE TABLE hot_table;

        如果不执行表优化,虽然表空间不会回收,但有新写入数据时,会占用此空间,不会占用新空间。所以我们有些数据删除后,并不会执行optimize操作,因为optimize操作可能锁表

optimize操作可能锁表:

        InnoDB引擎: InnoDB存储引擎在执行OPTIMIZE TABLE时,实际上会执行ALTER TABLE操作来重建表,这意味着它会创建一个新的表结构,并将数据从旧表复制到新表中,然后再删除旧表。在这个过程中,对于InnoDB表,如果表不是太大的话,默认的在线DDL操作(Online DDL)会让表在大部分时间内可读可写,但是,在操作的某些阶段可能会出现短暂的锁表情况,特别是如果表很大或者DDL算法选择不当,可能会导致长时间的锁表,影响写操作。

        MyISAM引擎: MyISAM引擎在执行OPTIMIZE TABLE时,会锁定整个表,直到操作完成。这意味着在优化期间,对该表的所有读写操作都会被阻塞。对于大型表,这可能会导致服务中断,因此在生产环境中应谨慎安排此类维护操作。

6、 事务处理:

        如果数据量大或者对数据一致性要求高,考虑在事务中执行这些操作,以确保数据迁移和删除操作的原子性。

7、计划任务或脚本:

        如果这是定期需要执行的任务,可以编写脚本并通过定时任务(如Linux的cron作业或Windows的任务计划程序)自动化执行。

开放手动归档入口:

        同时,为了方便处理异常数据,我们可以封装脚本核心内容,开放手动修改入口。

        有些异常情况下,如服务器宕机,Job突然挂掉,Job建连失败时,我们的归档执行可能无法从上次停止的地方开始,这时候研发或产品等可能需要根据指定条件手动对数据归档。

        这种修复数据的小工具对我们是非常重要的,我们既需要考虑正向编写业务,也需要考虑反向修复数据。有些突发异常来临时,这些小工具真的会解燃眉之急。

8、预估归档速度

        在正式归档前,我们需要预估归档速度,并根据待归档数据计算出归档耗时。因为我们多在低峰期时归档,如果数据太多,执行到高峰期,可能会影响正常业务执行。

总结:

        以上就是我对冷热数据分离方面概述,其实涉及的方面非常多,每一项展开都能“说个三天三夜”。考虑的方面其实也远不止这些,还有如何高效确定数据归档偏移?  如果数据误删除,可以通过哪些方式快速找回来等。有机会我们再继续说。

        有归档经验分享小伙伴可以留言一起交流。

相关文章:

【经验】mysql冷热数据分离

使用mysql存储时,为了提升数据的查询效率,降低磁盘存储压力等,我们常常使用"冷热数据分离"分离的方案。即,将数据从所谓的“热表”(即经常有写入和查询操作的活跃表)迁移到“冷表”(用…...

【机器学习-06】Scikit-Learn机器学习工具包进阶指南:机器学习分类模型实战与数据可视化分析

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...

蓝桥杯国赛每日一题:日志统计(双指针)

题目描述: 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N行。 其中每一行的格式是: ts id 表示在 ts时刻编号 id 的帖子收到一个”赞”。 现在小明想统计有哪些帖子曾经是”热帖”。 如果一个帖子曾在任意一个长…...

佛山MES公司(盈致mes系统服务商)助力企业实现智能制造

佛山是中国制造业著名的城市之一,拥有众多制造企业。随着科技的不断发展和智能制造的兴起,越来越多的企业开始意识到数字化生产管理的重要性,MES制造执行系统作为智能制造的关键技术之一,受到了越来越多企业的关注和应用。 在佛山…...

算法设计课第五周(贪心法实现活动选择问题)

目录 一、【实验目的】 二、【实验内容】 三、实验源代码 一、【实验目的】 (1)熟悉贪心法的设计思想 (2)理解贪心法的最优解与正确性证明之间的关系 (3)比较活动选择的各种“贪心”策略,…...

Ubuntu20.04右键打不开终端

今天用virtualbox安装了ubuntu20.04 问题:右键打开终端,怎么也打开不了! 点了也没反应,或者鼠标转小圈圈,然后也没有反应… 解决方法: 1、Ctrl Alt F6 先切换到终端访问界面 mac电脑 Ctrl Alt F6 …...

XML元素

XML 元素是XML文档中的基本组成单位&#xff0c;它由开始标签、结束标签和内容组成&#xff0c;格式如下&#xff1a; <element>content</element>常见的XML元素包括&#xff1a; 根元素&#xff08;Root Element&#xff09;&#xff1a;XML文档中的最外层元素&…...

融入新科技的SLM27211系列 120V, 3A/4.5A高低边高频门极驱动器兼容UCC27284,MAX15013A

SLM27211是高低边高频门极驱动器&#xff0c;集成了120V的自举二极管&#xff0c;支持高频大电流的输出&#xff0c;可在8V~17V的宽电压范围内驱动MOSFET&#xff0c;独立的高、低边驱动以方便控制&#xff0c;可用于半桥、全桥、双管正激和有源钳位正激等拓。有极好的开通、关…...

代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 文章目录 代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯理论基础一、常规题目二、解题步骤…...

CSS拟物按钮

<div class"btn">F</div>.btn {margin: 150px 0 0 150px;display: flex;justify-content: center;align-items: center;width: 100px;height: 100px;background-color: #fff;border-radius: 20px;font-size: 50px;color: #333;/* 禁止选中文本 */user-se…...

websevere服务器从零搭建到上线(三)|IO多路复用小总结和服务器的基础框架

文章目录 epollselect和poll的优缺点epoll的原理以及优势epoll 好的网络服务器设计Reactor模型图解Reactor muduo库的Multiple Reactors模型 epoll select和poll的优缺点 1、单个进程能够监视的文件描述符的数量存在最大限制&#xff0c;通常是1024&#xff0c;当然可以更改数…...

解决宝塔Nginx和phpMyAdmin配置端口冲突问题

问题描述 在对基于宝塔面板的 Nginx 配置文件进行端口修改时&#xff0c;我注意到 phpMyAdmin 的端口配置似乎也随之发生了变化&#xff01; 解决方法 官方建议在处理 Nginx 配置时&#xff0c;应避免直接修改默认的配置文件&#xff0c;以确保系统的稳定性和简化后续的维护…...

光伏EPC管理软件都有哪些功能和作用?

光伏EPC管理软件是用于光伏工程项目管理的综合性工具&#xff0c;它涵盖了从项目策划、设计、采购、施工到运维的各个环节。 1、项目总览 管理所有项目计划&#xff0c;包括项目类型、项目容量等。 调整和优化项目计划&#xff0c;以应对不可预见的情况。 2、施工管理 制定…...

BGP学习一:关于对等体建立和状态组改变

目录 一.BGP基本概念 &#xff08;1&#xff09;.BGP即是协议也是分类 1.早期EGP 2.BGP满足不同需求 3.BGP区域间传输的优势 &#xff08;1&#xff09;安全性——只传递路由信息 &#xff08;2&#xff09;跨网段建立邻居 4.BGP总结 5.BGP的应用 &#xff08;1&#…...

ETL工具kettle(PDI)入门教程,Transform,Mysql->Mysql,Csv->Excel

什么是kettle&#xff0c;kettle的下载&#xff0c;安装和配置&#xff1a;ETL免费工具kettle(PDI)&#xff0c;安装和配置-CSDN博客 mysql安装配置&#xff1a;Linux Centos8 Mysql8.3.0安装_linux安装mysql8.3-CSDN博客 1 mysql -> mysql 1.1 mysql CREATE TABLE user_…...

常见地图坐标系间的转换算法JavaScript实现

文章目录 🍉 不同的地图厂商使用不同的坐标系来表示地理位置。以下简述:🍉 前置常量和方法:🍉 BD-09转GCJ-02(百度转谷歌、高德)🍉 GCJ-02转BD-09(谷歌、高德转百度)🍉 WGS84转GCJ-02(WGS84转谷歌、高德)🍉 GCJ-02转WGS84(谷歌、高德转WGS84)🍉 BD-09转wgs84坐…...

基于python的大麦网自动抢票工具的设计与实现

基于python的大麦网自动抢票工具的设计与实现 Design and Implementation of Da Mai Net Ticket Grabbing tool based on Python 完整下载链接:基于python的大麦网自动抢票工具的设计与实现 文章目录 基于python的大麦网自动抢票工具的设计与实现摘要第一章 引言1.1 研究背景…...

2024年5月树莓集团快讯

树莓集团近期快讯 1 园区专场招聘会进校园 国际数字影像产业园联合四川城市职业学院的专场招聘会成功召开&#xff0c;共计提供400余个工作岗位。 2 园区硬件优化再升级 园区硬件优化再升级&#xff0c;智能门禁系统及人脸识别系统下周投入使用。 3 基地短剧合作交流 天府…...

网站localhost和127.0.0.1可以访问,本地ip不可访问解决方案

部署了一个网站, 使用localhost和127.0.0.1加端口号可以访问, 但是使用本机的ip地址加端口号却不行. 原因可能有多种. 可能的原因: 1 首先要确认是否localhost对应的端口是通的(直接网址访问), 以及你无法访问的那个本机ip是否正确(使用ping测试)&#xff1b; 2 检查本机的防火…...

Docker Dockerfile如何编写?

Dockerfile 是一个用来构建镜像的文本文件&#xff0c;文本内容包含了一条条构建镜像所需的指令和说明。 1.指令说明 FROM&#xff0c;构建镜像基于哪个镜像 MAINTAINER&#xff0c;镜像维护者姓名或邮箱地址 RUN&#xff0c;构建镜像时运行的指令 CMD&#xff0c;运行容器时执…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...