为了进一步降低海量数据存储成本,根据业务的使用情况,云数据库ClickHouse提供了冷热数据分层存储的功能,该功能适用于20.8及以上版本。

冷热数据的定义

云数据库ClickHouse冷热数据分层存储是一种更具性价比的单实例多类型并存的数据存储方式,提供热数据存储和冷数据存储两种方式,以及不同数据存储介质之间的转存策略。

热数据指的是实时性查询要求高、访问频次较高的数据,采用ESSD或高效云盘存储,满足高性能访问的需求。

冷数据指的是查询频度相对较低、访问频次较低的数据,采用低价的冷数据存储,满足高性价比的存储需求。

云数据库ClickHouse默认策略将新写入数据存储为热数据,提供高效查询。当热数据存储量达到业务使用阈值时,自动将最早写入部分数据转为冷数据存储,将这部分热数据转化为冷数据,从而释放热数据存储空间。

注意事项

  • 由于不同版本之间数据格式不兼容,暂不支持实例直接升级内核版本。
  • 对于暂时不支持冷热数据分层的版本如果需要使用该功能,要创建20.8.7.15版本的实例,并进行数据迁移。
  • 冷热数据分层存储开通后,暂不支持关闭,可以通过调整数据分层策略调整使用量。

计费

冷数据存储采用按量付费模式。无需提前购买固定的存储空间,先使用,后付费,并按照实际使用的存储空间每小时计费一次,定价为0.0002元/GB/小时。

例如:19:00-20:00使用冷数据存储2000G,总费用为:0.0002×2000=0.4元。20:00-21:00释放了500G冷数据存储空间,实际使用了1500G存储空间,那么20:00-21:00的总费用为:0.0002×1500=0.3元。

开通冷热数据存储

  1. 使用阿里云账号登录ClickHouse控制台
  2. 在页面左上角,选择实例所在的地域。
  3. 集群列表中,单击目标集群的集群ID,进入集群详情页。
  4. 单击左侧导航栏中的冷热分层存储,单击点击开通冷热分层存储,确认开通后会进行实例重启。完成开通后,页面展示默认的分层策略。
  5. 分层策略名称不可修改,默认数据移动因子(move_factor)为0.1,单击参数值旁的编辑按钮可以进行修改,数值限定范围为大于 0,小于等于1 的浮点值。修改移动因子后,单击确定保存。
    说明 分层策略依赖于数据移动因子(move_factor)参数。当热数据可用空闲存储空间比例小于数据移动因子时,自动将最先写入的数据从热数据存储移动到冷数据存储。默认值为 0.1,代表小于10%的可用存储空间时,发生数据移动。

查询磁盘信息

开通冷热数据分层存储功能后,通过以下查询可以查看热数据盘、冷数据盘信息。

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;