数据库冷热分离

什么是冷热分离

就是数据分成冷库和热库2个库,冷库只存放那那些走到终态的数据,热库存放还需要去修改字段的数据

什么情况下使用冷热分离

  • 数据走到终态后,对数据只有读的没有写的需求,比如订单完结状态
  • 用户能接受新旧数据分开查询,比如订单列表默认只能查询三个月内的订单,如果查询更早的状态,需要切换页面进行查询

实现思路

如果判断数据到底是冷数据还是热数据

时间维度:在我们订单主表中一定会记录该订单的下单时间,我们可以将三个月之前的作为冷数据,三个月之内的数据作为热数据

状态维度:我们可以将已完结的订单作为冷数据,其他作为热数据

在实际工作中,我们可以根据下单时间订单状态进行分离

如何触发冷热分离以及优缺点

| | 修改写操作业务逻辑 | 监听数据库变binlog更日志 | 定时扫描数据库 |
| ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------ |
| 优点 | 代码灵活可控 ;保证数据实时性 | 与业务代码解耦;可以做到低延时 | 与代码解耦;可以根据时间区分冷热数据的场景 |
| 缺点 | 不能按照时间区分冷热,当数据变成冷数据,期间可能没有其他任何操作;需要修改㕛数据库的写操作的代码 | 不能按照时间区分冷热,当数据变成冷数据,期间可能没有其他任何操作;需要考虑数据并发操作,就是业务代码与冷热变更代码同时操作同一个数据 | 不能做到实时 |

根据实际场景选择一个最优的方案,个人比较采用定时扫描的方案。

如何实现

1)在热数据中,给要搬的数据添加一个标识

2)找出待搬的数据,进行标记

3)使用事务进行包裹,将冷的数据保存在冷库中

4)删除原数据冷数据部分

在实现的过程中,会遇到各种各样的问题都是值得我们深思熟虑

1.同时修改多个数据库,如何保证数据的一致性?

2.假设数据量大,一次性处理不完,该怎么办?是否需要使用批量处理?

3.假设数据量大到要分到多个地方并行处理,该怎么办?

如何使用

一般都会有一个选项供我们选择需要查询冷数据还是热数据,如果界面上没有提供,我们可以直接在业务代码里区分。

你可能感兴趣的:(数据库性能优化)