数据库冷热分离
什么是冷热分离
【数据库冷热分离】就是数据分成冷库和热库2个库,冷库只存放那那些走到终态的数据,热库存放还需要去修改字段的数据
什么情况下使用冷热分离
- 数据走到终态后,对数据只有读的没有写的需求,比如订单完结状态
- 用户能接受新旧数据分开查询,比如订单列表默认只能查询三个月内的订单,如果查询更早的状态,需要切换页面进行查询
时间维度:在我们订单主表中一定会记录该订单的下单时间,我们可以将三个月之前的作为冷数据,三个月之内的数据作为热数据
状态维度:我们可以将已完结的订单作为冷数据,其他作为热数据
在实际工作中,我们可以根据
下单时间
和订单状态
进行分离如何触发冷热分离以及优缺点
| | 修改写操作业务逻辑 | 监听数据库变
binlog
更日志 | 定时扫描数据库 || ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------ |
| 优点 | 代码灵活可控 ;保证数据实时性 | 与业务代码解耦;可以做到低延时 | 与代码解耦;可以根据时间区分冷热数据的场景 |
| 缺点 | 不能按照时间区分冷热,当数据变成冷数据,期间可能没有其他任何操作;需要修改?数据库的写操作的代码 | 不能按照时间区分冷热,当数据变成冷数据,期间可能没有其他任何操作;需要考虑数据并发操作,就是业务代码与冷热变更代码同时操作同一个数据 | 不能做到实时 |
根据实际场景选择一个最优的方案,个人比较采用定时扫描的方案。
如何实现
1)在热数据中,给要搬的数据添加一个标识
2)找出待搬的数据,进行标记
3)使用事务进行包裹,将冷的数据保存在冷库中
4)删除原数据冷数据部分
在实现的过程中,会遇到各种各样的问题都是值得我们深思熟虑如何使用 一般都会有一个选项供我们选择需要查询冷数据还是热数据,如果界面上没有提供,我们可以直接在业务代码里区分。
1.同时修改多个数据库,如何保证数据的一致性?
2.假设数据量大,一次性处理不完,该怎么办?是否需要使用批量处理?
3.假设数据量大到要分到多个地方并行处理,该怎么办?
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 数据库设计与优化
- 数据库总结语句
- MySql数据库备份与恢复
- 数据库|SQL行转列方式优化查询性能实践
- MySQL数据库的基本操作
- springboot整合数据库连接池-->druid
- Android|Android sqlite3数据库入门系列
- Python3|Python3 MySQL 数据库连接
- 达梦数据库|DM8表空间备份恢复