解读GaussDB(for MySQL) 冷热存储分离实现原理

news/2024/9/19 15:46:42/文章来源:https://www.cnblogs.com/huaweiyun/p/18410103

本文分享自华为云社区《GaussDB(for MySQL)新特性解读:冷热存储分离》,作者:GaussDB 数据库。

技术背景

业务长期运行,但随着时间推移,越来越多的数据被访问频率降低,从而变成为所谓的"冷数据"。若直接将这些冷数据删除,会面临数据丢失的风险以及高昂的恢复成本;若保持冷数据现有的存储方式不变,存储空间占用越来越多,存储成本将持续增加。

同时,在无法有效利用查询索引加速的情况下,数据表的记录膨胀会进一步降低查询效率。如若用户自己识别、分离并转存冷数据至低成本存储中,需要考虑诸多因素:

a. 如何构建脚本。从表中dump一行行冷数据到OBS等超低成本存储中,这需要借助其它计算资源完成;

b. 如何提升在线迁移效率,同时降低对现有业务性能的影响;

c. 如何保障数据一致性和可靠性,并在出现问题时快速处理;

d. 当导出的数据无法直接访问时,如何倒回到实例的表中;

这一系列问题,不仅涉及的改造工程量庞大,而且实施成本很高。

 

特性价值

GaussDB(for MySQL)冷热存储分离新特性,支持冷表/分区可读和混合分区管理。

 

冷热存储分离特性能够通过一条简单SQL语句实现表/分区的灵活转储,并快速将物理页并行地从CDE转储到OBS中,单位存储成本最高可降低90%。同时,冷数据在线可读写,确保现有的基于Innodb的访问方式,支持事务,满足数据一致性,访问冷表无需对业务进行改造。

此外,冷热存储分离特性还支持定义规则。通过自动创建分区和指定何时为冷分区并将其自动归档到OBS中,同时可指定“冷分区对查询计划不可见”(rds_schs_enable_partition_visible)的模式,来提升对表中热数据的访问性能,实现冷热混合分区的统一高效管理。

 

实现原理

GaussDB(for MySQL)冷热存储分离特性实现原理如下:

 

1. 并行地从分布式存储中抽取冷数据对应的页面组装成Object,并快速地将冷数据归档到OBS中,实现数据0丢失。

2. 通过meta管理,使得数据操作涉及的Page可以快速实现定位和寻址。

3. 通过meta管理,转储过程支持断点续传,即用户可以重试数据转储操作,确保已转储的数据无需重复转储,从而在HA(高可用性)故障恢复中显著提高重做效率。

4. 归档的数据支持备份恢复的能力,支持按指定时间点进行恢复,且恢复后这些被归档的数据能够快速投入使用。

5. 通过“多版本快照的 Lock free”这一转储方式,在任何时刻,被归档的表都能够无阻塞地进行数据操作。

6. 无需使用Innodb Buffer Pool等性能关键的资源,不仅对主机资源占用小,CPU和内存占用始终在10%以下,还能提供转储过程中的流控能力,从而最大程度地避免因争抢公共IO资源而影响业务。

 

业务场景/流程

1. 新实例开启冷热存储分离

登录管理控制台,在云数据库 GaussDB(for MySQL)的“实例管理”页面,单击目标实例名称,进入基本信息页面。在左侧导航栏,点击“冷热分离”,在“冷热分离”右侧点击图片,在弹框中点击“确定”,打开冷热分离开关。

 

2.使用冷热存储分离

下面采用DAS数据管理服务,通过SQL命令来介绍冷热存储分离特性的使用。

1)创建冷表

CALL dbms_schs.make_io_transfer("start", "库名", "表名", "分区名", "", "obs");

例如:

CALL dbms_schs.make_io_transfer("start", "test", "table1", "", "", "obs");

 

2)回迁冷表

CALL dbms_schs.make_io_transfer("start", "库名", "表名", "分区名", "obs", "");

例如:

CALL dbms_schs.make_io_transfer("start", "test", "table1", "", "obs", "");

 

3)查询归档或回迁状态

CALL dbms_schs.show_io_transfer("库名", "表名", "分区名");

例如:

CALL dbms_schs.show_io_transfer("test", "table1", "");

 

总结

GaussDB(for MySQL)冷热存储分离特性,支持用户直接针对Innodb的page进行归档和回迁操作,且无需调整上层业务即可访问冷数据。另一方面,在支持分区进行冷热存储分离的基础上,还支持混合分区管理,使得用户在不变更业务的情况下,可以灵活选择在查询时是否快速过滤冷分区。

 

附录

·本文作者    华为云GaussDB(for MySQL)团队

·华为云GaussDB(for MySQL)官方产品文档:

https://support.huaweicloud.com/gaussdbformysql/index.html

 

点击关注,第一时间了解华为云新鲜技术~

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

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

相关文章

WTF???

不是哥们,这紫了之后还能再升一遍?哦,喜闻乐见的 plagiarism 事件啊,那没事了

算法与数据结构——二分查找插入点

二分查找插入点 二分查找不仅可用于搜索目标元素,还可以解决许多变种问题,比如搜索目标元素的插入位置。 无重复元素情况Question 给定一个长度为n的有序数组nums和一个元素target,数组不存在重复元素。现将target插入数组nums中,并保持其有序性。若数组中已存在元素target…

2022 CSP-J 阅读程序3

1 2022 CSP-J 阅读程序3 阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填;除特 殊说明外,判断题 1.5 分,选择题 3 分) 源代码 #include<iostream>using namespace std;int n,k;int solve1() {int l=0,r=n;while(l<=r){int mid=(l+r)/2;…

第二届熵密杯-广外女生青春版

晨曦初始谜题1 由源码可知,有固定的前缀,且长度为18,超过一个块的长度,可以通过求方程的形式先将key求出来,再将整个key带入解密函数得到加密前的字符串 求key # sage N_HEX = "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123" N = Integer…

测评通义灵码,如何实现微信表情、 AI 语音笔记等小功能?

墨问西东是一家创业公司,很难一下子配齐像大公司那样的研发团队,这类 AI 编程辅助工具其实在一定程度上帮助我们的研发同学成长为全栈工程师,一个人就能顶上一个团队。内容来源 MacTalk 公众号,作者池建强 墨问西东是一家创业公司,很难一下子配齐像大公司那样的研发团队,…

一文看懂Prometheus告警原理及过程

本文详细介绍了如何在Prometheus中自定义告警规则,包括规则构成、Prometheus配置、告警流程以及告警解除的处理方法,特别关注了告警解除后的通知策略。摘要由CSDN通过智能技术生成目录 1. 自定义告警规则 2. 告警规则编写 3. prometheus配置 4. 告警过程 5. 告警解除 5.1 对s…

pytorch安装: cuda、cudatoolkit、torch版本对照

在 PyTorch 官网上有如下安装对照表,同时也有历史版本安装对照表从零开始配置python深度学习环境大概有如下配置步骤: 方案一: 电脑安装显卡驱动,然后安装CUDA、cuDNN,安装miniconda3。前面都是在电脑基础环境配置,后面的操作都是在conda环境中,安装torch、cudatoolkits…

AI实战 | 领克汽车线上营销助手:全面功能展示与效果分析

本篇文章的主要目的是为大家提供实现思路,以及如何更好地开发一个助手,而不仅仅是简单地进行拆解。如果采取拆解的方式,一篇文章可能会长达2万+字,还需要配以数十张图片,这将会非常繁琐。因此,针对拆解的详细内容,我计划单独制作一期视频,以帮助大家更清晰地理解。感谢…

ThreadLocal源码分析-

ThreadLocal源码分析 ThreadLocal是解决线程安全问题的一种方法,它通过为每个线程提供一个独立的变量副本避免了变量并发访问的冲突问题。一个ThreadLocal变量只与当前自身线程相关,对其他线程是隔离的。下面这段代码展示了ThreadLocal的使用。 public class test {private s…

Python打包完成后报错,如何解决?

大家好,我是Python进阶者。 一、前言 前几天在Python最强王者交流群【钟爱一生】问了一个Python打包处理数据的问题,问题如下: 打包完成后报错:发生错误:Missing optional dependency openpyxl.Use pip or conda to install openpyxl.哪位大佬帮我看一下错在哪了?二、实现…

408存储系统大题笔记

咸鱼25计组强化课P2的笔记,有点简陋。 课后需要把第三章的课后大题(真题做一下) Cache类题目做题要注意的点!!PA的位数=Cache地址总位数 Cache总行数 Cache块大小 第2和第3相乘得Cache数据区总大小(!=Cache总大小) 映射方式 一致性问题:写策略(直写/回写) 替换算法 CPU…

浅谈 C# 中的顶级语句

前言 在C# 9版本中引入了一项新特性:顶级语句,这一特性允许在不显式定义 Main 方法的情况下直接编写代码。 传统的写法namespace TestStatements{ internal class Program { static void Main(string[] args) { foreach (var arg in args) …