- 扩展:新增结构,旧结构继续可用,写入同时更新两处
- 迁移:读路径切换到新结构,校验一致性
- 收缩:确认无依赖后删除旧结构与兼容代码
数据库列改名示例
| 阶段 | 操作 | 兼容性要求 |
|---|---|---|
| 扩展 | 新增 new_col 并双写,读兼容新旧两列 | 旧代码不改动照常运行 |
| 迁移 | 回填历史数据,读切到 new_col 并抽样校验 | 旧列保持可读,随时可回退 |
| 收缩 | 停止写旧列,确认无读取方后删除 | 先核对依赖方调用量清零 |
| 回退要点 | 每个阶段独立可回退;双写与回填期间监控延迟与数据差异 |
|---|---|
| 完成判据 | 旧结构零读取、零写入,持续观察一个发布周期后再删除 |
| 接口侧 | 字段先加后删、枚举先扩后收,消费方对未知字段保持容忍 |
|---|---|
| 清理登记 | 旧结构的删除时间与责任人登记,到期前复核存量依赖 |
每个阶段都要可独立回退;回填与双写期间要监控延迟与数据差异。