本节摘要:数据越积越多拖慢查询。本节讲清楚冷热数据识别、归档策略、冷存储、TTL 管理,让热表保持小而快。
数据随时间增长——订单、日志、历史记录越积越多。全留热表:
冷热分离:
好处:热表小查询快、维护易、备份快、成本降。
热数据:
冷数据:
识别方法:
1. 归档表
2. 分区归档
3. 冷存储
4. 数据仓库
TTL:数据自动过期删除。
TTL 设计:
1. 归档流程自动化
2. 查询透明
3. 归档验证
4. 回查支持
5. 合规留存
热表变小:
归档操作影响:
冷查询:
⚠️ 常见误读:以为"数据全留热表方便查询"。全留热表越大越慢,维护/备份/成本都增。冷热分离让热表小快,冷数据便宜存。
💡 关键直觉:归档冷热分离——数据增长拖慢查询/维护难/备份慢/成本高。识别热(近期频繁访问高价值)/冷(历史少访问低价值),按访问频率/业务规则/存储成本。策略——归档表(历史表同结构,INSERT 迁移+DELETE/DROP PARTITION 删热,UNION/视图跨查)、分区归档(EXCHANGE 到归档表+DROP PARTITION 快)、冷存储(HDD/对象存储 S3/OSS,数据库不直接查需导入或外部表,合规留存)、数据仓库(历史入数仓 OLAP,热库留近期)。TTL(MongoDB/Redis/Cassandra 原生,关系库定时 DELETE 或分区 DROP,按业务定分级)。实践——自动化定时迁移+监控+日志、查询透明(视图 UNION 或应用路由)、归档验证(行数/校验和,删前确认)、回查支持(接口/临时导入/外部表)、合规留存(法规 N 年冷存储)。影响——热表小查询快索引小维护快、归档低峰期(IO 增加/DELETE 产生 undo 需 VACUUM/DROP PARTITION 快)、冷查询慢(跨热冷 UNION 大数据,尽量只查热按时间路由)。
归档看着是"搬数据",工程上有三个决定成败的要点。要点一,删除策略要用低成本方式——归档后的源表清理,逐行删除会产生海量日志与锁竞争,分区表的分区摘除(第 3 章)或分批限速删除是正解;清理窗口与批量大小要写入方案,避免"归档半小时、清理三天"。要点二,冷数据的可查性设计——归档库的表结构与索引按查询模式重新裁剪(冷数据查询通常按时间与少数维度),不必照搬在线库的全套索引;同时给业务方明确的查询路径(在线查近一年、归档查历史),模糊的双查体验会催生"偷偷把冷数据拉回在线"的影子行为。要点三,归档的完整性对账——每次归档跑行数与校验和比对(源减归档等于剩余),差异为零才允许清理源表;这个对账自动化进归档脚本,人工"看起来都对"不算数。三个要点合成一句话:归档是一次数据的新陈代谢,工程目标是无感(在线业务不受扰)、可查(历史随时能取)、无失(数据零丢失)——三者靠的不是勤奋,是方案里的预先设计。
归档章收官谈冷热分层的架构选择,三种形态各有其位。形态一,同库分区(第 3 章的分区即冷热分离的最简形态):热分区在高质量存储、冷分区降级存储,查询与维护统一——适合规模中等、查询模式统一的业务。形态二,独立归档库:历史数据搬入专门的归档实例(可以是廉价硬件甚至列式引擎),在线库轻装上阵——适合在线与历史查询模式差异大的业务(在线按键查、历史按分析扫),代价是查询路径分裂。形态三,分层存储引擎(在线库加分析库加对象存储的湖仓形态):数据按年龄流经多层引擎,每层用最适合的形态服务——适合数据量大、分析需求重的企业级场景,运维复杂度也最高。选型的三问:历史数据的查询频率与模式是什么(决定要不要独立引擎)、团队运维半径多大(决定能养几套系统)、合规保留期多长(决定最冷层的形态)。三种形态没有高下,只有与业务现实的匹配——而"先从最简形态起步、按痛点演进"永远是性价比最高的路径。
归档章补三个合规锚点——它们常常反过来决定技术方案。锚点一,保留期限:行业法规对各类数据的最低保留年限(交易类常见五到十年)决定了归档库的容量规划与介质选择(超长期数据用最廉价耐久的层)。锚点二,可提供性:监管检查时"时限内提供指定数据"的要求决定了冷层查询的响应能力——纯磁带库满足不了七十二小时出数的要求,对象存储加索引才是合格形态。锚点三,可删除性:用户行使删除权(个人信息保护)时要能跨层定位并删除该用户数据——冷层数据的主键索引(哪个用户在哪些归档批次)是必备设施,事后补建等于重新扫描全部历史。三个锚点的共同启示:合规需求要前置进归档设计——等监管来函再改造,每次都是项目级工程;把它们写进归档方案的需求清单,是数据治理成熟度最直接的试金石。
归档章补一个常被忽略的维度:归档的"用户体验"——查询路径的变化要让业务方无感或有知。无感设计:统一查询入口内部自动路由(在线查近段、穿透归档查历史)——体验最好但实现成本高(跨源查询的一致性与性能都要兜住),适合历史查询频率可观的场景。有知设计:明确的双入口(在线系统查近一年、归档系统查历史)加界面的清晰引导——实现简单,成本是把"切换"的心智负担给了用户,适合历史查询低频的场景。两种设计的选择标准是历史查询的真实频率——统计三个月再定,别拍脑袋。而无论哪种,都要防"影子回流":业务方嫌归档慢,偷偷把历史数据拉回在线库自己建表查——及时发现(在线库的异常增长监控)与疏导(优化归档查询体验)双管齐下,堵是堵不住的,体验问题最终只能靠体验解决。
收尾一句:归档体系建成后每年做一次"归档价值回顾"——统计冷层的历史查询量与节省的在线资源成本,把归档从"技术后厨"变成"有经营数据的资产";这个动作让数据治理的投入可量化,也让下一次申请归档预算时,你有数字而不是情怀。
补最后一个实操细节:归档任务的执行时间要避开统计收集与备份的窗口(第 7 小节维护编排的原则),且归档自身的限速参数(每批行数、批间隔)要在首次执行时实测校准——不限速的归档曾在无数个夜晚悄悄拖垮在线库,而限速过严又让归档窗口装不下任务;"批行数千级、间隔百毫秒级"是常见的起点,按你的库与窗口微调。归档是慢工,慢工的纪律是匀速。