架构师学习--数据库升级

我们在平常项目中难免会碰到这样的情况,比如我想在用户表中增加一个字段,来采集用户行为信息。比较常规的做法可能就是,重新测试打包上架,然后提示用户更新app。但是如果用户不更新呢?这样我们就无法采集到这个字段,另外重新打包上架的时间成本也是昂贵的,往往会导致用户的流失。那么有没有一种方法,类似于热修复,在用户无感知的情况下完成这样的数据库表升级呢?其实目前比较主流的做法就是配置xml文件的方式,用户只需要下载xml文件解析,然后执行sql语句即可。sql语句的执行流程分为4个步骤:

  1. 备份数据库表(重命名)
  2. 新建数据库表
  3. 将备份表内容拷贝到新表中
  4. 删除备份表

一、xml配置

在这里插入图片描述
下面对几个xml节点进行讲解。

1、updateXml

xml的根节点。通过对它的解析拿到document对象

2、updateStep

这个节点你可以配置多个,也就是版本不同,执行的语句也可能不同。但是不建议这样使用,因为这样会增加我们在解析xml的时候内存的压力。说不定就GG了。所以正确的做法应该是针对不同的版本我们去请求服务器,服务器返回不同的xml文件。

(1)versionFrom:起始版本,也就是用户的版本,可以是单个,也可是多个。比如"V0001,V0003"。意思就是将0001和0003版本都升级到 0002

(2)versionTo:目标版本,也就是服务器上的版本。

3、updateDb

这个节点也可以配置多个,主要存放数据库执行的sql语句。

二、xml解析

1、解析根节点

在这里插入图片描述
在这里插入图片描述

2、解析updateStep

在这里插入图片描述

3、解析updateDb

在这里插入图片描述

三、开始更新

新建工具类UpdateManager。

1、入口方法

在这里插入图片描述
遍历updateStep列表,然后检查用户版本是否符合当前版本

2、版本检查

在这里插入图片描述
一般情况下用户的数据库表版本存放在sp或者单独的数据库表中。

3、获取当前版本的数据库更新语句

在这里插入图片描述

4、开始更新

在这里插入图片描述
首先拿到要操作的数据库,为了语句格式的正确,需要去除换行,然后执行语句。

5、结果

在这里插入图片描述
增加了一个carAge字段信息,并且原来的数据没有丢失。

完整代码:

代码传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值