【冷热分离】

参考:

冷热分离--表数据量大读写缓慢优化

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、业务无法再修改冷数据:因为冷数据多到一定程度,系统承受不住,则冷数据可能还需要再分库

 

posted @ 2024-03-10 11:06  飞翔在天  阅读(7)  评论(0编辑  收藏  举报