当前位置: 首页 > 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;运行容器时执…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...