2.4 事务与一致性
一句话
一致性是目标,事务是手段。
事务和一致性是什么?
在后端开发中,事务和一致性是两个核心概念,主要用来确保系统在处理多步操作时,数据的完整性和准确性。
事务(Transaction)
事务是一组操作的集合,要么全部成功,要么全部失败。
假如事务中的某一步操作失败,系统会回滚之前的所有操作,让数据恢复到事务开始前的状态。
事务的特性:ACID
事务具有四大特性,简称 ACID:
原子性(Atomicity):
- 事务是不可分割的,所有操作要么全部成功,要么全部失败。
- 比喻:买东西时,钱和商品的交换是原子性的,要么交易成功,要么双方恢复原样。
一致性(Consistency):
- 事务完成后,数据必须满足系统定义的规则,不能出现不符合规则的状态。
- 比喻:银行转账后,总金额不变。
隔离性(Isolation):
- 不同事务之间互不干扰,事务执行的结果不受其他事务的影响。
- 比喻:超市里,两个顾客结账互不影响。
持久性(Durability):
- 一旦事务提交成功,数据的变更将永久保存,即使系统崩溃也不会丢失。
- 比喻:存款成功后,银行的账本永远记下这笔钱。
事务的例子
银行转账:
- 小明要给小红转账 100 元。
- 从小明账户扣 100 元。
- 向小红账户加 100 元。
如果任何一步失败(比如网络中断),事务会回滚,让小明账户和小红账户的余额保持不变。
一致性(Consistency)
一致性保证了数据始终是正确的、符合规则的状态。
系统中的每次操作和变化都需要遵循一致性约束。
一致性的例子
银行转账:
- 转账完成后,总金额保持不变。
- 如果小明账户减少了 100 元,小红账户必须增加 100 元,不能多也不能少。
订单系统:
- 一个订单完成后,商品库存应该相应减少。
- 如果商品被扣减了库存,但订单没有生成,数据就是不一致的。
事务和一致性的关系
- 事务是实现一致性的重要工具。
- 在一个事务中,通过保证原子性和隔离性,最终实现数据的一致性。
- 一致性是目标,事务是手段。
事务与一致性在实际开发中的作用
场景 1:电商下单
操作:
- 用户支付成功。
- 生成订单记录。
- 扣减商品库存。
如果某一步失败(如库存不足),整个操作需要回滚,确保一致性。
场景 2:多人同时修改数据
多个用户同时操作同一份数据时,事务通过隔离性避免数据冲突,确保最终数据一致。
总结
- 事务: 保证一系列操作要么全部成功,要么全部失败。
- 一致性: 确保数据始终是正确的、符合规则的状态。
- 两者关系: 事务是实现一致性的核心工具。