Help us learn about your current experience with the documentation. Take the survey.
ClickHouse 中的分层存储
ClickHouse 中的 MergeTree 表引擎支持分层存储。 有关设置和进一步说明的详细信息,请参阅 使用多个块设备进行数据存储 的文档。
引用 MergeTree 文档 中的内容:
MergeTree 系列表引擎可以将数据存储在多个块设备上。例如, 当某个表的数据隐式地分为"热"和"冷"时,这会很有用。 最新的数据经常被请求,但只需要少量的存储空间。 相反,胖尾历史数据很少被请求。
当与 Amazon S3 等远程存储后端一起使用时, 这形成了一种非常高效的存储方案。它支持存储策略, 允许数据在本地磁盘上保留一段时间,然后将其移动到对象存储中。
一个 示例配置 如下所示:
<storage_configuration>
<disks>
<fast_ssd>
<path>/mnt/fast_ssd/clickhouse/</path>
</fast_ssd>
<gcs>
<support_batch_delete>false</support_batch_delete>
<type>s3</type>
<endpoint>https://storage.googleapis.com/${BUCKET_NAME}/${ROOT_FOLDER}/</endpoint>
<access_key_id>${SERVICE_ACCOUNT_HMAC_KEY}</access_key_id>
<secret_access_key>${SERVICE_ACCOUNT_HMAC_SECRET}</secret_access_key>
<metadata_path>/var/lib/clickhouse/disks/gcs/</metadata_path>
</gcs>
...
</disks>
...
<policies>
<move_from_local_disks_to_gcs> <!-- policy name -->
<volumes>
<hot> <!-- volume name -->
<disk>fast_ssd</disk> <!-- disk name -->
</hot>
<cold>
<disk>gcs</disk>
</cold>
</volumes>
<move_factor>0.2</move_factor>
<!-- The move factor determines when to move data from hot volume to cold.
See ClickHouse docs for more details. -->
</moving_from_ssd_to_hdd>
....
</storage_configuration>在此存储策略中,定义了两个卷 hot 和 cold。当 hot 卷的占用率达到 disk_size * move_factor 后,数据将被移动到 Google Cloud Storage (GCS)。
如果此存储策略不是默认策略,可以通过附加存储策略来创建表。例如:
CREATE TABLE key_value_table (
event_date Date,
key String,
value String,
) ENGINE = MergeTree
ORDER BY (key)
PARTITION BY toYYYYMM(event_date)
SETTINGS storage_policy = 'move_from_local_disks_to_gcs'在此存储策略中,移动是隐式发生的。也可以将 热 数据在本地磁盘上保留固定时间,然后将它们作为 冷 数据移动。
这种方法可以通过 表 TTL 实现, MergeTree 表引擎也支持此功能。
ClickHouse 文档在 实现热-温-冷架构 的示例中详细展示了此功能。
对于上面显示的示例,可以采用类似的方法。首先调整存储策略:
<storage_configuration>
...
<policies>
<local_disk_and_gcs> <!-- policy name -->
<volumes>
<hot> <!-- volume name -->
<disk>fast_ssd</disk> <!-- disk name -->
</hot>
<cold>
<disk>gcs</disk>
</cold>
</volumes>
</local_disk_and_gcs>
....
</storage_configuration>然后按如下方式创建表:
CREATE TABLE another_key_value_table (
event_date Date,
key String,
value String,
) ENGINE = MergeTree
ORDER BY (key)
PARTITION BY toYYYYMM(event_date)
TTL
event_date TO VOLUME 'hot',
event_date + INTERVAL 1 YEAR TO VOLUME 'cold'
SETTINGS storage_policy = 'local_disk_and_gcs';这样创建的表会将超过 1 年的数据(基于 event_date 列评估)移动到 GCS。这种存储策略对于仅访问最新数据的追加表(如审计事件)很有用。
您也可以完全删除数据,这可能是监管要求。
本指南中没有提及修改 TTL,但这也是可能的。 有关详细信息,请参阅 ClickHouse 文档中的 修改 TTL。