【数据库优化】冷热分离
参考:
冷热分离--表数据量大读写缓慢优化
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、业务无法再修改冷数据:因为冷数据多到一定程度,系统承受不住,则冷数据可能还需要再分库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)