本文档介绍如何为 Lindorm 表配置冷热分离与 TTL 策略,以实现自动化的数据生命周期管理。
注意事项
Lindorm列存引擎的冷热分离和TTL功能目前处于邀测阶段,如需体验该功能,请联系Lindorm技术支持(钉钉号:s0s3eg3)开启。
使用限制
在开始配置前,请务必了解以下机制:
冷热分离与TTL均为分区级别,仅支持枚举时间分区。
整个分区过期后才会删除该分区的全部数据。
冷热转换和TTL清理均为异步执行。
冷热分离
在数据管理时,为优化成本与性能,通常会选择将高频访问的数据存储在高性能介质上,而对于长时间未访问的历史数据,则希望将其迁移到低成本的存储介质中。Lindorm 列存引擎支持三级冷热分层解决方案(从热到冷分别为L1、L2和L3),可以根据业务需求灵活制定列存数据的冷热转换策略。通过数据湖服务自动完成数据在冷热介质之间的自动转储,帮助您有效管理存储成本而不牺牲关键业务的响应速度。
参数说明
您可以通过在创建列存表时定义CHS(Cold or Hot Storage)属性,以列存表的时间分区为粒度,定义数据冷热转储。配置CHS的参数说明如下:
参数 | 说明 |
CHS | 冷热分离阈值(秒)。单个值为两层分离,两个值(逗号分隔)为三层分离,详见分层策略说明。 |
CHS_L1 | L1层存储介质,默认为容量型云存储。格式: 请根据实例类型选择对应的存储介质:
说明
|
CHS_L2 | L2层存储介质,必填项,格式同CHS_L1。 |
CHS_L3 | L3层存储介质,格式同CHS_L1。 若CHS参数为两个长整数时,CHS_L3参数必须配置。 |
CHS_EXP | 时间提取表达式,参数格式如下:
toSec系统函数能够计算出对应时间分区范围的最大数据时间。
Lindorm会基于CHS_EXP获取时间分区的最大数据时间,结合CHS中定义的时间阈值范围,将分区数据转储到相应的分层介质。 |
分层策略说明
分层模式 | CHS配置 | 数据分布规则 |
两层分离 | 单个阈值,如 |
|
三层分离 | 两个阈值,如 |
说明 阈值1必须小于阈值2。 |
说明:阈值单位为秒,表示分区数据时间距离当前时间的差值。
示例说明
示例一
创建表
table0,按年,月,日三个字段分区,字段名称为year,month,day。定义冷热分层策略为:1个月(2592000秒)以前的数据自动转储到容量型云存储。建表语句如下:CREATE TABLE table0 ( col0 INT, `year` VARCHAR, `month` VARCHAR, `day` VARCHAR ) PARTITION BY LIST (`identity`(`year`),`identity`(`month`),`identity`(`day`)) WITH ( EngineType = 'COLUMN', CHS = '2592000', CHS_L1 = 'storagetype=STANDARD_CLOUD_STORAGE', CHS_L2 = 'storagetype=CAPACITY_CLOUD_STORAGE', CHS_EXP = 'toSec(year,yyyy,month,MM,day,dd)' );示例二
修改
table0冷热分层策略为:1个月(2592000秒)以前的数据自动转储到容量型云存储,超过3个月(5184000秒)后自动转储到归档型存储,其他规则不变。更新表语句如下:ALTER TABLE table0 SET CHS='2592000,5184000', CHS_L2='storagetype=CAPACITY_CLOUD_STORAGE', CHS_L3='storagetype=CLOUD_ARCHIVE_STORAGE', CHS_EXP='toSec(year,yyyy,month,MM,day,dd)';示例三
创建
table1,按天分区,字段名为dt,形如:2020/12/1。定义冷热分层策略为:1个月(2592000秒)以前的数据自动转储到容量型云存储,超过3个月(5184000秒)后自动转储到归档型存储。建表语句如下:CREATE TABLE table1 ( col0 INT, dt VARCHAR ) PARTITION BY LIST (`identity`(dt)) WITH ( EngineType = 'COLUMN', CHS='2592000,5184000', CHS_L2='storagetype=CAPACITY_CLOUD_STORAGE', CHS_L3='storagetype=CLOUD_ARCHIVE_STORAGE', CHS_EXP='toSec(dt,yyyy/MM/dd)' );示例四
查看冷热分离相关属性。
SHOW TABLE VARIABLES FROM table0 like 'CHS%';
注意事项
在创建表时,您可以指定CHS参数。如果后续需要更改冷热分层策略,可以通过执行
ALTER TABLE ......语句来调整配置。错误的CHS配置不会影响表创建与更新,但会导致无法自动触发冷热介质转换功能。
数据的冷热转储过程是通过异步方式触发的。在整个转储过程中及完成后,数据访问均不受影响,但基于不同存储介质,访问性能可能会有所变化。
仅支持基于列存表的时间分区来实现数据冷热分层策略,暂不支持其他方式。
在设置对应存储介质前请确认您的实例已经开通对应的存储类型。
TTL
用户可以为列存数据配置TTL(time to live)参数,来实现定期清理过期分区的功能。
参数说明
参数 | 参数说明 |
TTL | 配置该参数即表示开启分区过期功能。该值为长整数(秒), 表示如果分区数据时间距离当前时间大于该阈值,则判断为过期分区并进行清除。 比如 |
TTL_MODE | 分区数据时间提取方式。推荐使用 |
TTL_EXP | 时间提取表达式,参数格式如下:
toSec系统函数能够计算出对应时间分区范围的最大数据时间。
Lindorm 数据湖服务会基于TTL_EXP获取时间分区的最大数据时间,结合TTL中定义的时间阈值范围,判断目标分区是否已过期。 |
示例说明
示例一
创建表
table0,按年,月,日三个字段分区,字段名称为year,month,day。定义分区过期规则为:1个月(2592000秒)以前的数据自动清除,根据用户配置提取时间。建表语句如下:CREATE TABLE table0 ( col0 int, `year` VARCHAR, `month` VARCHAR, `day` VARCHAR ) PARTITION BY LIST (`identity`(`year`), `identity`(`month`), `identity`(`day`)) WITH ( EngineType = 'COLUMN', TTL='2592000', TTL_MODE='specified', TTL_EXP='toSec(year, yyyy, month, MM, day, dd)' );示例二
创建
table1, 按天分区,分区字段名为dt,形如:2020/12/1。定义分区过期规则为:1个月(2592000秒)以前的数据自动清除,根据用户配置提取时间。建表语句如下:CREATE TABLE table1 ( col0 int, dt VARCHAR ) PARTITION BY LIST (`identity`(dt)) WITH ( EngineType = 'COLUMN', TTL='2592000', TTL_MODE='specified', TTL_EXP='toSec(dt, yyyy/MM/dd)' );示例三
对已存在表增加TTL能力。
ALTER TABLE table1 SET TTL='2592000', TTL_MODE='specified', TTL_EXP='toSec(dt, yyyy-MM-dd)';示例四
查看TTL相关属性。
SHOW TABLE VARIABLES FROM table0 like 'TTL%';
注意事项
建表时您可指定TTL参数,当数据过期时间变化时,可使用
ALTER TABLE ...语句更新配置。错误的TTL配置不会影响表创建与更新,但会导致分区删除功能无法自动执行。
分区过期策略必须基于列存表的时间分区实现,暂不支持其他方式。