该技能面向持久化数据的迁移与转换,包括在模式、数据库、服务或存储技术之间移动数据,以及运行迁移相关的作业。资料强调:迁移会改变持久化行为,不应被视为自动的重构,而应按一个临时的生产系统来对待,明确其正确性、容量、可观测性和退役标准。
用途与定位 用于指导操作性数据迁移,覆盖从准备到收尾的全过程,并为不同迁移形态提供决策依据。
工作流
- 定义源权威、目标契约、转换规则、不变量、数据分类以及可容忍的停机或陈旧程度。
- 选择稳定的快照边界或高水位标记,并在实时变更脱离快照之前开始持久化捕获。
- 以兼容方式扩展目标模式,在滚动部署期间保持新旧应用版本可互操作。
- 以有界、幂等、可恢复的批次回填,进度确定,并明确坏行处理方式。
- 应用已捕获的增量,防止陈旧快照数据覆盖更新的写入。
- 按声明的数据水位对可用性、计数、身份、值和领域不变量进行对账。
- 仅在新鲜度和差异门禁通过后切换;持续监控并保留回退或前向修复路径。
- 观察期结束后再收缩旧字段、代码路径、捕获基础设施和临时权限。
决策规则
- 小型同库转换且符合锁与部署预算时,优先直接事务性 SQL。
- 异构存储或需要应用代码的转换,优先离线批量导入器。
- 仅在允许长期不完整迁移、并发未命中使用原子 upsert 时,才采用惰性/读取时迁移。
- 长时间迁移且写入必须继续时,将有界快照与 Outbox、CDC 或事件捕获结合。
- 在线模式变更采用扩展-收缩:添加兼容形态、部署宽容读写方、填充、校验、切换权威,再移除旧形态。
- 新写入无法无损表示为旧模型后,使用前向修复而非破坏性回滚。
安全不变量
- 为每个目标行保留稳定的源身份和转换版本。
- 通过 upsert、比较并设置/版本守卫或已处理区间记录,使重跑无害。
- 仅在批次事务提交后推进检查点;不要对变化中的源使用偏移分页。
- 按不可变键排序并使用键集/区间批次;多工作进程需划分不相交区间或持久化认领。
- 针对实时流量容量限制读、写、并发、重试、内存和锁时间。
- 隔离格式错误或违反约束的行并保留脱敏诊断;绝不将基础设施故障转为有效的空数据。
- 参数化查询,凭证不进入命令、源文件、日志和进程参数。
- 记录切换批准人、确切水位、产物、校验和、代码/模式版本和修复决策。
门禁 不得仅凭行数相等就切换,需要:源与目标依赖健康;在水位处迁移延迟在约定阈值内;缺失、多余、重复和变更的身份分别度量;关键字段的值校验和或全量比较通过;目标约束与领域不变量通过;隔离行已解决或被明确接受;回退/前向修复与操作手册已演练。
相关技能 基础设施设计用于 Outbox、Inbox、CDC、代理投递、事务、锁和容量机制;tdd-best-practices 及其 references/migration-testing.md 用于失败、重启、竞态、对账和切换验证;refactoring-best-practices 仅用于引入代码接缝和兼容路径而不改变现有行为;ddd-best-practices 用于判断转换后的数据是否改变领域含义或有界上下文归属。
参考资料 阅读 references/operational-migrations.md 了解快照/增量交接、批处理、对账、可观测性、切换、修复及课程注意事项。
限制 资料未提供具体安装命令、平台支持范围、收费方式或量化效果,相关细节暂未提供。