可靠订单与查询性能:并发、锁和索引|学员任务书
任务与起点
沿本人累计商城项目继续,先保留可运行提交。本日交付:线程物流批查、内存锁反例、真实数据库竞争与查询计划。领取当天 student/W03-D01/;README 和显式 TODO 是练习起点,不是另一份完整商城。新增机制先完成最小例,再接本人业务模块。老师提供输入合同、检查工具与框架支架;刻意不提供业务实现和个人变体答案。
输入输出与合同
金额保持 Decimal 和 API 两位小数字符串;原订单状态、公共字段和权限合同不变。只能操作自己的实验数据。线程、进程或缓存不得绕开数据库事务和服务端权限。运行入口:python check_concurrency.py。首次红灯应来自 NotImplementedError/STUDENT_TODO;依赖错误和路径错误先修,不能记作业务红灯。
分段任务
- 回归 W02 API;用 Thread 和 Queue 收集两笔订单结果,解释 start/join 顺序。
- 运行日包检查获得显式 TODO 红灯;完成 reserve_one 和 shipping_batch,保留成功及单项失败。
- 用内存竞争反例核对“成功次数+库存”;再用两个独立 MySQL 连接竞争最后一件。
- 对固定客户订单查询记录数据量、EXPLAIN 与结果;只比较一个候选索引。
- 个人变化:把一项物流改为超时或更换库存数量,先预测再运行;解释 Lock 的进程范围。
验收与独立解释
内存无锁 accepted=2、有锁 accepted=1,均 available=0;物流成功/404/超时分项;真实 MySQL 至多一单成功;EXPLAIN 同条件可比。对每项保留输入、预测、实际、修复与复验;至少一条正常、一条错误、一条边界。AI 只改允许文件,先保存起点、检查 diff,再解释一处接受或拒绝的建议。同伴只按说明运行,不由作者代敲。
学生提交本人累计代码、固定提交、命令、测试结果和个人变化。课堂机制、本机 HTTP 替身、真实 MySQL/Redis、浏览器、本人完成分别标注;未运行写待验证。只交机制小函数或教师演示截图,不能替代累计商城增量。
分层与下一日
核心完成当天分段任务与独立变化;进阶更换同规模输入或故障;复杂分布式锁、集群与完整 Outbox 不纳入必修,也不挤占个人操作。下一日:沿用查询基线学习缓存;用批量报表区分 CPU 与 I/O。