clickhouse冷热数据分层存储
查询磁盘信息
开通冷热数据分层存储功能后,通过以下查询可以查看热数据盘、冷数据盘信息。
select * from system.disks;
示例返回结果如下:
┌─name──────┬─path───────────────────────────────────┬───────────free_space─┬──────────total_space─┬───used_space─┬─keep_free_space─┐
│ cold_disk │ /clickhouse/data/data/disks/cold_disk/ │ 18446744073709551615 │ 18446744073709551615 │ 115312080698 │ 0 │
│ default │ /clickhouse/data/data/ │ 201663209472 │ 207083249664 │ 5420040192 │ 0 │
└───────────┴────────────────────────────────────────┴──────────────────────┴──────────────────────┴──────────────┴─────────────────┘
参数说明:
- cold_disk:冷数据盘。
- default:热数据盘。
- free_space:表示当前磁盘剩余可用空间。冷数据盘可用空间不受限制。
- total_space:表示当前磁盘总空间。冷数据盘可用空间不受限制。
- used_space:表示当前磁盘已经被使用的空间。
指定存储策略
当前云数据库ClickHouse提供了以下几种方式来指定存储策略。
说明 存储策略一旦指定,后期无法更改。
- 通过磁盘可用空间阈值自动进行分层存储
- 系统已经预置了自动迁移存储策略“hot_to_cold”,在建表时指定即可。表示首先将数据存储在热数据盘中,当热数据存储的剩余空间占比小于move_factor时,自动将最先写入的数据迁移到冷数据存储中,在开通分层存储功能时,需要指定阈值参数“move_factor”。建表示例如下:
CREATE TABLE hot_cold_test_tbl ( `f1` String, `f2` String, `f3` Int64, `f4` Float64, `date` Date ) ENGINE = MergeTree() PARTITION BY date ORDER BY f1 SETTINGS storage_policy = 'hot_to_cold';
- 通过TTL策略进行分层存储
- TTL策略可以结合业务特点,将数据生命周期与冷热数据存储关联起来。实现既保存历史数据,又能够降低存储成本的效果。比如将最近90天的高频查询数据放置在热数据存储中,而90天之前的低频查询数据自动转移到冷数据存储中。
在如下建表示例中,move_factor约束条件、TTL约束条件同时生效,其中之一满足就会触发数据迁移。
CREATE TABLE ttl_test_tbl ( `f1` String, `f2` String, `f3` Int64, `f4` Float64, `date` Date ) ENGINE = MergeTree() PARTITION BY date ORDER BY f1 TTL date + INTERVAL 90 DAY TO DISK 'cold_disk' SETTINGS storage_policy = 'hot_to_cold';
分别查看冷热数据盘上的数据
查看冷数据盘上的数据:
select * from system.parts where database = '<db_name>' and table = '<tbl_name>' and disk_name ='cold_disk' and active = 1;
查看热数据盘上的数据:
select * from system.parts where database = '<db_name>' and table = '<tbl_name>' and disk_name ='default' and active = 1;