如何触发冷热数据分离
前置知识
一般来说,冷热数据分离的触发逻辑分为3种:
直接修改业务代码,使得每次修改数据时触发冷热分离(比如每次更新订单的状态时,就去触发这个逻辑)
如果不想修改原来的业务代码,可以通过监听数据库变更日志binlog的方式来触发。 具体方法就是另外创建一个服务,这个服务专门用来监控数据库的binlog,一旦发现数据库表有变动,就将变动的数据发送到一个队列,这个队列的订阅者将会取出变动的数据,触发冷热分离逻辑。
通过定时扫描数据库的方式来触发。 这个方式就是通过quartz配置一个本地定时任务,或者通过类似于xxl-job的分布式调度平台配置一个定时任务。这个定时任务每隔一段时间就扫描一次热数据库表,找出符合冷数据标准的数据,进行冷热分离。
三种触发逻辑的优缺点及适用场景如下表:
优点
缺点
适用场景
修改写操作的业务代码
代码灵活可控
保证实时性
无法按照时间区分冷热,当数据变为冷数据时,其间可能没有进行任何操作
需要修改所有数据写操作的业务代码
建议在业务代码比较简单,并且不按照时间区分冷热数据时使用。
监听数据库变更日志
与业务代码解耦
可以做到低延时
无法按照时间区分冷热,当数据变为冷数据时,其间 可能没有进行任何操作
需要考虑数据并发操作的问题,即业务代码与冷热变更代码同时操作同一数据
建议在业务代码比较复杂,不能随意变更,并且不按时间区分冷热数据时使用。
定时扫描数据库
与业务代码解耦
可以覆盖根据时间区分冷热数据的场景
不能做到实时性
建议在按照时间区分冷热数据时使用。
项目方案
本项目的业务需求是已经关闭超过1个月的工单视为冷数据,这种场景下,工单变更的那一瞬间,即使工单已经关闭了,也不能将其视为冷数据,而必须再等待1个月。这样的情况非常适合使用定时扫描。
所以这一次,本项目选用了定时扫描数据库的触发方式。