PolarDB-X 数据 TTL 过期删除(二)| 学习笔记

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 快速学习 PolarDB-X 数据 TTL 过期删除。

开发者学堂课程【PolarDB-X 开源分布式数据库进阶课程 :PolarDB-X 数据 TTL 过期删除(二)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1202/detail/18333


PolarDB-X 数据 TTL 过期删除


二、实验演示

我们先创建一一个实验室的资源,稍等一下啊,在等待实验室资源创建的过程中可以先给大家看一下有哪些功能,首先是会演示如何去创建 ttl 表,ttl 其实是 local 盘的,限制的就是 ttl 表,然后以及如何去查看 tl 表的一些元数据,然后其如何去管理这一些要表的分区。然后第二块的话就是因因为我们 ttl 表需要定时的创建新分区,以及是除了分区的这个过程的话,可以我们去跑的 ddx 内核提供了一些定时任务的能力,当然如果是需要更灵活的自己来控制的话,也可以禁用掉这一个定时任务,然后自己根据业务的需要,来自己实现一个定时人物或者甚至是手动得来进行这个操作,这一块是 tlt 表跟普通的 ttl 表之间的一个互相转换。

image.png

看到实验室已经创建好了,那我们根据实验的手册,我们可以先安装一下 docker 的环境,然后启动一下 docker。然后安装一个 macal 安装到权限组中。等待的过程中,讲解一下 ttl 表的语法。那首先 ttl 表,他在 dx 的 database 其实有两个模式,一个是 ttl 下表的话,只能在 auto 表中使用,他创建的方式很简单,其实就是你在正常的 create table 的后面跟上t的特有的语法。Ttl 的语法其实含了很多的参数,右图所示就可以指定一共可以指定七个参数,但是它并不是所有的参数都要指定的。那默认情况下你需要指定的最好的其实就是两个一,一个是你希望用哪一个字段,用哪一列来做 t 的分区链,另一个是你时间的间隔周期,这边的话就是一个用 gp modify 来按每个月划分一个分区,我们继续等一下实验室,我们然后当然还有一些比较关键的参数,这边最关键的其实就是一个 interval 这一个的时间力度以及这个 after,刚刚已经解释了,在前面的 PPT中已经解释了这两个的意思,然后我们可以看一下表格,这一次刚刚也解释过了,这里有个 schedule,他的意思就是创建表的时候不要默认自动创建定时任务,但如果这一个 disable 不加的话,他就是会默认自动创建的然后这边还有一个加上一个日期的一个参数,他的意思是你表创建的时候,第一个分区的初始时间,所以你有些系统其实有一些历史数据。

image.png

但是他并不希望这些历史数据放到底下表中的时候,一下子就被删除掉,或者说很多历史数据归档到都会都路由到同一个分区,这样的话你直接创建出来一个t表,那他的第一个分区就会包含非常多的数据,那如果提供了这个的话,你就可以把很多很早期的历史数据都也按照一个时间的力度来做一个路由,我们实验室这个已经启动了,我可以看一下之前集群的状态,继续创建为 polar-x,创建一个命名空间,安装有 operator 等待一下,组建的启动应该差不多60秒左右就能自动好。然后我们可以编辑一下这个样文件,让文件也在这个实验手册里有直接把它就好了,rc 进入命令模式,然后它保存,他现在已经正在创建我们的 Polor-X 集群。

image.png

创建中我们可以再开一个 terminal,右上角有一个加号,点击加号可以重新开一个 terminal,然后看看 Polar- x 的创建进度,这个操作可能会需要一个好几分钟的时间,那我们还是继续来讲解我们的功能,刚刚这个表中的参数其实都是给我们建表的时候,这个表的时候使用的,那我们建完的表之后,其实我们关心的他表的一个原数据,就是我们分的哪些分区,我们希望知道这件事情,那关于这个功能的话,ttl 其实其中的一个视图里,所以我们可以直接使用的新 from local 系统,系统表这是一个系统的视图表,我们告诉他表明跟在哪个库中就能看到这张表所有的T7分区要注意这个分区跟你数据的那个分区是不一样的。

image.png

select * from infornation_schena.Local_partitions where table_name t_create_Lxok"and table_schema='local_partition'\G;

TABLE_SCHEMA:Local_partition

TABLE_NAME:t_create_Lxok

PARTITION_NAME:p20211101

PARTITION_METHOD:RANGE COLUMNS

PARTITION_EXPRESSION: gmt_modified

PARTITION_DESCRIPTION:‘2021-11-01

PARTITION_COMMENT:expire:2022-11-01

2.row

TABLE_SCHEMA:Local_partition

TABLE_NAME:t_create_lxok

PARTITION_NAHE:p20211201

PARTITION_METHOD:RANGE COLUMNS

PARTITION_EXPRESSION:*gmt_modified

PARTITION_DESCRIPTION:‘2021-12-01

PARTITION_COMMENT:exp1re:2022-12-01

3. row **林*林**************

TABLE_SCHEMA:Local_partition

TABLE_NAME:t_create_Lxok

PARTITION_NAME:pmax

PARTITION_METHOD:RANGECOLUMNS

PARTITION_EXPRESSION: gmt_modified

PARTITION_DESCRIPTION:MAXVALUE

PARTITION_COMMENT: 

-- 分配新分区的语法

ALTER TABLE <table_name> ALLOCATE LOCAL PARTITION;

-- 示例

ALTER TABLE t_order ALLOCATE LOCAL PARTITION;

-- 删除过期分区的语法

ALTER TABLE <table_name> EXPIRE LOCAL PARTITION [<local_partition_name>];-- 可以指定分区名

ALTER TABLE t_order EXPIRE LOCAL PARTITION p20210401;

-- 未失效分区不允许删除,会报错

ALTER TABLE t_order EXPIRE LOCAL PARTITION p20221101;

-- 不指定分区名时,删除所有已过期的分区

ALTER TABLE t_order EXPIRE LOCAL PARTITION;

-- 校验 TTL 分区一致性

CHECK TABLE <table_name> WITH LOCAL PARTITION;

数据分区是按哈希分区或者是其他,但是 ttl 表分区主要是按时间来分区,这个系统表中的信息主要是我所有的 ttl 的分区,这边的话就会发现有三个,然后分别是数据小于2021 11月1号的会路由到第一个分析,然后小于12月1号的回来,然后其他的数据大于小于一起到这个 NEX 的分局。然后这里也显示了他每个分区的失效时间,那到了这个失效时间之后,我们可以通过右边的这些命令去把这个分区删掉,或者说如果有定时任务的话,定时任务会自动把这个删掉,然后这边的话其实主要是两个命令,一个是 ate,那个是 x local party,那如果有一个分区它没有过期的话,但是我们去执行这个 local partition,他是这这个可以放心的是他数据是不会被删掉的,只有已经过期的分区,我们调用这个命令,他才会把这个数据删掉,同样的,我们多次的调用这个命令,他也不会无限的创建新的分区出来,他只会按照我们建表的时候定义的,比如说我们希望提前三个月创建分区,让他最多就会提前创建三个分区,实验室已经创建成功了叉集群,通过这一个命令,我们可以获取一下 io 的密码,然后我们再开一个窗口来连接,他数据节点已经准备成功了,但是他西安节点还没有准备成功,就可能还得等一下,他时间节点在创建中,是要在可能还需要再等两分钟。

image.png

那还是继续来讲我们的 ttl 的命令,这边还有一个 check,指定是 check table,然后加上表明后面是 with local partition,因为前面前面解释过啊,他ttl的功能是跟 polar-bx 分区表的功能是正交的每个分区,其实他在数据节点上都是一个物理表。其实就是给物理表上再做一个分区,这也是为什么它叫 local partition,那我们其实这个命令的作用就是去校验他的 dx 所有的分区的物理表的物理分区是否是相同。

默认的话,具体要所有的功能都是会保证这个的一致性的。一般也不用担心抛开时间节点,创建成功了可以开启一下端口的转发,然后在新的村民里,我们可以去直接连上我们的 polar-db 节点密码的话,密码的话放到在这里,我们已经连上了,可以 version 看一下说现在还没有数据库,那我们可以去创建一个数据库他刚解释过了,那条表功能只有在 mod 等于的数据的库存,可以使用然后我们成功的创建的数据库,那我们现在再来创建一个 ttl 表。

image.png

详细的文档的话,在实验室的手册里也有,大家可以打开这个详细文档,在阿里云的 polar-bx 的官网上看一下这些所有的参数,自己看创建表的时候可以根据这一个参考手册来创建。那我们创建一个这样的表我们上面一个70秒,他一共只有两个字段 ID,然后我们按照 gt modify 的做时间的分区,第一个分区的时间是2021年,2021年的1月1号,然后每个周期是一个月,然后过期时间12个月,那所以我们可以想一下,第一个分区是2021年的1月1号,那他其实他第一份去的过期时间其实是2022年的1月1号。然后会提前创建三个分区,那我们预期其实是第一个分区是2022,2021年的1月1号,最后一个分区是当前时间加上三个周期,现在是11月份,所以11+3,那就是可能是一个2月份的一个时间,那我们可以先看一下穿出来的表结构,表结构没问题,没有这一个 information 去可以查看它,物理表的分区这个表,这所有的物理表一共都有二十七八个分区,可以看到他最小的一个分区确实是2021年的1月1号,这就是那个参数规定的第一个分区,它是要的时间也符合预期,2021年1月1号加上12个月就是2022年1月1号,那我们来看一下最后一个分区,因为是现在是11月份,那不加上三个,三个分区范围其实就是明年的二月份,明年的2月份,再过12个月过期,那其实就是后年的二月份。

image.png

那所有的表都有一个 max 的分区,这个 max 分区可以用来承载一些时间特别大的分区都会路由到这个 max 中,然后这个是这个命令是用来创建新的分区的,比如说现在比如说现在又过了一个月,现在现在假设已经是12月份了,但我们这时候在调用这个命令的话,他就会去检查我们所有物理表的一个最新的分区,看看一下是否需要给所有的物理表在创建一个新的分区,但是因为这个表示刚刚创建出来的,所以这个命令是其实相当于不会做任何事情,但是我们有很多的老的分区,其实是已经过期了,那这个 X8 local partition 就可以去把这些老的分区给删掉我们看,之后再去看一下这个的原数据 K 最现在只剩下16个分区的,前面的话应该是有27的分区,所以有很多个老的分区已经删掉了,然后现在的最老的数据是2021年的12月11号的数据。

那他过期的时间是2022年的12月1号,今天是11月25号,那其实这个分区再过几天如果再跳一遍这个命令的话,这个分区也会被删掉,那除了我们手动的掉这两个低调命令可以控制这一个分区,其实就是本质上类似于一个时间,滑动窗口一样的结构去不断的滚动我们之外,我们还有一个定时任务的功能,能够帮助我们做这件事情,能够自动的画着做这件事情,那我们先现在先把这个表重建一下。Job 之后我们再创建一遍创建成功之后,我们再通过这个语法创建一个定时任务,这个定时任务的意思就是 schedule for local partition 这些都是关键词,这个后面跟的是数据库的名字,就跟表的名字,然后这边后面可以接一个 Pro 表达式来以及一个摊中的参数啊,这个表达式的含义,这边有一个视图分别是你现在给这个视图可以查看这个数据库中所有的定时任务,那这一定时任务的表达式是这样的一个字符串,它的含义就是每隔五天之后再中午的12点执行,然后他下一次执行的时间是11月26号的12点,然后是去加800,那因为这是他第一次调度,所以他会立刻调度一下12月26号下一次之后那就是26+5天,那就是三月,三月初会再继续执行,但是但是这个太晚了,我们可以手动的触发一下这一个定时任务,手动出的触发,让他执行一下。其实定时任务还有一个运维窗口,那运维窗口的话其实可以在 polar-dbx 控制台页面上来进行设置,那默认的话它是

image.png

一个在凌晨的业务低峰期允许你执行这些运维指令,但是我们可以通过

image.png

这个现在的命令来允许我们现在就执行 Fire Schedule 加上定时任务就可以手动触发他一下。Show schedule result 的意思是可以查看一下目前所有将要执行的定时任务以及他的执行的状态,可以看到,他在等待被调度这个等待应该不会很久,一分钟左右它就会开始调度这个定时任务好,他已经进入一个 running 状态了。现在已经是一个 success的状态,然后他开始时间跟结束时间是这个 time,然后这边 mark 中有一个信息。可以发现他后面有很多个日期,这些日期其实是指的这是我们 ttl 的时间分区,哪些时间分区被删除掉了。所以这边一共删除的大概十个分区左右,然后这个的表一开始创建的时候应该还是27个分区,那我们现在可以看看他的元数据,现在剩下多少个分区的,他现在只剩下了16个分区了,那最早的分区是一号过期,这就是天天配套的一个定时任务的功能,当然这个定时任务其实如果不想要的话,也可以把它删掉。这时候再去查那个定时任务的视图的话,就会发现已经没有定时任务在这里,介绍完了那条表的如何创建?如何去做一个分区的管理以及定时任务自动的来帮我们做件这件事情之后。

我们最后介绍一下 gl 表如何去跟普通的表做一个互相之间的转换,这个转换其实也很简单,他他要做的其实就是 alter table 后面跟上 to 的语法,这个表的语法跟你 table 的时候的语法是一模一样的。然后所有的体检表跟补充表以及表跟他自身都是可以进行任意的转换的,他那比如说现在通过这个语法 the order remove local partition,他就可以把这个提调表变成一个普通的表,就是他执行完之后,他就不再按照我们时间分区来进行一个物理掉的划分了,说 for table to order 可以看到他后面已经没有 t 表的那一套有后缀了,那我们就像刚刚说的,可以通过这一个 table 的指令重新把它变成一个人先去掉。

image.png

然后我们把它变成一个 ttl 表之后,我们再看一下它的元数据,看到这边其实他又按照了我的定义所描述的,按照时间做为一个划分了,那 ttl 表的主要功能就是这些。

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
17天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
4月前
|
SQL 关系型数据库 索引
关系型数据库SQLserver插入数据
【7月更文挑战第28天】
42 4
|
4月前
|
缓存 关系型数据库 分布式数据库
PolarDB产品使用问题之有时会读到表中过去已删除的数据,是什么原因
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
1月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云瑶池在2024云栖大会上重磅发布由Data+AI驱动的多模数据管理平台DMS:OneMeta+OneOps,通过统一、开放、多模的元数据服务实现跨环境、跨引擎、跨实例的统一治理,可支持高达40+种数据源,实现自建、他云数据源的无缝对接,助力业务决策效率提升10倍。
|
2月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云数据库重磅升级!元数据服务OneMeta + OneOps统一管理多模态数据
|
3月前
|
存储 SQL Cloud Native
揭秘!PolarDB-X存储引擎如何玩转“时间魔术”?Lizard多级闪回技术让你秒回数据“黄金时代”!
【8月更文挑战第25天】PolarDB-X是一款由阿里巴巴自主研发的云原生分布式数据库,以其高性能、高可用性和出色的可扩展性著称。其核心竞争力之一是Lizard存储引擎的多级闪回技术,能够提供高效的数据恢复与问题诊断能力。本文通过一个电商公司的案例展示了一级与二级闪回技术如何帮助快速恢复误删的大量订单数据,确保业务连续性不受影响。一级闪回通过维护最近时间段内历史数据版本链,支持任意时间点查询;而二级闪回则通过扩展数据保留时间并采用成本更低的存储方式,进一步增强了数据保护能力。多级闪回技术的应用显著提高了数据库的可靠性和灵活性,为企业数据安全保驾护航。
44 1
|
3月前
|
关系型数据库 分布式数据库 数据库
基于PolarDB的图分析:通过表格将数据快速导入到图
本文介绍了使用 PolarDB PostgreSQL兼容版的AGE插件时,在大数据量下,快速导入数据的方法。可以快速将图数据库中亿级以上的节点和边快速导入到数据库中,避免了插入边时进行查询带来的性能瓶颈。
|
3月前
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
256 0
|
4月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之在执行ALTER TABLE语句后,备份数据的物理空间占用增加,是什么原因
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
SQL 关系型数据库 数据库