事务、索引、一致性与数据迁移
理解数据正确性、查询性能和版本变化的代价。
- 用自己的话解释“事务、索引、一致性与数据迁移”及其核心术语。
- 在真实 AI 产品场景中识别何时应该使用本课方法。
- 完成一份可沉淀进“系统关系图、一次 API 调用与基础 SQL 练习”阶段任务的实践产出。
REAL SCENE
先从一个真实场景开始
两个用户同时购买最后一件库存,系统都先读到库存为 1 并分别扣减;另一个页面因缺少索引查询超时。团队准备新增非空字段,却没有给历史数据回填。事务、索引、一致性和迁移会直接影响资金、库存和上线安全。
PLAIN EXPLANATION
说人话:它到底是什么?
事务把一组读写视为一个整体,要么全部成功要么回滚,并在并发下维持业务约束。索引像按特定字段建立的目录,能加速查询但占空间并增加写入成本。一致性表示不同操作和副本观察到的数据满足约定,不等于所有系统必须瞬时同步。数据迁移是结构或数据规则的版本变化,需要兼容旧代码、回填、校验和回滚。
事务与并发约束
支付、余额和库存需要把校验与写入放在受保护的事务中,通过锁、条件更新或唯一约束处理竞争。单机测试通过并不代表并发安全,重复请求还需幂等。
- 业务不变量写成数据库约束
- 冲突返回明确可恢复结果
- 高风险链路做并发测试
索引与查询代价
索引适合高频筛选、关联和排序字段,复合索引顺序取决于真实查询。索引不是越多越好:每次写入都要维护,低选择性或从不使用的索引可能只增加成本。
- 从慢查询与访问模式出发
- 使用执行计划验证效果
- 上线后监控写入和存储变化
兼容迁移与回滚
安全迁移通常先新增兼容结构,再双读写或回填验证,最后切换并清理旧字段。大表变更要分批、限速和监控;回滚代码不一定能回滚已写入的新数据。
- 迁移脚本可重复且可观测
- 历史数据定义默认与异常处理
- 发布步骤与数据步骤分开记录
关键数据用事务、约束和幂等守住业务不变量。
索引由真实查询驱动,并评估读、写和存储权衡。
数据迁移采用兼容、回填、验证、切换、清理的渐进步骤。
KEY POINT
这节课最重要的结论
- 为什么重要
- 这决定了听懂工程语言、阅读接口和数据库方案,并判断技术取舍时,团队是否拥有一致、可验证的判断标准。
- 适用边界
- 当问题目标、数据来源或失败成本发生变化时,不要机械套用;先重新确认假设和风险等级。
EXAMPLES
正确案例与常见反例
库存扣减使用条件更新保证 stock > 0,并以订单幂等键防重复;失败返回售罄而非负库存。慢查询基于执行计划增加匹配索引。新增字段先可空上线,分批回填并核对数量,代码兼容新旧字段,稳定后再加非空约束。
应用先查库存再单独写减一,没有事务或条件;支付重试生成重复订单。为所有列盲目加索引导致写入变慢。发布时直接给亿级表加非空字段并锁表,历史记录没有值,生产服务长时间不可用。
“库存不变量是不能小于零,请用事务内条件更新并配合订单幂等键,补充并发测试。字段迁移分新增可空、分批回填、双版本验证、切换与加约束,给出每步监控、停止条件和数据回滚方案。”
HANDS-ON
必做实操任务
本节产出:“系统关系图、一次 API 调用与基础 SQL 练习”阶段任务中的《事务、索引、一致性与数据迁移》一页实践卡
步骤 1为余额、库存或名额写出必须始终成立的业务不变量。
步骤 2模拟两个并发请求,找出先读后写造成竞争的位置并设计保护。
步骤 3从一个查询的筛选、关联与排序字段提出索引假设和验证指标。
步骤 4设计新增必填字段的兼容发布、历史回填、校验、切换和回滚步骤。
实践结果会自动保存在本机,并进入项目工坊的任务来源。
业务对象:____
必须保持的不变量:____
并发场景:请求 A____ 请求 B____
风险步骤:____
事务/原子更新:____
唯一或检查约束:____
幂等键:____
冲突用户反馈:____
查询模式:筛选____ JOIN____ 排序____
索引假设与写入代价:____
迁移步骤:新增____ 回填____ 验证____ 切换____ 清理____
监控与停止条件:____
代码回滚:____ 数据恢复:____CHECKLIST
产品经理工作检查表
MASTERY QUIZ
掌握测验
达到 60% 即可完成本课。
INTERVIEW
常见面试题
展开参考回答
迁移可能锁表、破坏兼容、丢失历史或让代码回滚却无法恢复数据。产品经理应明确业务不变量、历史数据语义、停机容忍、用户影响和验收;推动采用新增兼容结构、分批回填、数量与抽样校验、双版本切换、监控停止条件,并分别准备代码回滚和数据恢复方案。
RECAP & FURTHER READING
重点回顾、延伸阅读与下一步
- 1
围绕“事务、索引、一致性与数据迁移”继续阅读:查阅对应技术的官方入门文档,重点核对输入输出、失败方式、权限边界与可观测性。
- 2
用“事务、索引、数据迁移”作为检索词,分别写下一条定义、一条适用边界和一个反例。
- 3
对照本课正确案例与反例,寻找一个公开案例并记录其中可复用的判断与不能照搬的条件。