SR 冷热数据分离

最近更新时间: 2026-03-13 09:03:00

简要介绍

在大数据业务场景中,数据访问通常具有明显的时效性特征:近期数据(如最近一周或一个月)被频繁查询和更新,属于高价值的热数据;而历史久远的数据访问频率极低,称为冷数据。为兼顾查询性能与存储成本,冷热数据分层存储成为主流解决方案。TBDS-SR作为大数据平台的存储计算组件,支持基于时间策略的自动化数据分层管理。通过将热数据存储在SSD、冷数据自动迁移至HDD,TBDS-SR可在保障关键业务查询性能的同时,显著降低整体存储成本。该功能特别适用于日志分析、实时数仓、用户行为分析等具有强时间序列特征的业务场景。

属性说明

设置初始存储介质和自动存储降冷时间

PROPERTIES (
    "storage_medium" = "[SSD|HDD]",
    { "storage_cooldown_ttl" = "<num> { YEAR | MONTH | DAY | HOUR } "
    | "storage_cooldown_time" = "yyyy-MM-dd HH:mm:ss" }
)
  • storage_medium:初始存储介质,可以设置为 SSD 或 HDD。确保您明确指定的存储介质类型与 BE 静态参数 storage_root_path 为您的 StarRocks 集群指定的 BE 磁盘类型一致。

    如果 FE 配置项 enable_strict_storage_medium_check 设置为 true,系统在创建表时严格检查 BE 磁盘类型。如果您在 CREATE TABLE 中指定的存储介质与 BE 磁盘类型不一致,则返回错误 "Failed to find enough host in all backends with storage medium is SSD|HDD.",并且表创建失败。
    如果 enable_strict_storage_medium_check 设置为 false,系统会忽略此错误并强制创建表。但是,加载数据后,集群磁盘空间可能会分布不均。

    如果未明确指定 storage_medium,系统会根据 BE 磁盘类型自动推断存储介质。

    • 在以下场景中,系统会自动将此参数设置为 SSD:
      • BEs 报告的磁盘类型(storage_root_path)仅包含 SSD。
      • BEs 报告的磁盘类型(storage_root_path)同时包含 SSD 和 HDD。请注意,当 BEs 报告的 storage_root_path 同时包含 SSD 和 HDD 且属性 storage_cooldown_time 被指定时,系统会将 storage_medium 设置为 SSD。
    • 在以下场景中,系统会自动将此参数设置为 HDD:
      • BEs 报告的磁盘类型(storage_root_path)仅包含 HDD。
      • 当 BEs 报告的 storage_root_path 同时包含 SSD 和 HDD 且属性 storage_cooldown_time 未指定时,系统会将 storage_medium 设置为 HDD。
  • storage_cooldown_ttlstorage_cooldown_time:自动存储降冷时间或时间间隔。自动存储降冷是指将数据从 SSD 自动迁移到 HDD。此功能仅在初始存储介质为 SSD 时有效。

    • storage_cooldown_ttl:此表中分区的自动存储降冷的时间间隔。如果您需要保留最近的分区在 SSD 上,并在一定时间间隔后自动将较旧的分区降冷到 HDD,可以使用此参数。每个分区的自动存储降冷时间是使用此参数的值加上分区的上限时间计算的。

    支持的值为 <num> YEAR<num> MONTH<num> DAY<num> HOUR<num> 是一个非负整数。默认值为 null,表示不自动执行存储降冷。

    例如,您在创建表时将值指定为 "storage_cooldown_ttl"="1 DAY",并且存在范围为 [2023-08-01 00:00:00,2023-08-02 00:00:00) 的分区 p20230801。此分区的自动存储降冷时间为 2023-08-03 00:00:00,即 2023-08-02 00:00:00 + 1 DAY。如果您在创建表时将值指定为 "storage_cooldown_ttl"="0 DAY",则此分区的自动存储降冷时间为 2023-08-02 00:00:00

    • storage_cooldown_time:表从 SSD 降冷到 HDD 的自动存储降冷时间(绝对时间)。指定的时间需要晚于当前时间。格式:"yyyy-MM-dd HH:mm:ss"。当您需要为指定分区配置不同的属性时,可以执行 ALTER TABLE ... ADD PARTITIONALTER TABLE ... MODIFY PARTITION

参考指南

要基于TBDS-SR实现冷热数据管理,需完成存储介质配置与表/分区策略设置两步核心操作。

1. 配置存储介质

在BE节点的be.conf配置文件中,通过storage_root_path参数显式声明各存储路径的介质类型。示例如下:

storage_root_path = /data1,medium:HDD;/data2,medium:SSD;/data3

该配置定义了三个存储路径:

  • /data1:指定为HDD存储;
  • /data2:指定为SSD存储;
  • /data3:未指定介质,默认使用HDD。

配置完成后重启BE节点,系统将根据此配置进行数据分布与迁移。

说明:

在TBDS-SR【集群部署】阶段。选择【高级设置】可以界面化配置存储介质。

2. 建表与分区策略设置示例

方式1:创建分区表时统一设置冷热策略
CREATE TABLE part_exp (
    c1 INT,
    c2 INT,
    c3 DECIMAL(10,2),
    c4 DATETIME NOT NULL,
    c5 DECIMAL(18,2) SUM DEFAULT "0"
) AGGREGATE KEY(c1,c2,c3,c4)
PARTITION BY RANGE(c4) (
    PARTITION p1 VALUES LESS THAN ("2022-01-01"),
    PARTITION p2 VALUES LESS THAN ("2022-01-02"),
    PARTITION p3 VALUES LESS THAN ("2022-01-03")
)
DISTRIBUTED BY HASH(c1) BUCKETS 8
PROPERTIES (
    "replication_num" = "1",
    "storage_medium" = "SSD",
    "storage_cooldown_time" = "2023-01-01 23:59:59"
);

该语句创建的表中所有分区初始存储在SSD上,当系统时间超过2023-01-01 23:59:59后,数据将自动迁移至HDD。

方式2:为不同分区设置独立冷却时间

CREATE TABLE part_exp_1 (
    c1 INT,
    c2 INT,
    c3 DECIMAL(10,2),
    c4 DATETIME NOT NULL,
    c5 DECIMAL(18,2) SUM DEFAULT "0"
) AGGREGATE KEY(c1,c2,c3,c4)
PARTITION BY RANGE(c4) (
    PARTITION p1 VALUES LESS THAN ("2022-01-01"),
    PARTITION p2 VALUES LESS THAN ("2022-01-02") ("storage_medium"="SSD", "storage_cooldown_time" = "2023-01-01 23:59:59"),
    PARTITION p3 VALUES LESS THAN ("2022-01-03") ("storage_medium"="SSD", "storage_cooldown_time" = "2024-01-01 23:59:59")
)
DISTRIBUTED BY HASH(c1) BUCKETS 8
PROPERTIES (
    "replication_num" = "1"
);

方式3:动态分区表自动启用冷热管理

CREATE TABLE part_exp_2 (
    c1 INT,
    c2 INT,
    c3 DECIMAL(10,2),
    c4 DATETIME NOT NULL,
    c5 DECIMAL(18,2) SUM DEFAULT "0"
) AGGREGATE KEY(c1,c2,c3,c4)
PARTITION BY RANGE(c4) (
    PARTITION p1 VALUES LESS THAN ("2022-08-26"),
    PARTITION p2 VALUES LESS THAN ("2022-08-27"),
    PARTITION p3 VALUES LESS THAN ("2022-08-28")
)
DISTRIBUTED BY HASH(c1) BUCKETS 8
PROPERTIES (
    "replication_num" = "1",
    "dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.start" = "-60",
    "dynamic_partition.end" = "1",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "8",
    "storage_medium" = "SSD",
    "storage_cooldown_time" = "2024-01-01 23:59:59"
);

前提:需在fe.conf中设置 default_storage_medium=SSDstorage_cooldown_second=2592000(30天),以确保动态创建的分区自动继承冷热策略。

方式4:修改已有分区策略

-- 修改分区p3的冷却时间
ALTER TABLE part_exp MODIFY PARTITION p3 SET(
    "storage_medium" = "SSD",
    "storage_cooldown_time" = "2023-03-11 10:29:01"
);

-- 新增分区并指定冷热策略
ALTER TABLE part_exp ADD PARTITION p4 VALUES LESS THAN ("2022-01-04") (
    "storage_medium" = "SSD",
    "storage_cooldown_time" = "2023-03-11 10:29:01"
);

最佳实践

  1. 合理设置冷却时间:根据业务访问规律设定storage_cooldown_time,例如将最近7天数据保留在SSD,30天后迁移至HDD。对于长期高频访问的维度表,可设置远期时间(如2030年)避免被冷却。
  2. 动态分区结合默认策略:在使用动态分区时,建议在fe.conf中将default_storage_medium=SSD,并配合表级storage_mediumstorage_cooldown_time确保新分区自动进入冷热管理流程。
  3. 灰度验证与监控:首次启用冷热策略时,建议先在非核心表或分区进行测试,观察数据迁移对集群IO的影响。通过TBDS-SR监控界面跟踪迁移任务状态、完成率及资源占用情况。
  4. 定期审计存储分布:使用 SHOW PARTITIONS FROM table_name 检查各分区的StorageMediumCooldownTime,确保策略按预期执行。
  5. 避免主键模型限制:目前主键模型不支持tablet跨磁盘迁移,无法实现冷热分区自动迁移,建议在需要冷热分离的场景优先使用聚合表或更新模型。

用法说明

  • 自动存储降冷相关参数之间的比较如下:
    • storage_cooldown_ttl:一个表属性,指定表中分区的自动存储降冷的时间间隔。系统会在 此参数的值加上分区的上限时间 时自动降冷分区。因此,自动存储降冷在分区粒度上执行,更加灵活。
    • storage_cooldown_time:一个表属性,指定此表的自动存储降冷时间(绝对时间)。此外,您可以在创建表后为指定分区配置不同的属性。
    • storage_cooldown_second:一个静态 FE 参数,指定集群内所有表的自动存储降冷延迟。
  • 表属性 storage_cooldown_ttlstorage_cooldown_time 优先于 FE 静态参数 storage_cooldown_second
  • 配置这些参数时,需要指定 "storage_medium = "SSD"
  • 如果您不配置这些参数,则不会自动执行自动存储降冷。
  • 执行 SHOW PARTITIONS FROM <table_name> 查看每个分区的自动存储降冷时间。

使用限制

  • 不支持表达式和 List 分区。
  • 分区列需要是日期类型。
  • 不支持多个分区列。
  • 不支持主键表。
  • 不支持表达式和 List 分区。
  • 分区列需要是日期类型。
  • 不支持多个分区列。
  • 不支持主键表。