事务
事务取数据库中的概念,往往就是单个逻辑单元中执行的一系列操作,是作为一个整体要么整体成功,要么整体不执行(部分成功部分失败后回滚)
事务属性
ACID的概念
- ACID
- Atomicity 原子性 事务内的操作要么都成功,要么都失败,不存在中间状态
- Consistency 一致性 事务从一个状态转为另外一个状态时,对于整个数据的完整性保持稳定。即事务执行时,要有能力保证执行成功or失败都是符合预期的,要么都变成更新值,要么维持现状
- Isolation 隔离性 不同事务修改相同数据时,未完成的事务不会影响到另外一个未完成的事务
- Duration 持久化 事务一旦提交,其变更就持久化到数据库,即便发生宕机,恢复后也不影响事务的执行结果
隔离级别
- Read uncommitted
- read committed
- repeatable read
- serializable
详细内容不在这里赘述,感兴趣的话,可以看总结的mysql篇
分布式事务
为保证不同数据库的数据一致性的事务解决方案,往往涉及到CAP原则和BASE理论
概念
- CAP
- Consistency 一致性
- Availablity 可用性
- Parition-tolerance 分区容错性
往往这三个是一个相互交错的情况,而系统只能从三者中选取两个交区做到最好
比如选择了 CA 一致高可用性,导致分区容错性有缺陷
针对上面情况提出了BASE理论,来指导对应分布式系统的要求
- BASE
- Basically Available 基本可用
- Soft State 软状态
- Eventually Consitent 最终一致性
在达到上面目标情况下,也就有了一些设计的方案,强一致性的两阶段提交、三阶段提交协议,以及最终一致性的可靠事件,补偿模式,TCC模式