7 事务
7.1 目的
- 事务将应用程序的多个读写操作绑在一起成为一个逻辑操作单元,整个事务要么成功,要么失败
- 事务作为一个抽象层,使得应用程序可以忽略数据库内部一些复杂的并发问题,以及某些软硬件故障,简化应用层的处理逻辑,保持数据一致性。
- 并非每个应用程序都需要事务机制,有时可以弱化事务处理或完全放弃事务
7.2 ACID的含义
-
原子性A:客户端发起一个包括多个写操作的请求时,为了避免写一半发生崩溃,应该把这一系列写操作封装为一个原子事务,要么成功,要么崩溃后回滚
-
隔离性I:同时运行的事务不应相互干扰。可以类比为并发编程中读取数据不一致的问题
-
持久性D:有一个安全可靠的地方保存数据,如磁盘或者复制到远程节点
-
一致性C:指数据库处于应用所期待的的“预期状态”。AID是数据库自身的属性,但C更多是应用层属性。C只是为了让ACID读取来更顺口
7.3 单对象与多对象事务操作
- 许多分布式数据存储系统不支持多对象事务,主要是因为当出现跨分区时,多对象事务难以正确实现
- 有些情况,只进行单个对象的增删改就足够了,但是还有许多其他情况要求写入多个不同对象并进行协调。
- 比如外键,多对象事务确保这些外键引用的有效性
- 对于文档数据库之间的关联,多对象事务防止数据不同步
- 二级索引的数据库