关于数据库:变更线上数据库表结构时如何保证业务不受影响

11次阅读

共计 686 个字符,预计需要花费 2 分钟才能阅读完成。

咱们时常遇到 SaaS 业务场景须要变更数据库表构造的状况,当咱们对其变更时,如何保障生产环境的业务不受影响呢?

数据库变更,无非就三种状况,增、删、改。

上面来逐个剖析下各种变更的理论应该如何操作:

1. 减少字段

这种通常 给默认值 ,旧代码就能适应,这种能够 先变更数据库,再发代码

2. 删除字段

应该先发代码,再执行变更,起因是如果先删字段,可能生产环境的旧代码有用到这个字段,而先变更会导致把字段删了,而代码有调用。

然而如果旧字段没有默认值呢?要先给旧字段增加默认值,否则新代码曾经不须要这个字段,然而表的旧字段没删,然而表的旧字段又有必填,且没有默认值,一个保留操作,就 gg 了,新代码保留时会丢数据

3. 变更字段(将字段 A 改成字段 B)

计划 1

  1. 先增加一个字段 B,并且将字段 A 的值拷贝到 B 中,并且建设触发器,将后续 A 的变更都同步到 B,将 B 的变更,也同步到 A,并且给字段 B 设定默认值 **
  2. 发代码(这样公布期间,新旧代码共存时,旧代码能读到 A,新代码能读到 B,那此时如果旧代码对 A 的变更如何反馈到 B 呢?用步骤 a 的触发器将旧代码对 A 做的变更反馈到 B 上,同步也将新代码的变更反馈到旧的 A 字段上以适应旧代码),这一步最好将旧字段 A 也加上默认值 以适应新代码保留逻辑
  3. 最初再执行删除 A 的数据库变更

计划 2:

1. 先增加字段 B

2. 发 新代码 ,保障 双写 (增改都要双写),然而前提: 读,先保障新代码读旧字段 A

3. 写对账脚本,用 脚本对账 A, B 两个字段,以保障两个字段的一致性

4.再改代码 让新代码读新字段 B 再发代码,此时新旧业务上都能失常。

5. 再改代码,勾销双写 只写新,发代码

6.删除旧字段 A

整顿导图如下:~~~~

正文完
 0