最近更新时间:2023.10.20 16:39:35
首次发布时间:2023.08.07 18:03:42
ByteHouse支持冷热数据分层存储,以达到节省存储成本的目的。
在 ByteHouse 中,热数据采用 SSD 磁盘,成本高;而冷数据查询频率较低,则可以使用更低性能、更低成本的存储介质,具体使用差异如下:
数据类型 | 存储方式 | 创建方式 | 计费方式 |
---|---|---|---|
热数据 | 本地存储 | 建集群时选择的存储空间,磁层介质为 SSD 云盘。 | 包年包月计费 |
冷数据 | 冷存储 | 需要额外开通,底层介质为对象存储 ToS。 | 后付费 |
根据场景不同,支持三种冷热数据移动策略。
冷存储使用对象存储服务,可以使成本大大降低,但性能远低于本地存储。
请根据使用场景来判断是否需要使用冷存储。
综合上述限制,冷存储使用的最佳实践为:
热存储、冷存储分开计费,会生成不同的订单。
热存储为预付费,若中止续费请参考到期处理;
冷存储目前每天出账,出具账单后实时结算扣款,若欠费请参考 欠费处理。
给集群开启冷存储的方式包括:
权限要求:火山引擎的 BillFullAccess 权限(详见 策略管理);
开通步骤:
权限要求:集群管理员,或系统管理员;
开通步骤:
集群开通了冷存储后,需要在建表时指定存储策略,数据表内的数据才会按照开通冷存时配置的策略移动数据。
权限要求:对库有 Create 权限的用户。
开启冷存并配置了冷热数据移动规则后后,系统会自动添加一个 s3_cold
的存储策略,在建表时,需要在 settings 中指定这个存储策略,数据表新建完成后,会按照在开启冷存时配置的规则进行数据移动。示例如下:
CREATE TABLE example_table on cluster xxxx ( d Date, a Int ) ENGINE = HaMergeTree(...) PARTITION BY d ORDER BY d SETTINGS index_granularity = 8192, storage_policy = 's3_cold';
若不指定存储策略,数据表仍然会全部存储于本地存储。
当配置了存储策略时,则可以配置多级 TTL。
时间点1(如示例中,2 周后)会将数据转存到冷存储(DISK = 'cold_storage')
时间点2(如示例中,1 个月后)会将数据彻底删除。
示例如下:
CREATE TABLE example_table on cluster xxxx ( d Date, a Int ) ENGINE = HaMergeTree(...) PARTITION BY d ORDER BY d TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 2 WEEK TO DISK 'cold_storage' SETTINGS index_granularity = 8192, storage_policy = 's3_cold';
若如此配置,多级 TTL 和移动因子策略会同时生效。即数据满足了 TTL 的移动条件,或者冷热因子的移动条件后,都会发起热数据向冷数据的移动。
HaUniqueMergeTree 为 ByteHouse 的自研引擎,开通冷存储后,需注意以下事项:
ban_parts_mover_when_create_unique_replica = 1
,并参照“最佳实践”进行操作。skip_merge_for_unique_data_in_remote_disk = 1
);如果有必要允许这部分数据进行Merge操作,需要在建表时指定参数skip_merge_for_unique_data_in_remote_disk = 0
。在冷存储上 Merge 性能会比较差,请谨慎配置。示例:
CREATE TABLE example_table on cluster xxxx ( d Date, a Int ) ENGINE = HaUniqueMergeTree(...) PARTITION BY d ORDER BY d TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 2 WEEK TO DISK 'cold_storage' SETTINGS index_granularity = 8192, storage_policy = 's3_cold' skip_merge_for_unique_data_in_remote_disk = 1, ban_parts_mover_when_create_unique_replica = 1;
通过可视化建表,会自动生成建表 SQL,无需手动指定 storage_policy,指定配置参数等。
权限要求:数据工程师,集群管理员,或系统管理员;
操作步骤:
开通了冷存储后,如果不修改存量表的存储策略,则数据表内的数据不会按照开通冷存时配置的策略移动数据。因此需要通过修改表的存储策略、TTL设置,来达到让数据表应用冷存储规则的目标。
注意
HaUniqueMergeTree 暂不支持表存储策略与 TTL 的修改。
目前仅能通过新建一张表,并insert into ... select...
的方式,将旧表的数据重新导入新表。
操作描述:通过 Alter 命令,可修改表的存储策略与 TTL。
权限要求:对表有 Alter 权限的用户。
SQL 示例:
ALTER TABLE table_name ON cluster xxxx MODIFY SETTING storage_policy = 'hot_to_cold'; -- 修改存储策略 ALTER TABLE table_name ON cluster xxxx MODIFY TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 2 WEEK TO DISK 'cold_storage'; -- 修改 TTL 策略
注意
在修改存储策略 / TTL后,数据不会立刻移动,只有之后插入数据才会应用规则。如果希望对存量数据进行调整,请参考“手动移动分区”章节。
通过可视化界面,编辑表的存储策略与 TTL 策略。
权限要求:数据工程师,集群管理员,或系统管理员;
操作步骤:
通过可视化方式查看本地存储、冷存储的用量趋势,便于分析和决策。
权限要求:集群管理员、系统管理员。
操作步骤:
通过 Alter 命令来完成移动分区的操作,适用于移动分区到冷存储。
权限要求:对表有 Alter 权限的用户。
注意
HaUniqueMergeTree 暂不支持移动分区到冷存储的功能。
基本语法
ALTER db_name.table_name MOVE PARTITION 'partition_name' TO 'cold_storage'
SQL 示例:
ALTER TABLE table_name ON cluster xxxx MODIFY SETTING storage_policy = 's3_cold'; -- 在移动前,需要确保设置了存储策略,如未修改则用以上命令更换存储策略 SELECT partition FROM system.parts WHERE table = 'table_name' GROUP BY partition -- 取得分区名 ALTER db_name.table_name MOVE PARTITION 'partition_name' TO 'cold_storage'; -- 移动分区到冷存储