最近业务涉及老系统重构需求,新老系统需要并行运行一段时间,给用户一个过渡期。由于新系统和老系统的数据表结构无法兼容,所以无法直接使用老系统的数据库,只能重新设计。那么就需要保持新老业务系统之间数据必须是同步的。
问题来了,怎么让两个业务系统的数据能够尽可能保持实时同步?
目前想到了4个方案:
- 双库MySQL bin-log监听
- 双库建立触发器
- 数据库上层封装数据查询API
- 业务系统操作实时通知
各个业务方案有什么优缺点?
1. 双库MySQL bin-log监听
监听MySQL bin-log 方式,实时将记录变更同步到双库。
优点:
- 不侵入业务系统
- 同步速度快
- 独立设计开发
缺点:
- 开发难度大,要熟悉MySQL Replication 协议
- 依赖MySQL数据库版本
- MySQL Binlog 三种模式,需要确定一种模式
- 识别业务复杂
2. 双库建立触发器
对所有数据库表增加触发器,有变更则将所有变更记录添加到变更表。
优点:
- 可以实时记录所有变更
缺点:
- 对一个具有上百张表的数据库创建触发器,增加维护复杂度
- 触发器违反了公司的数据库规约
3. 数据库上层封装数据查询API
增加对所有表/业务查询的API封装,一条条来对比数据变更。
优点:
- 开发及其简单
缺点:
- 实时性根本无从谈起
- 速度无法保证。单张表数据千万级,一页页查询要猴年马月去了
4. 业务系统操作实时通知
业务层将事件通知到业务系统
优点:
- 业务识别明确
缺点:
- 老系统N个服务,每个服务都在变更数据,需要做大量的业务代码更改