参考:
冷热分离--表数据量大读写缓慢优化
https://www.bilibili.com/video/BV19j41137Wp?p=2&vd_source=898d5514be58985430a49b46d5500c13
一、什么场景使用冷热分离
表数据量大读写缓慢,需优化,如果满足如下条件
1、数据走到终态后,只有读没有写的需求,比如订单完结状态
2、用户能接受新旧数据分开查询,比如默认只查3个月内订单,查询3个月前需访问单独页面
二、整体方案
三、冷热分离实现思路
1、如何区分冷热数据
基于时间维度:比如3个月前,是冷数据
基于状态维度:比如数据到了终态
组合字段:下单时间小于3个月且订单状态已完结为冷数据,其他为热数据
// 如果一个数据被标识为冷数据,业务代码不会对它写操作;不会同时存在读冷/热数据的需求
2、如何触发冷热数据分离
方案1:直接修改业务代码
方案2:监听数据库变更日志
方案3:定时扫描数据库
方案对比:
4、如何实现冷热数据分离
需要考虑
1、一致性:同时修改多个数据库,如何保证数据的一致性 关注操作幂等性
2、数据量大,一次处理不完,需进行批量处理
3、并发性
假如数据量大到需要分到多个地方并行处理,
在定时搬运冷如数据的场景,大到单线程批量处理都来不及
多线程并发分离逻辑:
1、如何启动多线程:
方法1:启动多个定时器(定时器间隔较短)
启动2:线程池
2、某线程宣布某个数据正在操作,其他线程不要动
3、某线程失败退出,结果锁没释放怎么办?
历史数据如何迁移
给所有历史数据加上标识 ColdFlag=WaitingForMove ,程序就会自动迁移
冷热分离方案的不足
1、用户查询冷数据速度依旧很慢:假如查询冷数据用户只有1%,则没问题
2、业务无法再修改冷数据:因为冷数据多到一定程度,系统承受不住,则冷数据可能还需要再分库
标签:方案,冷热,分离,线程,数据量,数据 From: https://www.cnblogs.com/clarino/p/18063868