精华内容
下载资源
问答
  • 一致性是基础,也是最终目的,其他三个特性(原子性、隔离性和持久性)都是为了保证一致性的 在比较简单的场景(没有高并发)下,可能会发生一些数据库崩溃等情况,这个时候,依赖于对日志的 REDO/UNDO 操作就可以...

    一致性是基础,也是最终目的,其他三个特性(原子性、隔离性和持久性)都是为了保证一致性的

    在比较简单的场景(没有高并发)下,可能会发生一些数据库崩溃等情况,这个时候,依赖于对日志的 REDO/UNDO 操作就可以保证一致性

    而在比较复杂的场景(有高并发)下,可能会有很多事务并行的执行,这个时候,就很可能导致最终的结果无法保证一致性,

     

    原子性无法在高并发时保证一致性

    展开全文
  • 一致性:这个侧重点是业务逻辑规则,一致性的核心一部分是靠原子性实现的,而另一部分是逻辑实现。 举个例子吧: 转账:张三给李四转账100元。那数据库假设需要张三扣100,李四加100,记录一条流水。 如果流水没...

    其实一致性和原子性在事务里是两个不太相关,但又很相关的逻辑来的

    原子性:这个侧重点是事务执行的完整,一套事务下来,如果有一个失败,那整体失败。也就是要么大家一起成功,要么全都回滚。

    一致性:这个侧重点是业务逻辑和规则,一致性的核心一部分是靠原子性实现的,而另一部分是逻辑实现。

    举个例子吧:
    转账:张三给李四转账100元。那数据库假设需要张三扣100,李四加100,记录一条流水。
    如果流水没记录成功,那整体回滚,张三也没转账成功,李四也没多钱。这就是原子性的体现。

    而张三必须扣100,李四必须加100,这个就是一致性了,如果因为某些逻辑原因,导致张三扣了100,流水记录100转账,而李四只加了60。然后这3条操作都成功了,那原子性就符合了,但是一致性就不符合了

    其实在实际应用中肯定不是这么简单的例子的。往往是类似,买东西扣库存这类的逻辑,主表里有库存,库存表里有库存,然后就因为设计缺陷,就算加了事务还是出现了主表库存对不上库存表库存的问题,这个就是一致性不满足的了。

    展开全文
  • 概念 原子性:一个事务内操作...从这段话理解来看,所谓一致性,即,从实际业务逻辑上来说,最终结果是对、是跟程序员所期望结果完全符合 重点 一致性是基础,也是最终目的,其他三个特性(原子性...

    概念

    原子性:一个事务内的操作,要么同时成功,要么同时失败

    一致性:一个事务必须使数据库从一个一致性状态变换到另一个一致性状态,比如,A转给B,A减钱,B没有加上,就没有一致性

    对于一致性,知乎链接中内容如下:

     

    从这段话的理解来看,所谓一致性,即,从实际的业务逻辑上来说,最终结果是对的、是跟程序员的所期望的结果完全符合的

    重点

    一致性是基础,也是最终目的,其他三个特性(原子性、隔离性和持久性)都是为了保证一致性的

    在比较简单的场景(没有高并发)下,可能会发生一些数据库崩溃等情况,这个时候,依赖于对日志的 REDO/UNDO 操作就可以保证一致性

    而在比较复杂的场景(有高并发)下,可能会有很多事务并行的执行,这个时候,就很可能导致最终的结果无法保证一致性,比如(内容来自知乎链接):

     

    即,这个时候,(有高并发)原子性不能保证一致性。因为从单个事务的角度看,不管是事务 1 还是事务 2,它们都保证的原子性(单个事务内的所有操作全部成功了),但最终,它们并没有保证数据库的一致性(因为从逻辑上说,账户 A 应该增加了 200 元,而不是 100 元)

    所以,为了保证并发情况下的一致性,又引入了隔离性的概念

    隔离性:即事务之间感知不到彼此的存在,就好像只存在本身一个事务一样

    而对于怎样实现隔离性,又涉及到了乐观锁和悲观锁的概念(这两个概念还不大懂)

    小小引申:

    不考虑隔离性的时候,可能导致脏读、幻读和不可重复读的问题(这些问题,其实就是导致无法保证一致性的几种情况)

    而隔离级别的概念,就是为了解决上述三个问题

    展开全文
  • 最直接的区别是什么-------------------------------------------------------------------------------------
  • 看到别博客说,一致性是事务最终目的,原子性、隔离性、持久性都是为了实现一致性。 在这里,我打算验证一番。 怎么验证呢? 假设,这个事务系统如果是由我们来设计话。 首先,场景是这样,小范转100块...

    (PS:黄色字体为二次修改的内容)

    关于事务的一致性,《数据库系统概念》中是这样描述的

    第二段说的三个特性是指原子性、隔离性、持久性。

    就算这样,相信大家也是懵懵的,我也是,所以才会写下这篇博客。

    看到别的博客说,一致性是事务的最终目的,原子性、隔离性、持久性都是为了实现一致性。

    在这里,我打算验证一番。

    怎么验证呢?

    假设,这个事务系统如果是由我们来设计的话。

    首先,场景是这样的,小范转100块钱给小黄,那么这个事务系统必须要保证小范扣了100块钱,而且小黄也必须要加了100块钱。

    这个我们要怎么保证呢?

    有了,我们可以先用一本本子记下来,小范扣100块钱,小黄加100块钱,然后,我们再根据本子上写的,顺序执行,这样的话,小范或者小黄就没法耍赖了。

    OK,那么我们现在就开干,把这个事务系统开发出来,下面是伪代码:

    //事务系统
    abstract class transaction{
    
        void transaction(){
    
            /* todo:将所有操作写进日志
             * args: 事务名称, 事务操作, 事务写入状态(0 未写完 1已写完)
             */
            setLog("小范转100块钱给小黄", "小范-100", 0);
            setLog("小范转100块钱给小黄", "小黄+100", 1);
    
            //获取日志
            Log logs = getLog("小范转100块钱给小黄");
    
            //解析日志,获取操作事件
            Event events = parseLog(logs);
            
            //执行操作并回写日志状态标记该事务已完成
            doEvent(events, logs);
    
        }
    
    }

    OK,系统开发出来了,我们把它应用上去跑起来试下。

    但是,可能是因为计算机内存不够,系统跑到一半,闪退了。。。

    也就是doEvent的时候,小范扣了100块钱,这个时候闪退了。。。

    上数据库一看,完了,小范已经扣了100,但是小黄并没有增加100,事务也没有执行下去。

    所以我们这个事务系统是有问题的,我们的事务系统,应该要保证小范扣100,而且小黄也要加100,我们姑且称这种状态为一致性,因为我们要保证这两个操作对数据而言是一致的嘛。

    从目前来看,我们这个事务系统,没有完全实现一致性,那如果发生了这种状况,系统闪退停机等等异常情况,我们该怎么处理,才能保证一致性呢?

    有了,我们可以在日志中多加一个状态,用来标记该操作有没有执行,然后用一个定时器,每隔几秒找出日志中没有完成的事务,把它执行完,这样一来,就能保证小范扣了100,小黄加了100了,哪怕中途停机了,也能用定时器把事务执行完。

    就这样测试了十来次,结果跟操作都一致,确实能保证一致性了,就正式给用上生产环境了。

    可是才不到一天,就出问题了,怎么呢?有个业务,小张向老李转账300元,可是小张的账户上只有298,该死的初级程序员又没有对小张的金额作校验,直接就给执行了。

    这下小张的账户余额变成了-2,老李的账户变成了300。闹了个大笑话。

    这虽然主要责任不在我们开发的事务系统,但是,我们也要做处理,也就是在小张的余额做加减的时候,减成了负数,这个时候程序应该需要抛出异常的,不能让程序再执行下去了,所以,这就需要我们的事务系统,可以在执行到一半的时候,回滚到初始状态。

    也就是说,如果同一个事务中,有操作ABC三个顺序操作,操作A成功了,操作B失败了,那这操作C还要执行吗?当然不能,这种情况,B失败了,我们就只能把A给回滚到操作之前。

    这样一来,我们这个事务系统就是,要么事务都完成,要么事务都不完成,我们姑且就把这个叫做原子性吧。

    增加了原子性的功能后,事务系统又开始跑了。

    过了几天,又出问题了,怎么呢?原来啊,小范有300块钱,小张向小范转了500块钱,事务还没操作完呢,小刘又给小范转了300块钱,这样一来,问题就来了,小张给小范转500,本应该事务结束的时候小范有800块钱,可是小刘又给小范转了300,还是用小范原有的300去增加的,这样一来,小刘的事务结束,小范就有600块钱,小张的事务执行完,把800写回给小范,接着,小刘的事务也执行完,把600写回给小范,导致最终小范账上只有600块钱,小张的500被吞了。

    这样,数据完全混乱了。问题出在哪呢?在于小张事务执行的时候,读取到小范有300,事务没完,小刘也读取到小范有300,这样就错乱了,我们应该要让小张在转账的时候,小刘要等小张转完了,才能转。这样,才能解决掉数据混乱的问题,我们,姑且把这个叫做隔离性。

    隔离性修复完之后,项目又开始运作了,事务系统运行了很长一段时间,也没有出现问题。

    到这里,验证就结束了,上面写日志的行为其实就是事务的持久性,也可以看到,上面出现的隔离性、原子性、持久性,也都是为了彻底实现一致性而产生的。

    所以,总的来说,一致性是一个比较笼统的概念,是事务的基础,一致性和原子性的区别就是,原子性强调的是操作的完整,要么都成功、要么都不成功,而一致性包含的比较多,数据的一致性啊等等。

    不过其实,我觉得一致性不应该跟原子性、隔离性、持久性放在一起,因为这三个都是为了实现一致性,如果有大佬知道,麻烦跟我说下原因。

    到这,本文就结束了,写的真的不是很好,以后,要是我对事务一致性、原子性有了新的理解,我会再回来修改的,也欢迎各位大佬留言或者私聊我,给我写关于一致性的启发。

    知乎上有个回答也是写的蛮好的,大家可以看看,https://www.zhihu.com/question/30272728

    展开全文
  • 事务一致性原子性的区别

    千次阅读 2017-12-29 14:19:50
    一致性:这个讲的是事务是按照预期生效的,也就是你举例的那个转账的,一致性的核心一部分是靠原子性实现的,而另一部分是逻辑实现。 举个例子吧: 转账:张三给李四转账100元。那数据库假设需要 张三扣100
  • 为什么会出现事务 [1]Transactions are not a law of nature; they were created with a purpose, namely to simplify the programming model for applications accessing a database....to ignore certain potential ...
  • ACID CAP 一致性的区别

    千次阅读 2019-01-02 13:39:54
    ACID 代表数据库四个基本要素,分别是 原子性 Atomicity 一致性 Consistency 隔离性 Isolation 持久性 Durability CAP 则是分布式系统三要素 ,分别是 ...数据库 ACID 的一致性,我们又称之为内部一致性...
  • 事务是一个高度抽象概念。事务要解决问题是如何使多次操作,对外部看起来是一个整体操作。理想事务是一把锁,把一个一个事务按照队列一样...事务=锁+MVCC怎么理解一致性一致性是指数据处于一种语义上有...
  • 本文将介绍两阶段提交协议基于两阶段思想XA协议,TCC协议,用于解决分布式事务中的原子性。 2 面向数据库领域二阶段提交协议 2PC,面向数据库领域 简介:分为准备提交两个阶段。 准备阶段,协调组询问所有...
  • 事务特点:原子性一致性、隔离性、持久性。 分析性系统: 一种快速回答多维分析查询实现方式; 通过数据分析评估组织业务经营状态,并进一步辅助决策; 它也是更广泛范畴所谓商业智能一部分, 商...
  • MySQL事务引擎的区别 MySQL事务 所谓事务:就是当要完成某个事情时,这个事情包含多个任务;当所有的任务都执行成功,这个事情就是成功的,所有改动的数据都会生效;当有某一个任务执行失败,这个事情就是失败的...
  • innodbmyisam的区别

    2019-04-25 14:42:45
    1.InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力多版本并发事务安全,包括ACID(原子性一致性、持久性、隔离性)。如果应用中需要执行大量INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高...
  • EurekaZooKeeper的区别

    万次阅读 多人点赞 2018-09-11 11:06:20
    (MySql,Oracle,SqlServer等关系型数据库)遵循原则是:ACID原则(A:原子性。C:一致性。I:独立性。D:持久性。)。 NoSql==> (redis,Mogodb等非关系型数据库)遵循原则是:CAP原则(C:强一致性。A...
  • Mysql 事务的区别

    2020-04-11 02:58:36
    Mysql 事务的区别事务的4要素事务的隔离级别锁使用锁来保证幂等性 事务的4要素 事务是必须满足4个条件(ACID): 原子性(Atomicity,或称不可分割性) 一致性(Consistency) 隔离性(Isolation,又称独立性...
  • zookeepereureka的区别在哪?传统的关系型数据库是ACID(原子性,一致性,独立性,持久性), nosql数据库是CAP(强一致性,可用性,分区容错性),分布式系统只能3进2,三个选两个 eureka遵守AP原则,zookeeper遵守CP原则 CA...
  • eurekazookeeper的区别

    2019-10-17 15:09:09
    (MySql,Oracle,SqlServer等关系型数据库)遵循原则是:ACID原则(A:原子性。C:一致性。I:独立性。D:持久性。)。 NoSql==> (redis,Mogodb等非关系型数据库)遵循原则是:CAP原则(C:强一致性。A:可用...
  • volatilesynchronized的区别

    千次阅读 2018-11-18 15:56:01
    在Java中,为了在多线程环境读写数据时保证数据的一致性,可以采用两种方式:线程同步使用volatile关键字。 线程同步 资源共享两个原因是资源紧缺共建需求。线程共享CPU是从资源紧缺维度考虑,而多线程共享...
  • 我们提出了一种基于联合子空间恢复增强局部性的鲁棒灵活标签一致性词典学习方法,称为鲁棒灵活判别词典学习(RFDDL)。 RFDDL主要通过增强鲁棒性以稀疏错误并更准确地编码位置,重构错误标签一致性来提高数据...
  • AtomicLong的原理是依靠底层的cas来保障原子性的更新数据,在要添加或者减少的时候,会使用死循环不断地cas到特定的值,从而达到更新数据的目的。 LongAdder在AtomicLong的基础上将单点的更新压力分散到各个节点,...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 373
精华内容 149
关键字:

原子性和一致性的区别