侧边栏壁纸
  • 累计撰写 106 篇文章
  • 累计创建 19 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

冷热数据分离方案

zero
2023-07-18 / 0 评论 / 0 点赞 / 51 阅读 / 6138 字
温馨提示:
本文最后更新于 2024-07-04,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1、什么是冷热分离

冷热分离就是在处理的数据的时将数据分成冷库和热库,冷库存放的是已经走到最终状态的数据,同时也是不常使用的数据;热库存放的未走到最终状态的数据,还需要在进行变更的、经常使用的数据。

2、什么情况下要使用冷热分离

假设业务需求出现了以下情况,就可以考虑使用冷热分离的解决方案。

  1. 数据走到终态后只有读没有写的需求,比如订单完结状态。

  2. 用户能接受新旧数据分开查询,比如有些电商网站默认只让查询3个月内的订单,如果要查询3个月前的订单,还需要访问其他的页面.

3、冷热分离实现思路:冷热数据都用MySQL。

首先我们要解决如下问题:

  1. 如何判断一个数据是冷数据还是热数据?

  2. 如何触发冷热数据分离?

  3. 如何实现冷热数据分离?

  4. 如何使用冷热数据?

  5. 历史数据如何迁移。

接下来看看我们如何处理上面的问题。

3.1、如何判断一个数据是冷数据还是热数据?

一般而言,在判断一个数据到底是冷数据还是热数据时,主要采用主表里一个字段或多个字段的组合作为区分标识。

这个字段可以是时间维度,比如订单的下单时间,可以把3个月前的订单数据当作冷数据,3个月内的订单数据当作热数据。当然,这个字段也可以是状态维度,比如根据订单状态字段来区分,将已完结的订单当作冷数据,未完结的订单当作热数据。

还可以采用组合字段的方式来区分,比如把下单时间小于3个月且状态为已完结的订单标识为冷数据,其他的当作热数据。而在实际工作中,最终使用哪种字段来判断,还是需要根据实际业务来决定的。

注意

  1. 如果一个数据被标识为冷数据,业务代码不会再对它进行写操作。

  2. 不会同时存在读取冷、热数据的需求。

3.2、如何触发冷热数据分离?

方案一

直接修改业务代码,使得每次修改数据时触发冷热分离(比如每次更新订单的状态时,就去触发这个逻辑)。

修改写操作的业务代码建议在业务代码比较简单,并且不按照时间区分冷热数据时使用

场景示例:假设是根据订单的状态来区分冷热数据,订单的状态不会随着时间自动变化,必须有人去修改才会变化,并且很容易找出所有修改订单状态的业务代码,这种情况下可以用这种触发逻辑。

冷热数据分离方案-图片一.png

方案二
如果不想修改原来的业务代码,可以通过监听数据库变更日志binlog的方式来触发。具体方法就是另外创建一个服务,这个服务专门用来监控数据库的binlog,一旦发现ticket表有变动,就将变动的订单数据发送到一个队列,这个队列的订阅者将会取出变动的订单,触发冷热分离逻辑。

监听数据库变更日志建议在业务代码比较复杂,不能随意变更,并且不按时间区分冷热数据时使用。

假设是根据订单的状态来区分冷热数据,订单的状态不会随着时间自动变化,必须有人去修改才会变化。其不一样的地方在于,业务代码很复杂,特别是有些用了很多年的系统中,修改订单状态的代码分布在多个位置,甚至多个服务中,不可能都找到,并且因为难以评估影响面,所以修改起来风险很大。这种情况下就适合使用监听数据库变更日志的方式。

冷热数据分离方案-图片二.png

方案三
通过定时扫描数据库的方式来触发。这个方式就是通过quartz配置一个本地定时任务,或者通过类似于xxl-job的分布式调度平台配置一个定时任务。这个定时任务每隔一段时间就扫描一次热数据库里面的订单表,找出符合冷数据标准的订单数据,进行冷热分离。

定时扫描数据库建议在按照时间区分冷热数据时使用。

比如业务需求是已经关闭超过1个月的订单视为冷数据,这种场景下,订单变更的那一瞬间,即使订单已经关闭了,也不能将其视为冷数据,而必须再等待1个月。这样的情况非常适合使用定时扫描。

冷热数据分离方案-图片三.png

 

修改写操作的业务代码

监听数据库变更日志

定时扫描数据库

优点

代码灵活可控

保证实时性

与业务代码解耦

可以做到低延时

与业务代码解耦 可以覆盖根据时间区分冷热数据的场景

缺点

无法按照时间区分冷热,当数据变为冷数据时,其间可能没有进行任何操作

需要修改所有数据写操作的业务代码

无法按照时间区分冷热,当数据变为冷数据时,其间可能没有进行任何操作

需要考虑数据并发操作的问题,即业务代码与冷热变更代码同时操作同一数据

不能做到实时性

当决定了冷热分离的触发方式后,就进入下一个决策点:如何分离冷热数据。整个方案最复杂的环节就是这里。

1.3.3、如何分离冷热数据?

在讲解如何分离冷热数据之前,先来了解一下分离冷热数据的基本逻辑,只有掌握了基本原理,才能真正理解事物的本质。

冷热数据分离方案-图片四.png

  1. 判断数据是冷是热。

  2. 将要分离的数据插入冷数据库中。

  3. 从热数据库中删除分离的数据。

0

评论区