冷热分离的目的在于提升热数据的性能,给冷数据分配较少的资源从而节约资源。热数据的范围越小,冷热改造的意义就越大。同时,需要确保冷数据足够冷,应该是终态数据(无改动),且访问频率低、性能要求低。
阶段 | 改造点 | 序号 |
---|---|---|
冷表创建 | 创建冷表,结构与热表一致 | 1 |
冷热双查改造 | 单条查询改为先查热表,查不到则访问冷表,同时加冷表读开关,平时开关是关闭状态,业务特殊需求时才需要开启 | 2 |
冷热双查改造 | 多条查询改为同时查冷热表并聚合返回,分页先查热再拼凑冷表数据 | 3 |
冷表写入改造 | 定时任务每天将过去2天的热表1年前(业务决定时长)新增数据写入冷表,同时热表删除,这里要做好数据防丢失,确保写入成功再删除,且需要注意留出冷表覆盖的口子 | 4 |
增量冷数据流job开启 | 4中的job开启并运行一段时间观察增量冷数据的读写情况 | 5 |
历史冷数据处理 | 运维执行存储过程,将热表里的历史冷数据分段写入冷表 | 6 |
稳定运行 | 历史数据处理完成后,增量冷数据流job运行无问题,进入稳定运行 | 6 |
注意repo层提供给service层的接口实现,最好是做一层do层,实现冷热双查的逻辑,对service层保持透明。
besides,如果每张表都这样改造,成本很高,因此考虑做统一改造,考虑从do层做抽象。暂且还没有完整思路。