首页/开发/CI/CD 与发布速查/扩展-收缩迁移(Expand/Contract)
环境与配置管理60 条

扩展-收缩迁移(Expand/Contract)

把破坏性结构变更拆成安全序列:加新结构 → 双写/回填 → 切换读 → 移除旧结构,每一步都可独立回滚。

CI/CD 与发布速查开发更新于 2026-10-12
阶段 1 扩展新增列/表/索引(兼容旧代码)
阶段 2 迁移双写 + 回填历史数据 + 校验一致性
阶段 3 切换读切到新结构,观察
阶段 4 收缩确认无依赖后删除旧结构

序列示意(重命名字段)

序列示意(重命名字段)
-- 1. 加新列
ALTER TABLE orders ADD COLUMN ref_no text;
-- 2. 双写并回填(应用层或触发器)
-- 3. 读切换到 ref_no,观察稳定
-- 4. 停止双写,删除旧列
每步之间按天/周留观察窗:数据量越大,回填与校验越要拆批执行。

易错点

  • 一次上线完成「加列改名删列」:回滚窗口内旧版本直接报错,拆步执行
  • 回填不设限速:大表回填打满 IO 拖垮线上,分批并监控延迟

数据来源与参考

  • Martin Fowler《ParallelChange》
  • GitHub Engineering《安全迁移实践》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌