[分布式系统][事务]事务、ACID相关概念

今日先初步了解一下事务这块儿的概念。

 

事务

事务是对数据库进行一致可靠的访问的基本单元,由作为原子单元执行的一系列数据库读写操作、计算步骤组成,可以看作是嵌入数据库访问查询的程序

start:任意一条DML语句即事务的开启。

commit:成功地结束,将之前记录在内存中的历史操作同步到底层硬盘文件。

abort. rollback:失败地结束,数据库会回退到执行该事务之前的状态。

事务的形式化定义详见参考书。

 

ACID

事务的四个性质。事务所谓的“一致可靠”,“一致”=一致性+隔离性,“可靠”=原子性+持久性,分别有自己的维护方式(后续再慢慢介绍)

Atomicity 原子性

事务的所有动作要么全被执行,要么全都不执行。

如果事务在执行过程中被打断,那么DBMS恢复其的方式为:要么继续完成余下操作,要么反做所有已完成的操作,以维护原子性。

由于会遇到两种故障,因此响应的有两类恢复操作:事务恢复、瘫痪恢复。

Consistency 一致性

数据库一致性:服从完整性限制,则数据库处于一致状态。事务执行期间可以暂时不一致。

事务一致性:并发事务时保持一致状态,多个用户同时访问时的数据复制问题。

Isolation 隔离性

在执行过程中的事务不能向其他并发事务透露其执行结果。

保证隔离性的原因:①维护事务之间的一致性;②处理级联式取消。

Durable 持久性

如果已提交,则产生的结果是永久的。

引入数据库恢复的问题,即如何让数据库恢复到所有提交动作所反映的一致状态。

 

[举例] 关系型数据库事务 “A账户向B账号汇钱”,需要6个操作:

  1. 从A账号中把余额读出来(500)。
  2. 对A账号做减法操作(500-100)。
  3. 把结果写回A账号中(400)。
  4. 从B账号中把余额读出来(500)。
  5. 对B账号做加法操作(500+100)。
  6. 把结果写回B账号中(600)。

原子性:保证1-6所有操作要么都执行,要么都不执行。比如执行到第5步的时候,B账户突然不可用(比如被注销),那么之前的所有操作都应该回滚到执行事务之前的状态。

一致性:在转账之前,A和B的账户中共有500+500=1000元钱。在转账之后,A和B的账户中共有400+600=1000元。

隔离性:如果在A给B转账的同时,有另外一个事务执行了C给B转账的操作,那么当两个事务都结束的时候,B账户里面的钱应该是A转给B的钱加上C转给B的钱再加上自己原有的钱。

持久性:一旦转账成功,两个账户里面的钱就会真的变化且永久。

 

四个性质是互相依赖而非独立。比如原子性出问题可能导致数据库不一致。

 

体系架构中的模块

事务管理程序TM

协调各个数据库操作的执行。

每个事务会有个起源站点,起源站点的TM负责所有协调工作,与各个SC和数据处理程序通信。

调度程序SC

通过并发控制算法同步各个操作对数据库的访问。

局部恢复管理程序LRM

在每一个数据库站点中,实现从失败状态恢复到一致状态。

接口由5个命令组成:开始、读、写、提交、取消、恢复。

 

参考资料:

《分布式数据库系统原理》第三版

彻底理解数据库事务

 

未来半年我将系统地学习分布式系统相关知识,通过 经典论文+coding 的形式打好理论基础。以下是我所有的学习笔记。慢慢积累,keep going~

分布式系统学习笔记系列

  1. Transaction 事务

[分布式系统][事务]事务、ACID相关概念

[分布式系统][事务]对2PC的理解

[分布式系统][事务]对3PC的理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值