数据库ACID和mvcc
一、数据库的ACID性:
原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。
二、原子性
1.原子性:一个事务要么全部完成,要么失败。
2.原子性的核心是:利用一个undo日志来记录事务可以回滚的各个数据版本。即当目前执行的事务发生故障时,需要回滚,可以根据undo日志中的记录来知道事务回滚到哪一步停止。这样来保证事务由当下状态回滚到开始执行前的状态。
3.不要把原子性和一致性、隔离性混淆。
原子性并不能保证看不到数据的中间状态。而一致性和隔离性才可以保障用户是看不到数据的中间状态。
三、一致性。
一致性就是从一个状态转变到另外一个状态,没有数据的中间状态。

视点1代表读取事务开始之前的旧数据。
视点2代表读取事务执行中的中间状态的数据。
视点3代表读取事务结束之后的新数据。
在处理一致性问题时,有两种方法:上移视点3到视点1,读取旧数据;下移视点3到视点2,读取更新后的新数据。可见保证一致性就是保证不读取中间状态的数据。
四、隔离性。
隔离性就是以提高性能为目的,对一致性的破坏。
下面四种隔离级别,级别越来越低,对一致性的维护性越来越差,而并发性越来越高。
隔离性的四个隔离级别:
1.可序列化:事务隔离级别最高,并发性最差,利用排它锁实现。针对同一资源,将所有的请求事务进行排序,一一个顺序执行。最高限度的保证了数据的一致性。

2.可重复读:利用共享锁和排写锁实现。读读并行,禁止任何写事务并行。

3.读已提交:允许读后写并行。读到的任何数据都是提交的数据,避免读到中间的未提交的数据。但是无法避免不可重复读。因为读事务第一次读取数据之后,另一个写事务可能会修改此事务,导致读事务第二次读取数据和第一次所读到的不一样。但是这种场景并不是经常出现,系统的一致性可以接受,因此多数数据库的默认级别是读已提交。

4.读未提交:对所有事务只加写锁,不加读锁。即只有写写不可以并行。但是这回导致读事务读到一些中间状态的数据,即脏读。

五、MVCC
1.MVCC(多版本并发控制),是一种不利用锁机制实现的隔离级别,主要实现了在保证数据的一致性的前提下,实现了读写的并行。
之前提到的读已提交,虽然实现了读写并行,读未提交实现了写读并行,读写并行;但是两种隔离级别均没有保证数据的一致性,分别出现不可重复读和脏读。
2.mvcc的原理是给每一数据的更新都有一个版本号。当写事务正在进行时,此时过来一个读事务,读事务会首先生成一个版本号,即该事物想读取哪一个版本的数据。
然后,写事务更新数据,读事务读取之前相应版本的数据,而保证了不出现不可重复读和脏读的情况。
3.之前提到,保证数据一致性有两种方式,要么将读事务读取视点1的数据,要么读取视点2的数据。在mvcc中保证数据一致性的方法选择的是,读取视点1的数据,即读取的 是写事务开始之前的旧版本数据。

数据库ACID和mvcc的更多相关文章
- 关系型数据库ACID
关系型数据库ACID 一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例 ...
- 数据库ACID、隔离级别与MVCC
首先需要明确事务的概念:一组原子性的SQL查询,如果数据库引擎能够成功的对数据库应用该组查询的全部语句,那么就执行该组语句,否则所有语句都不执行. 事务有ACID四个特性,即: 原子性:一个事务是一个 ...
- 什么是数据库ACID?
原子性:由于操作失败导致的数据碎片错误: 一致性:由于并发导致的数据库数据错误(与预期不一致): 隔离性:由于并发导致的当前使用数据(应用端)错误: 事务在当今的企业系统无处不在,即使在高并发环境下也 ...
- 数据库ACID
数据库的事务隔离级别 10.数据库的事务隔离级别一般分为4个级别,其中可能发生“不可重复读”的事物级别有()A.SERIALIZABLE B.READ COMMITTEDC.READ UNCOMMIT ...
- 数据库ACID和CAP理论
1.ACID是RDBMS的理论基石: A原子(Atomiclty )事务原子性: C一致(Consistency)插入一张表数据,会 影响其它(索引/其它表)等一致. I ...
- 数据库 ACID
ACID是指一个事务本质上有四个特点: Atomicity:原子性 Consistency:一致性 Isolation:隔离性 Durablilty:耐久性 原子性 原子性是指事务是一个不可分割的工作 ...
- 【眼见为实】自己动手实践理解数据库READ COMMITTED && MVCC
[READ COMMITTED] 首先设置数据库隔离级别为读已提交(READ COMMITTED): set global transaction isolation level READ COMMI ...
- (转)数据库ACID特性
转自:http://blog.csdn.net/shuaihj/article/details/14163713 隔离级别实现原理:http://www.cnblogs.com/wrencai/p/5 ...
- 数据库--ACID特性
事务的ACID属性 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 一致性(Consistency) 事务必须使数据库从一个一致性状态变换 ...
随机推荐
- jquery获取页面iframe内容
//取得整个HTML格式 var f = $(window.frames["ReportIFrame"].document).contents().html(); 或者 $(&qu ...
- P1009 阶乘之和
P1009 阶乘之和 题目提供者洛谷OnlineJudge 标签数论(数学相关)高精1998NOIp提高组NOIp普及组 难度普及- 通过/提交1139/3791 提交该题 讨论 题解 记录 题目描述 ...
- 【HTML5开发系列】表单元素
<form> 创建一个HTML表单 属性: action 表示提交表单时浏览器应该把用户填写的数据发送到什么地方 method 用来指定表单数据发送到服务器的方式.允许值有get和post ...
- ASP-Dictionary对象-基础用法
1.存在 dim d set d=Server.CreateObject("Scripting.Dictionary") d.Add "c", "Ch ...
- 10.Django数据库操作(增删改)
插入数据 命令:create 或者 save create用法:ModelName.objects.create(itemName="itemValue") save用法:mode ...
- Hadoop初体验(续)--YARN
1.Hadoop已经安装完成并启动成功 复制mapred-site.xml.template重命名为mapred-site.xml /etc/hadoop/mapred-site.xml.templa ...
- ALV 红绿灯编写
[转http://lz357502668.blog.163.com/blog/static/164967432012417102133216/]ALV 指示燈 編寫 1,在內表中申請一個字段. 該字段 ...
- 使用curl / wget命令上传下载FTP
curl可以在shell下轻松上传下载ftp上的文件,相比ftp命令更具有优势,因为它能在单命令条件下,下载或者上传一个ftp文件,甚至可以删除文件. 下面看实例: 1.列出ftp服务器上的目录列表: ...
- shell基础part3
shell基础 一.环境变量配置文件简介 1.source命令的作用就是将环境变量配置文件强制生效,其格式为: source 环境变量配置文件或者 . 环境变量配置文件 2.环境变量配置文件中主要是定 ...
- iOS 开发规范
公司来了大牛 是绝好的学习机会 今天分享了我们一个代码规范 比如UITableViewCell 1.首先根据这个cell 需要的数据源 建一个数据model ,只针对于 该cell 好处:数据独立 ...