冷数据归档

最近更新时间:2026-06-30 16:45:32

我的收藏

功能介绍

在业务持续运营过程中,订单、流水、日志、审计等历史数据规模不断增长,但访问频率随时间显著降低。这类冷数据长期占用本地盘或云盘资源,使存储成本居高不下,仅靠扩容本地存储难以经济地承载长期保留需求。
TDSQL Boundless 团队在 LSM-tree 存储引擎上设计实现了冷数据归档功能,仅需通过控制台开关与简单的 SQL 语句即可将冷数据从本地存储下沉到对象存储(COS),降低数据存储成本,让不同访问特征的数据匹配最合适的存储介质。

核心优势

更低成本:冷数据转储到更低单价的对象存储 COS 后,可大幅减少本地高性能存储的用量,从而大幅降低成本。
透明归档:启用冷数据归档后,归档表对应用透明,支持读取和写入,应用访问冷数据归档表仍使用标准 SQL,无需修改业务代码或中间件配置;用户可通过 DDL 语句指定表/分区归档冷存储,冷数据归档过程清晰可追踪。
平滑访问:频繁访问读写的热数据仍保留在本地高性能存储中,保持不变。冷数据归档表写入数据时,优先落本地缓冲异步上传 COS,不影响写入延迟;冷数据归档表读取数据时,读请求会先经本地缓存命中再回源对象存储 COS,未命中场景下查询时延较热数据略高,更适合低频、批量、报表类访问场景。
更高容量:冷数据存储在对象存储 COS 上,天然支持海量数据长期保留,容量上限不再受单节点本地高性能存储的规格限制。
数据可靠性:冷数据落 COS 后由对象存储承载持久化与多副本能力,不依赖本地存储,本地存储故障不影响冷数据的可访问性与完整性。

支持版本

说明:
冷数据归档功能为 V21.6.3.0 版本的实验特性,当前阶段仅支持满足需求的部分实例开启。
暂不支持 Serverless 实例;仅支持内核版本 V21.6.3.0 及以上的预置资源实例开启。
暂不支持单 RG 模式,即节点规格 4C 以下的实例(包括 4C 8GB)无法开启冷数据归档;仅支持节点规格 4C 以上的实例开启。
暂不支持本地盘实例;仅支持增强型 SSD 云硬盘实例开启。
暂不支持单副本实例;仅支持全功能型副本数为多副本或是多可用区部署实例开启。
暂不支持开启 TDE 透明数据加密的实例;仅支持未开启 TDE 透明数据加密的实例开启。
暂不支持建立灾备关系的实例,即灾备关系中的主实例与灾备只读实例都不支持开启冷数据归档功能;仅支持普通实例开启。
暂不支持 HBase 兼容模式;仅支持 MySQL 兼容模式。
仅支持运行中实例开启。

适用场景

冷数据归档功能用于将访问频率极低的历史数据下沉到对象存储,以降低长期存储成本。尤其适合:历史数据归档(订单、流水、日志、审计等需要长期保存的数据),分区表滚动转冷(按天/周/月分区,将近期分区保留在本地、历史分区逐步转冷),冷热混合存储(同一张分区表中热分区与冷分区分别使用不同存储层级),低频查询表(数据保留周期长、偶尔查询、对实时性要求相对较低的业务表)场景。该功能不适合存储持续高频的随机读写的业务,或者对查询时延高度敏感的业务。
说明:
冷数据归档功能为 V21.6.3.0 版本的实验特性,当前阶段存在以下使用限制,该功能将逐步完善,敬请期待。
暂不支持冷数据转热(数据回暖),即不支持将已落冷的表或分区重新迁回原引擎。
暂不支持自动识别冷数据,并进行自动落冷。
暂不支持备份恢复,COS 冷热分层特性开启后,不支持实例的备份恢复,也不支持创建灾备实例。
暂不支持通过 Bulk Load 批量加载数据,也不支持 LOAD DATA INFILE 方式导入数据。
暂不支持建表语法 CREATE TABLE ... AS SELECT ... FROM ...
暂不支持对冷表进行 Fast Online DDL,仅支持部分有限 Online DDL(支持走 thomas write 链路的 Online DDL 操作)。
暂不支持开启 KV 分离特性。如果本地已经开启 KV 分离,数据将无法转冷到 COS。
暂不支持开启大事务特性。
暂不支持开启 TDE 透明加密特性。
暂不支持实例调整可用区,调整副本数、迁移变配、水平缩容(缩容节点数、缩容磁盘空间)。
暂不支持冷 RG 的分裂、合并、迁移等调度任务。

工作原理

冷数据归档在原有热数据存储(DataDB)基础上,新增冷数据本地缓冲层 CacheDB 和冷数据对象存储层 DurableDB。所有读写请求统一由 SQL 接入层下发,根据数据所属复制组的冷热属性分流到对应存储层。整体架构如下图所示。

DataDB(热):使用本地 SSD 盘或高性能云盘承载未转冷的数据,读写性能与未启用冷数据归档时一致。
CacheDB(冷缓冲):节点内由所有冷数据分片共享,承接冷数据归档表近期写入与正在上传 COS 的数据,写入路径不直接依赖远端 COS。
DurableDB(冷归档):以复制组(Replication Group)为单位将冷数据持久化到 COS,是冷数据的最终归属地。
本地高性能存储负责更低时延、更高性能的读写体验;对象存储负责更低成本、更高弹性的容量承载,二者协同兼顾性能与成本。

冷数据读写

说明:
冷数据从对象存储拉取会引入一定的网络传输和反序列化开销,查询延迟较本地热数据有所增加,建议用于偶发性查询或离线分析场景。
归档表在转冷期间新增的写入会先落本地缓冲,再异步上传到对象存储,对应用呈现为同步写入。
冷数据写入采用“先本地、后远端”的流程:写入请求会先进入本地缓冲层(CacheDB),落盘形成 SST 文件,再异步攒批 SST 上传到对象存储层(DurableDB),总体对应用呈现为同步写入。上传成功后的 SST 文件在 CacheDB 中会被异步清除。冷数据读取采用“先查本地,再查远端”的流程:
系统会按本地缓冲层数据(CacheDB) + 对象存储层数据(DurableDB)的顺序合并视图,对应用返回完整、最新的结果。最近写入的数据通常优先在 CacheDB 中命中,历史全量数据由 DurableDB 承载。当需要读取 DurableDB 中的 SST 数据文件时,会先拉取到本地,并放入本地的 COS file cache 中,从而加速下一次访问。

转冷流程

通过执行 ALTER TABLE ... STORAGE_TIER = OBJECT_STORAGE 对表或分区触发转冷。系统按以下顺序推进:
阶段
阶段
说明
1
Validating
校验目标对象、当前分片状态与依赖参数
2
DrainingTransactions
等待本分片上的活跃事务安全收尾
3
Preparing
准备转冷上下文,将分片置为"转冷中"状态
4
ExportingSnapshot
从热数据存储中导出快照数据文件
5
Uploading
将快照数据文件分批上传到 COS,并实时刷新进度
6
Committing
转冷结果提交,将分片正式标记为冷分片
7
Done
任务结束
转冷期间对转冷表的写入请求会双写进入 DataDB 和 CacheDB,保证数据完整性:转冷成功则数据已写入 CacheDB,转冷失败回退到热存储则数据保留在 DataDB。

使用方式

冷数据归档提供了全新的 STORAGE_TIER 属性,在控制台实例详情页开启数据归档开关后,可通过 ALTER TABLE ... STORAGE_TIER = OBJECT_STORAGE 语句将表或分区转为冷存储。更详细信息参见 开启冷数据归档手动归档冷数据

参数说明

通过 SHOW STATUS 可以查看当前节点上分层存储服务及对象存储接入的运行状态:
状态变量
说明
tdstore_tiered_storage_service_state
冷热分层存储服务状态,启用时返回 tdstore_tiered_storage_enabled
tdstore_tiered_storage_cos_provider_state
对象存储接入状态,启用时返回 enabled 及对应配置摘要
查询示例:
SHOW STATUS LIKE 'tdstore_tiered_storage_service_state';
SHOW STATUS LIKE 'tdstore_tiered_storage_cos_provider_state';