← [ BACK_TO_NOTES ]

Schema Versioning

Schema 版本化标识数据结构及校验规则,区分格式兼容、协议行为和数据库迁移。

#concept #evergreen #backend #architecture

[!info] related notes

Schema Versioning

Schema 版本化标识数据结构及其校验规则,帮助生产者、消费者和历史数据读取器选择正确的解释方式。它适用于 API payload、事件和持久化记录,不等于整个通信协议或数据库迁移流程。

兼容性有方向

变化要检查什么
新增响应可选字段旧消费者是否允许未知字段
新增必填输入字段旧生产者是否仍能提交有效数据
新增 enum 值旧消费者是否认识该值,未知值能否安全处理
改类型、单位或字段含义结构和语义都可能不兼容
删除字段是否仍有消费者或历史数据依赖它

“新代码能读旧数据”与“旧代码能读新数据”不是同一个保证。兼容策略必须说明生产者和消费者的方向与支持范围。

版本字段与解析

版本可位于消息 envelope 或外部契约标识中,位置由项目统一约定。不要在一个示例放 version,另一个放 meta.version,却假定二者自动互通。

解析流程应先验证输入格式、版本字段和支持范围,再调用对应解码器。JSON 解析失败、版本类型错误和未知版本不能被忽略或降级成默认 v1。

缺失版本只有在历史契约明确规定时才代表旧版本。静态类型不能替代运行时校验;旧消息回放还应保留足以识别历史 schema 的信息。

迁移与测试

  • 优先定义可兼容的扩展窗口,再逐步切换读写。
  • 对历史数据使用显式转换;转换后的数据也需校验,不静默编造缺失的业务事实。
  • 用新旧格式样例、缺字段、未知 enum、畸形数据和回放用例验证。
  • 结构合法不等于行为兼容;顺序、幂等、审批和终态属于 协议版本化 的范围。
  • 数据库 DDL 还涉及锁、回填和应用发布顺序,见 database-schema-migration-release-compatibility。
创建于 2026/6/30 更新于 2026/10/6
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本