
当单表的数据量达到数千万行时,索引树的层级就会变深,热数据的查询也会受到大量历史记录的拖累。冷热分离的主要目的就是使常用的数据留在较小的集合中。
划分标准根据访问习惯来制定。订单和日志类数据九成以上的查询都在最近三个月内,时间字段是天然的分界线;用户行为数据可以按最近一次活跃的时间段进行划分。标准要能够量化,凭经验拍定的分界在业务波动之后就会失真。
落地有两种方式。同库分表改动小,热表保留近期数据,冷表按相同结构承接历史,归档任务定期把过期记录批量迁移;数据量大的时候可以把冷数据放到专门的存储里,查询走独立的入口。迁移安排在低峰期进行,控制大小,防止归档任务本身成为慢查询的原因。
路由查询就是成败的关键。应用层默认只查热表,历史查询显式指定冷表或者使用联合视图;报表和统计任务单独安排从库,避免和在线查询争抢资源。
分开之后检查慢查询日志,热表查询耗时的下降幅度就是收益的直接体现。
边界调整要留有余地。业务淡旺季会使访问规律发生偏移,分界线可以放宽一些,把临界数据留在热表上;冷表不是写完就不动了,合规要求的定期抽检、用户申诉的查询仍然会触达,访问路径和权限提前规划好,避免分离之后出现够不着的数据死角。