数据库ACID

ACID

A:atomicity

C:consistency

I:isolation

D:durability

 

事务

概念

对于数据库用户来说一个逻辑上不可分割的操作就是一个事务

怎么样才算逻辑上不可分割要看业务的特征

比如可以认为一次转账的整个过程是一个不可分割逻辑单元

但是这在计算机眼中却是一个操作的集合

先读支出账户,然后再把支出账户的余额减少,然后读到账账户,然后再把到账账户的余额增加

特点

正因为事务被看做是一个不可分割操作单元

那么对于事务的执行中这个操作单元中的所有操作要么全部执行要么全部不执行

这个称为原子性

数据库通过隔离性来保证一个事务执行过程中不受其他并发事务或者数据库操作影响

这样起码我们能界定一个事务是成功了还是失败了

失败了我们可以再来一次

但是一半成功,那可能就很尴尬

 

 

一致性

一致可以理解为逻辑上正确

举一例

A、B账户中相互疯狂转账

如果某一刻,数据库对外显示A,B之和改变了

那么就不一致了

因为在现实世界的逻辑中

无论你怎么转,总数一定是那么多

不会凭空消失或增加

这是很重要的

 

 

原子性

为什么要保证原子性

因为事务整个过程中会出现不一致的状态

比如更新到缓存中还没有更新到数据库中

如果这其中系统故障,那么这个故障会导致这个不一致状态对数据库是可见的

这个不一致的状态反映到数据库中了,而数据库又把这个不一致状态反映给现实了

也就说数据库失去了可靠性与正确性

如果保证了事务的原子性,这个事务对数据而言

要么都执行,要么不执行

中间的不一致状态都是不可见的

也就保证了事务操作到数据库中是一致的,反映到显示也是一致的

数据库怎么保证原子性

数据库会把事务执行前的旧的值存到磁盘中

如果事务执行失败,那么就从磁盘上回复旧的值

仿佛就没执行过一般

这样就保证了原子性

 

 

持久性

一个事务执行成功之后,即使系统崩溃了这个事务对数据库的改变必须是永久的

 

 

数据库怎么保证持久性

首先这个持久可以理解为存到了磁盘上就是持久的

因为系统一旦故障,内存里面的数据可能就没了

但是磁盘上的数据是非常稳定的

所以保持持久就是写到磁盘上

从原理上来说也就是保证事务的两点性质就能保证持久性

保证事务完成结束前已经写到磁盘中

这保证了每个事务对数据的更新能确保更新到持久的磁盘中

保证事务执行的信息也写到磁盘中

这保证了每个事务更新的操作也能记录下来

恢复的时候能重建事务执行的过程

这项工作由数据库的恢复系统来完成

 

 

隔离性

简单来说就是让并发的事务看起来像串行一样

因为串行能很好的保持数据库的一致性

而并发总是容易影响数据库的一致性

如果强制串行就会丧失并发的优势

实现原理

我们可以从数据库本身特点出发

让事务能很好的并发

首先是对数据库操作的不同的事务中

对计算机硬件资源的占用是不同的

也就是说有的需要占用CUP进行计算之类的

有的只是需要占用磁盘进行读写之类的

那么操作计算不同硬件的事务就能并发的执行

这样的好处是能提高事务的吞吐量

也就是单位时间能执行事务的数量

还能提高事务的计算机自愿的利用率

不然硬件一直处于空闲状态

其次是不同的事务之间有长短之分

也就是说

有的事务执行很多操作,有的执行很少

执行多的需要的时间长,执行少的需要的时间短

如果串行,那么短的总是要等长的很久

这种等待要事务大量出现的时候会出现难以预计的各种数据库停顿

但是一旦了解到这些事务之间可能操作的数据库中几乎无关的不同的部分

那么就能让他们并行的执行,节约很多时间

也就是减少了事务的平均响应时间

也就是说减少了一个事务从提交到完成所需的时间

数据库采用并发控制机制来实现隔离性

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值