for action in reversed(self.compensation_actions):
await action()
raise
复制代码
课后Quiz
Q1:为什么在点赞功能中需要唯一约束?
A. 提高查询速度
B. 防止用户重复点赞
C. 减少数据库存储空间
D. 方便统计用户数据 正确答案:B
剖析:唯一约束确保(user_id, article_id)组合的唯一性,从数据库层面防止重复点赞,比应用层检查更可靠。 Q2:Saga模式中的补偿操纵应该按什么序次执行?
A. 任意序次
B. 正向序次
C. 反向序次
D. 随机序次 正确答案:C
剖析:补偿操纵需要按照与业务操纵相反的序次执行,比方先撤销最后完成的操纵。
常见报错解决
错误1:TransactionManagementError - 事件超时
原因分析:
长时间未提交的事件导致锁等候超时
复杂事件处理时间凌驾数据库配置的超时阈值
解决方案:
优化事件内的操纵,减少不须要的数据库交互
在事件开始时设置合理超时时间:
async with in_transaction(timeout=30) as conn: # 30秒超时