方案一 MQ迁移缓冲+单双写
不停服,增加缓冲层(MQ)。数据迁移过程中增量数据写入缓冲MQ,在数据迁移完成、缓冲层数据消费完成后,打开开关开始双写数据库,业务验证正常后关闭旧库读写(开关与验证遵循先关闭旧库表读验证通过再关闭旧库表写原则)。
- 推荐指数 ☆☆☆☆☆
- 优点:对用户无感,有回滚方案
- 缺点:操作成本高、方案操作节点、引入组件较多、研发和测试流程需要严格把控
方案二 主动迁移+被动迁移+双写
当打开开关进行迁移过程中发生数据访问时,强制将客户端要访问的数据立刻迁移(被动迁移),然后再双写处理该数据请求;同时通过外挂程序或指令将源库表数据复制到迁移目标数据中,如果迁移目标库表中已存在则忽略,当迁移完成并验证通过后关闭旧库读写(开关与验证遵循先关闭旧库表读验证通过再关闭旧库表写原则)。
- 推荐指数 ☆☆☆☆
- 优点: 对用户无感,有回滚方案
- 缺点:操作成本高、研发和测试流程需要严格把控
逻辑示例:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23int switch = 1 //0-旧 1-迁移中 2-迁移完成 Object obj = null; if (switch == 1 || switch == 2) { //xxx obj = queryNew() } if (switch== 0 || (switch == 1 && obj == null)) { //xxx obj = queryOld() //不存在则迁移(锦上添花) if (switch == 1 && obj == null) { trans(...) } } //beginTx if (switch == 1 || switch == 2) { updateNew(xxx) } if (switch == 1 || switch == 0) { updateOld(xxx) } //commitTx
最后
以上就是独特海燕最近收集整理的关于数据库迁移方案的全部内容,更多相关数据库迁移方案内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复