冷热数据分层存储
功能概述
创建对象存储策略后,如需使用冷热分离存储数据,将冷热数据分离存储,可在建表时添加语句指定冷热存储策略。冷热存储策略,可基于磁盘容量和 TTL 时间进行配置。
-
基于磁盘容量
当数据盘存储容量达到使用阈值时,自动将最早写入的数据迁移,实现冷热数据的自动分离。建表时支持指定存储数据盘,包括
default默认磁盘或对象存储。 -
基于 TTL 时间
基于 TTL 时间的冷热存储策略,是通过添加 TTL 语句,设置数据存储生命周期,将指点时间之前的所有冷数据进行转移,实现数据的指定时间转移存储。
约束限制
-
添加 TTL 语句后,将优先基于 TTL 时间规则存储,再基于磁盘容量规则存储。
-
不支持修改冷热存储策略参数值。
操作步骤
步骤一:创建对象存储策略
详情可参考创建对象存储策略。
步骤二:配置冷热存储策略
-
基于磁盘容量规则
-
连接数据库。详情参考访问 ClickHouse 数据库。
-
添加冷热存储策略语句如下。
SETTINGS storage_policy = '<策略名称_hot_to_cold>' -
以下示例建表语句,在
ossp_hot_to_cold冷热存储策略上,将数据将先存储在热数据盘default,当热数据盘达到存储阈值,更早的数据将转移到ossp对象存储磁盘。$ echo "CREATE TABLE test.t_local ( EventDate DateTime, CounterID UInt32, UserID UInt32 ) ENGINE = MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate) SETTINGS storage_policy = 'ossp_hot_to_cold'" | curl 'http://<ClickHouse 用户名>:<ClickHouse 密码>@<高可用 IP>:8123/' --data-binary @-
-
-
基于 TTL 时间规则
在基于磁盘容量规则存储基础上,添加 TTL 语句,可将指定时间前冷数据全部迁移。添加 TTL 语句后,系统将优先基于 TTL 时间规则存储,再基于磁盘容量规则存储。
-
连接数据库。详情参考访问 ClickHouse 数据库。
-
添加 TTL 存储语句。
TTL <time_column> + INTERVAL <number> TO DISK '<disk_name>' |TO VOLUME '<volume_name>' SETTINGS storage_policy = '<策略名称_hot_to_cold>'部分参数说明如下,更多 TTL 语句说明,请参见 官方文档。
参数 说明 time_column
日期或日期时间类型的列。只能包含字母、数字、下划线。
number
间隔时间和单位。常用单位包括 Day、Week、Month、Year。
disk_name
将数据片段移动到该磁盘。
volume_name
将数据片段移动到该卷。
-
以下建表语句示例,是以
date为时间列,在ossp_hot_to_cold策略上,将180之前所有数据转移到ossp冷数据盘。$ echo "CREATE TABLE test.t_local ( `date` EventDate DateTime, `f1` CounterID UInt32, `f2` UserID UInt32, ) ENGINE = MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate) TTL EventDate + INTERVAL 180 DAY TO DISK 'ossp' SETTINGS storage_policy = 'ossp_hot_to_cold'" | curl 'http://<ClickHouse 用户名>:<ClickHouse 密码>@<高可用 IP>:8123/' --data-binary @- -
添加 TTL 语句后,可修改
TABLE、TTL、INTERVAL等参数。可参考如下语法,修改 TTL 存储规则。说明 -
更改 TTL 存储策略后,存量数据和新增数据将全部按照新策略进行存储。
-
修改 TTL 存储策略后,已存入冷数据盘中的数据,将不能自动移动到热数据盘。如果需要移动,请参见移动冷热数据盘的数据。
ALTER TABLE <table_name> ON CLUSTER default MODIFY TTL <time_column> + INTERVAL <number> TO DISK '<disk_name>' SETTINGS storage_policy = '<策略名称_hot_to_cold>'部分参数说明如下,更多 TTL 语句说明,请参见 官方文档。
参数 说明 table_name
表名称。
time_column
日期或日期时间类型的列。只能包含字母、数字、下划线。
number
间隔时间和单位。常用单位包括 Day、Week、Month、Year。
disk_name
将数据片段移动该磁盘。
-
-
步骤三:查看存储数据和空间
配置冷热存储策略后,可分别查看冷热数据盘中存储数据,以及查看存储空间使用情况。
-
查看存储数据
-
查看热数据盘上的数据。
$ echo "select * from system.parts where database = '<database_name>' and table = '<table_name>' and disk_name ='default' and active = 1" | curl 'http://<ClickHouse 用户名>:<ClickHouse 密码>@<高可用 IP>:8123/' --data-binary @- -
查看冷数据盘上的数据。
$ echo "select * from system.parts where database = '<database_name>' and table = '<table_name>' and disk_name ='<disk_name>' and active = 1" | curl 'http://<ClickHouse 用户名>:<ClickHouse 密码>@<高可用 IP>:8123/' --data-binary @-
-
-
查看存储空间
执行以下语句,即可查看冷热数据盘空间。
$ echo "select * from system.disks" | curl 'http://<ClickHouse 用户名>:<ClickHouse 密码>@<高可用 IP>:8123/' --data-binary @-
步骤四:删除对象存储策略
详情可参考删除对象存储策略。