数据库冷热分离

什么是冷热分离 【数据库冷热分离】就是数据分成冷库和热库2个库,冷库只存放那那些走到终态的数据,热库存放还需要去修改字段的数据
什么情况下使用冷热分离

  • 数据走到终态后,对数据只有读的没有写的需求,比如订单完结状态
  • 用户能接受新旧数据分开查询,比如订单列表默认只能查询三个月内的订单,如果查询更早的状态,需要切换页面进行查询
实现思路 如果判断数据到底是冷数据还是热数据
时间维度:在我们订单主表中一定会记录该订单的下单时间,我们可以将三个月之前的作为冷数据,三个月之内的数据作为热数据
状态维度:我们可以将已完结的订单作为冷数据,其他作为热数据
在实际工作中,我们可以根据下单时间订单状态进行分离
如何触发冷热分离以及优缺点
| | 修改写操作业务逻辑 | 监听数据库变binlog更日志 | 定时扫描数据库 |
| ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------ |
| 优点 | 代码灵活可控 ;保证数据实时性 | 与业务代码解耦;可以做到低延时 | 与代码解耦;可以根据时间区分冷热数据的场景 |
| 缺点 | 不能按照时间区分冷热,当数据变成冷数据,期间可能没有其他任何操作;需要修改?数据库的写操作的代码 | 不能按照时间区分冷热,当数据变成冷数据,期间可能没有其他任何操作;需要考虑数据并发操作,就是业务代码与冷热变更代码同时操作同一个数据 | 不能做到实时 |
根据实际场景选择一个最优的方案,个人比较采用定时扫描的方案。
如何实现
1)在热数据中,给要搬的数据添加一个标识
2)找出待搬的数据,进行标记
3)使用事务进行包裹,将冷的数据保存在冷库中
4)删除原数据冷数据部分
在实现的过程中,会遇到各种各样的问题都是值得我们深思熟虑
1.同时修改多个数据库,如何保证数据的一致性?
2.假设数据量大,一次性处理不完,该怎么办?是否需要使用批量处理?
3.假设数据量大到要分到多个地方并行处理,该怎么办?
如何使用 一般都会有一个选项供我们选择需要查询冷数据还是热数据,如果界面上没有提供,我们可以直接在业务代码里区分。

    推荐阅读