ACID理论和CAP理论的对比和总结

1.ACID

  ACID是数据库执行的四大特性即,原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)

1.1 原子性

  原子性是指事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。如果在事务发生的中途发生错误,需要执行回滚操作取消事务之前执行的结果。

1.2 一致性

  一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。

  1.2.1 数据库机制层面

  数据库层面的一致性是,在一个事务执行之前和之后,数据会符合你设置的约束(唯一约束,外键约束,Check约束等)和触发器设置.这一点是由SQL SERVER进行保证的.

  1.2.2 业务层面

  对于业务层面来说,一致性是保持业务的一致性.这个业务一致性需要由开发人员进行保证.很多业务方面的一致性可以通过转移到数据库机制层面进行保证.例如:经典的A转账给B200元钱,我们就可以通过规定A-200和B+200为一个事务保证转账业务的一致性。

1.3 隔离性

  多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。事务最复杂问题都是由事务隔离性引起的。完全的隔离性是不现实的,完全的隔离性要求数据库同一时间只执行一条事务,这样会严重影响性能。而此时我们就不得不提到事务并发执行是不得不遇到的问题:

  (1) 脏读,事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

  (2) 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

  (3) 幻读:第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

  (4) 第一类丢失更新:在没有事务隔离的情况下,两个事务都同时更新一行数据,但是第二个事务却中途失败退出, 导致对数据的两个修改都失效了。

  (5) 第二类丢失更新:不可重复读的特例。有两个并发事务同时读取同一行数据,然后其中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成第一次写操作失效。

   为此数据库设置了四个事务隔离等级,来解决不同的并发问题:

  READ_UNCOMMITTED(读未提交),事务中的修改,即使没有提交,在其他事务也都是可见的。该级别只能解决第一类丢失更新问题。

  READ_COMMITTED(读已提交),保证一个事务修改的数据提交后才能被另外一个事务读取,即另外一个事务不能读取该事务未提交的数据。(大多数数据库的默认级别,如sql Server,Oracle等)该级别隔离等级可以解决第一类丢失更新和脏读问题。

  REPEATABLE_READ(可重复读),保证一个事务相同条件下前后两次获取的数据是一致的。(mysql常用的)该隔离级别可以解决第一类丢失更新,脏读,不可重复读,第二类丢失更新的问题。

  SERIALIZABLE(可串行化),最高的隔离级别,强制事务串行执行。可解决上诉所提到的所有问题。

mysql隔离等级操作:   1.查询当前会话隔离等级:SELECT @@tx_isolation;

          2.查询系统当前的隔离等级:SELECT @@global.tx_isolation;

          3.设置当前会话隔离等级:SET session transaction isolation level + 隔离等级;

          4.设置系统当前隔离等级:SET global transaction isolation level + 隔离等级;

1.4 持久性

  事务执行成功以后,该事务对数据库所作的更改便是持久的保存在数据库之中。

持续更新。。。。。。。。。

原文地址:https://www.cnblogs.com/WhiskeyLover/p/9531834.html

时间: 2024-11-06 03:48:27

ACID理论和CAP理论的对比和总结的相关文章

关于ACID理论和CAP理论

事务(Transaction):   事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序.当对多个表进行更新的时候,某条执行失败.为了保持数据的完整性,需要使用事务回滚. ACID:RDBMS中的四个要素    ACID是只指数据库中事务正确执行的四个要素的缩小,包含原子性(Atomicity),一致性(Consistency),隔离性(Isola

从分布式事务到CAP理论和BASE理论

前言 我在<数据库事务和事务的隔离级别>和<再谈数据库事务隔离级别>两篇文章中详细介绍了数据库事务的隔离级别.本文将会从分布式的事务开始谈起,以及CAP理论和BASE理论. 分布式事务 随着分布式计算的发展,事务在分布式计算领域中也得到了广泛的应用.在单机数据库中,我们很容易能够实现一套满足ACID特性的事务处理系统,但是在分布式数据库中,数据分散在各台不同的机器上,如何对这些数据进行分布式事务处理具有非常大的挑战. 分布式事务是指事务的参与者,支持事务的服务器,资源服务器以及事务

从分布式一致性谈到CAP理论、BASE理论

问题的提出 在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景. 1.火车站售票 假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车票,然后拿着车票去检票口,再坐上火车,开始一段美好的旅行----一切似乎都是那么和谐.想象一下,如果他选择的目的地是杭州,而某一趟开往杭州的火车只剩下最后一张车票,可能在同一时刻,不同售票窗口的另一位乘客也购买了同一张车票.假如说售票系统没有进行一致性的保障,两人都购票成功了.而在检票口检票的时候,其中一

分布式领域CAP理论

分布式领域CAP理论具体如下:Consistency(一致性):数据一致更新,所有数据变动都是同步的:Availability(可用性):好的响应性能:Partition tolerance(分区容错性):可靠性: 定理:任何分布式系统只可同时满足二点,没法三者兼顾.忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍. 关系数据库的ACID模型拥有 高一致性 + 可用性,很难进行分区:Atomicity原子性:一个事务中所有操作都必须全部完成,要么全部不完成.Con

【转】分布式理论-CAP理论

一 CAP理论简述 海量数据管理中的一致性理论,包括CAP理论,BAS理论,数据一致性理论模型,以及现有的经典数据一致性技术.其中CAP (Consistency, Availability, Partition  Tolerance,) 理论是NoSQL数据库管理系统构建的基础. CAP定律说的是在一个分布式计算机系统中,一致性,可用性和分区容错性这三种保证无法同时得到满足,最多满足两个.该定律作为猜想在2000年提出,2002年被证实. 强一致性:系统在执行过某项操作后仍然处于一致的状态.在

CAP理论与MongoDB一致性、可用性的一些思考

大约在五六年前,第一次接触到了当时已经是hot topic的NoSql.不过那个时候学的用的都是mysql,Nosql对于我而言还是新事物,并没有真正使用,只是不明觉厉.但是印象深刻的是这么一张图片(后来google到图片来自这里): 这张图片是讲数据库(包括传统的关系型数据库和NOSQL)与CAP理论的关系.由于并NoSql并没有实践经验,也没有去深入了解,对于CAP理论更是一知半解.因此,为什么某一款数据库被划分到哪一个阵营,并不清楚. 工作之后对MongoDB使用得比较多,有了一定的了解,

分布式系统之CAP理论

任老师第一节主要讲了分布式系统实现时候面临的八个问题,布置的作业就是这个,查询CAP理论. 笔者初次接触分布式,所以本文主要是一个汇总. 一.CAP起源 CAP原本是一个猜想,2000年PODC大会的时候大牛Brewer提出的,他认为在设计一个大规模可扩放的网络服务时候会遇到三个特性:一致性(consistency).可用性(Availability).分区容错(partition-tolerance)都需要的情景,然而这是不可能都实现的.之后在2003年的时候,Mit的Gilbert和Lync

CAP理论

自打引入CAP理论的十几年里,设计师和研究者已经以它为理论基础探索了各式各样新颖的分布式系统,甚至到了滥用的程度.NoSQL运动也将CAP理论当作对抗传统关系型数据库的依据. CAP理论主张任何基于网络的数据共享系统,都最多只能拥有以下三条中的两条: 数据一致性(C),等同于所有节点访问同一份最新的数据副本: 对数据更新具备高可用性(A): 能容忍网络分区(P). CAP理论的表述很好地服务了它的目的,即开阔设计师的思路,在多样化的取舍方案下设计出多样化的系统.在过去的十几年里确实涌现了不计其数

关于Mongodb的Cap理论的思考(转载)

大约在五六年前,第一次接触到了当时已经是hot topic的NoSql.不过那个时候学的用的都是mysql,Nosql对于我而言还是新事物,并没有真正使用,只是不明觉厉.但是印象深刻的是这么一张图片(后来google到图片来自这里): 这张图片是讲数据库(包括传统的关系型数据库和NOSQL)与CAP理论的关系.由于并NoSql并没有实践经验,也没有去深入了解,对于CAP理论更是一知半解.因此,为什么某一款数据库被划分到哪一个阵营,并不清楚. 工作之后对MongoDB使用得比较多,有了一定的了解,