[发明专利]一种不停机数据库迁移方法在审
| 申请号: | 202111583501.3 | 申请日: | 2021-12-22 |
| 公开(公告)号: | CN114385588A | 公开(公告)日: | 2022-04-22 |
| 发明(设计)人: | 许信 | 申请(专利权)人: | 天翼电子商务有限公司 |
| 主分类号: | G06F16/21 | 分类号: | G06F16/21;G06F11/14;G06F16/23;G06F16/2455 |
| 代理公司: | 暂无信息 | 代理人: | 暂无信息 |
| 地址: | 102200 北京市昌平*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 停机 数据库 迁移 方法 | ||
1.一种不停机数据库迁移方法,其特征在于,包括以下步骤:
S1、版本V0迁库前的前置操作,用于控制版本V1操作落DB-NEW数据的幂等判断;原有下单流程不变,仅在下单成功情况下新增存储请求四要素在redis的操作,在V0版本上线前保障此版本稳定运行一段时间;
操作注意点:
(1)redis存储期限:1~2天;
(2)redis格式:
{TRADE_CENTER_V0_requestDate_requestOrderNo_requestSystem_merchantNo,normal}
其中小写字符代表变量,记录的是确定的值,例如:
收单域订单redis存储:
{TRADE_CENTER_V0_20170815_2017081517TPPIOP1110000000000466_TRADE_ACQUIRING_3178000000875377,normal}
资金域订单redis存储:资金幂等校验没有考虑商户号
{TRADE_CENTER_V0_20170815_2017081517TPPIOP1110000000000466_TRADE_DEDUCT,normal}
(3)涉及业务:资金下单、收单下单;
(4)在V0发版后检查redis数据是否正常;
S2、版本V1将数据新增到新数据库DB-NEW的T1-MOVE表中,仅仅处理在MOVE表中的订单,原表中的数据静置后进行数据迁移;V1版本上线前操作:(后续V2版本照此操作)
关闭应用大总管后台操作入口;
该应用所有定时任务暂停(将所有定时任务状态置为INVALID失效);
数据库层面:
新增库DB-NEW;
在DB-NEW库中新增两套表:T1-NEW与DB-OLD所有表名保持一致,T_MOVE临时存储新库数据表;
V1版本操作如下:
①将DB-OLD数据源连接信息替换成DB-NEW的;
②mapper层所有表名换成T1-MOVE:暂时存储数据,后续会迁移到T1-NEW表;
③下单:落T1-MOVE表;
A.下单前:先判断请求四要素是否已存储在TRADE_CENTER_V0_REQUEST缓存中,已存在则直接抛出异常——重复下单,不存在则正常落T1-MOVE表;
B.下单后:下单成功后存储前缀为ADE_CENTER_V1_REQUEST的redis缓存,请求四要素拼接作为key;
④支付(以前就有判断订单是否存在):支付前根据交易号判断该订单是否存在T1-MOVE表,不存在则直接抛出异常’订单不存在’数据可能存储在T1-OLD表,存在则继续支付;
⑤接收支付控制kafka处理:新增一条日志打印——首先判断该支付单是否能在T1-MOVE表中查到,如果查不到则打印经支付控制kafka消息转换而来的支付信息,否则继续处理;
发送kafka无需做特殊处理;
发版后操作:观察数据落T1-MOVE表正常后,则可以通知DBA将DB-OLD数据迁移到DB-NEW的T1-NEW表中;
S3、版本V2发布条件:等待DBA将DB_OLD的所有数据迁移到DB-NEW的T1-NEW表,再发布V2版本;
数据库层面:无变化;
V2版本操作如下:
1)继续使用DB-NEW数据源
Mapper层所有表名更换为T1(DB-NEW中的表),相对于上一个版本删除move后缀;
2)下单:
下单前:先判断请求四要素是否已存储在ADE_CENTER_V1_REQUEST缓存中,已存在则直接抛出异常——重复下单,不存在则正常落T1-NEW表;
下单后:无需新增redis缓存操作(后续版本交易还是落T1-NEW表,仅是将代码还原到迁库之前,且只改动数据源);
3)支付(以前就有判断订单是否存在):支付前根据交易号判断该订单是否存在T1-NEW表,不存在则直接抛出异常“订单不存在”数据可能存储在T1-MOVE表,存在则继续支付;
4)接收支付控制kafka处理:新增一条日志打印——首先判断该支付单是否能在T1-MOVE表中查到,如果查不到则打印经支付控制kafka消息转换而来的支付信息,否则继续处理;
5)发送kafka无需做特殊处理;
发版后操作:观察数据落T1-NEW表正常后,通知DBA将T1-MOVE数据迁移到T1-NEW表中;
S4、版本V3发布条件,等待DBA将T1-MOVE的所有数据迁移到T1-NEW表,再发布V3版本;
数据库层面:无变化;
V3版本操作如下:
a.继续使用DB-NEW数据源;
b.Mapper层所有表名为T1(DB-NEW中的表);
c.下单、支付逻辑还原到迁库之前;
发版后操作:检查数据量是否正确;
S5、迁移过程预期问题
(1)V0版本发布只涉及上线redis控制正交易唯一性约束问题,理论不会有任何问题;
(2)V0到V1版本发布期间(一半机器运行V0,一半机器运行V1),可能出现下单落在V0,支付落在V1或者下单落在V1,支付落在V0的情况下:
正交易:对于老交易来说不受任何影响(老交易都是下单并支付),对于新交易全部受影响;
反交易:新老交易视原交易位置,如果原单不在相应版本的表里,全部受影响;
(3)V1版本发布完成后对新老交易的所有正交易均不受影响,所有记录全部落在TEMP表;对新老交易的反交易,原交易在老表的情况下受影响;
(4)在V1和V2发布期间(一半机器运行V1,一半机器运行V2),可能出现下单落在V1,支付落在V2或者下单落在V2,支付落在V1的情况下:
正交易:对于老交易来说不受任何影响(老交易都是下单并支付),对于新交易全部受影响;
反交易:新老交易视原交易位置,如果原单不在相应版本的表里,全部受影响;
(5)V2版本发布完成后对新老交易的所有正交易均不受影响,所有记录全部落在最终表;
对新老交易的反交易,在原交易在TMEP表的情况下受影响;
对新老交易的反交易,原交易在老表里的全部受影响;
(6)V2到V3版本发布至完成理论数据全部切到最终表后,无影响;
回滚方案迁移到TMP表的过程中发生影响,代码回滚,将TMP表数据移动至老表。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于天翼电子商务有限公司,未经天翼电子商务有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111583501.3/1.html,转载请声明来源钻瓜专利网。





