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;
 
 
 
posted @ 2021-05-27 13:39  jason_wei  阅读(1120)  评论(0编辑  收藏  举报