从ACID到CAP及BASE

ACID

说到事务,肯定想到事务的ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

1.原子性:全部成功或者全部失败。

2.一致性:不好描述,取个例子:银行转账,TOM给JIM转1000元,TOM的账户减少1000,同时JIM的账户要增加1000。不允许出现只减少或者只增加的情况。

3.隔离性:事务之间不能项目干扰。包含四种隔离级别,即read_uncommitted、read_committed、repeatable_read、serializable。

3.1 read_uncommitted:该隔离级别会发生脏读。举个例子,事务A更新字段的值从1到10,事务B在此过程中可以读到该字段的值1,2,3,4,5…10。

3.2 read_committed:该隔离级别不可重复读。举个例子,事务A更新字段的值从1到10,事务B在此过程中只能读到事务A提交后的值10。若此时有另外一个事务执行更新字段从10到20,那么事务B再次读取会读到20。

3.3 repeatable_read:该隔离级别会发生幻读。举个例子,事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。

3.4serializable:最严格的事务隔离级别。要求所有事务都串行执行,不能并发。

4.持久性:事务一旦提交,事务的数据就会永久保存下来。

 

提供一个隔离级别对比表格:

隔离级别

脏读

可重复读

幻读

Read_uncommitted

存在

不可以

存在

Read_committed

不存在

不可以

存在

Repeatable_read

不存在

可以

存在

Serializable

不存在

可以

不存在

CAP

提到分布式事务,应该就会想到CAP。一个分布式系统是不可以同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)

1.一致性:分布式系统中多个副本数据保持相同。

2.可用性:系统提供的服务处于可用状态,能够在有限的时间后返回结果。

3.分区容错性:分布式系统在遇到任何网络分区故障的时候,必须能够保证对外提供给满足一致性和可用性的服务,除非整个网络出现问题。

以上三点,对于一个分布式系统不可能同时满足,但是分区容错性是最基本的。

放弃CAP定理

描述

放弃P

如果希望避免系统出现分区容错性问题,一种较为简单的做法是将所有数据放在一个分布式节点上。这样至少不会碰到由于网络分区带来的负面影响,如果放弃P,就意味着放弃系统可扩展性。

放弃A

如果遇到网络分区故障或者其他故障,那么受影响的服务需要等待一定的时间,在等待期间服务无法对外提供服务。

放弃C

放弃一致性是放弃数据的强一致性,保留数据的最终一致性。

BASE

base是Basically Available(基本可用)、soft state(软状态)、Eventually consistent(最终一致性)的缩写。

基本可用:分布式系统出现不可预知的故障时,允许损失部分可用性。例如响应时间上的损失、功能上的损失。

软状态:允许系统的在不同的节点的数据副本之间进行数据同步时存在延迟。

最终一致性:本质是保证数据最终能达到一致。包括因果一致性、读已之所写、会话一致性、单调读一致性、单调写一致性。

从ACID到CAP及BASE的更多相关文章

  1. 分布式理论系列(一)从 ACID 到 CAP 到 BASE

    分布式理论系列(一)从 ACID 到 CAP 到 BASE 一.ACID 1.1 事务的四个特征: (1) Atomic(原子性) 事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程 ...

  2. ACID、Data Replication、CAP与BASE

    ACID 在传数据库系统中,事务具有ACID 4个属性. (1) 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. (2) 一致性(Consiste ...

  3. NoSQL的三大基石(CAP、BASE和最终一致性)

    CAP,BASE和最终一致性是NoSQL数据库存在的三大基石.而五分钟法则是内存数据存储了理论依据.这个是一切的源头. CAP C: Consistency 一致性 A: Availability 可 ...

  4. 了解的CAP和BASE等理论

    CAP,BASE和最终一致性是NoSQL数据库存在的三大基石.而五分钟法则是内存数据存储的理论依据.这个是一切的源头. 几个名词解释: 网络分区:俗称“脑裂”.当网络发生异常情况,导致分布式系统中部分 ...

  5. 分布式CAP与BASE理论

    参考: CAP和BASE理论 https://juejin.im/post/5d720e86f265da03cc08de74 https://github.com/changmingxie/tcc-t ...

  6. 分布式必备理论基础:CAP和BASE

    大家好,我是老三,今天是没有刷题的一天,心情愉悦,给大家分享两个简单的知识点:分布式理论中的CAP和BASE. CAP理论 什么是CAP CAP原则又称CAP定理,指的是在一个分布式系统中,Consi ...

  7. 事务,acid,cap,paxos随笔

    事务ACID四个特性: A:原子性(Atomicity)C:一致性(Consistency)I:隔离性(Isolation)D:持久性(Durability) 原子性:语句要么全执行,要么全不执行,是 ...

  8. 闲聊CAP、BASE与XA

    CAP理论与BASE理论 首先要和大家说的就是大名鼎鼎的CAP理论与BASE理论了,这两个理论与解决分布式事务问题是密切相关的. 其实网上有很多关于CAP与BASE相关的文章,一写就写了一大堆,篇幅很 ...

  9. 分布式系列文章——从ACID到CAP/BASE

    事务 事务的定义: 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务. 事务的作用: 当多个应用程序并发访问 ...

随机推荐

  1. PHP的那些魔术方法(一)

    在PHP中,有一堆魔术方法,服务于类和对象.PHP虽然也是纯种的面向对象语言,但是之前的PHP还真不是,所以有一些面向对象的标准实现并不完善,比如重载.但是,我们可以通过一些魔术方法来弥补,例如__c ...

  2. PHP中的垃圾回收相关函数

    之前我们已经学习过 PHP 中的引用计数以及垃圾回收机制的概念.这些内容非常偏理论,也是非常常见的面试内容.而今天介绍的则是具体的关于垃圾回收的一些功能函数.关于之前的两篇介绍文章,大家可以到文章底部 ...

  3. fontawesome图标不显示的原因

    1.查看css路径是否正确 2.查看font文件夹内的字体文件是否引入 3.查看font文件夹内的字体资源路径是否正确

  4. EcShop调用显示指定分类下的子分类方法

    ECSHOP首页默认的只有全部分类,还有循环大类以及下面小类的代码,貌似没有可以调用显示指定大类下的子分类代码.于是就有这个文章的产生了,下面由夏日博客来总结下网站建设过程中ECSHOP此类问题的网络 ...

  5. SAP Shared Object 01 (共享对象)

    介绍 共享对象是在共享内存中的一个对象.共享内存是应用服务器中的一个内存区域,可以被应用服务器中的所有程序访问. 在共享对象出现之前,ABAP使用EXPORT 和 IMPORT语句实现内存区域中内容的 ...

  6. AT2164-[AGC006C]Rabbit Exercise【差分,倍增,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2164 题目大意 \(n\)只兔子编号为\(1\sim n\),第\(i\)只在坐标轴\(x_i\)处.然后\( ...

  7. 解除你学习Python自动化测试框架的所有疑惑,开启学习直通车

    学习框架第一步 前言 很多同学学完Python基础后出现迷茫......有同感的小伙伴,点赞关注........ 学习完Python还要学习什么? 什么是自动化测试框架? 如何搭建自动化测试框架? 甚 ...

  8. iOS实现XMPP通讯(一)搭建Openfire

    安装Openfire Openfire官网下载地址:https://igniterealtime.org/downloads/ (也是Spark客户端的下载地址) Openfire下载并安装后,打开系 ...

  9. 算法——快速排序迭代式和递归式的Java实现

    快速排序迭代式和递归式的Java实现 快速排序基于分治法的思想,在待排序表中任选一值作为中枢值 pivot,一趟快排将所有大于该值的元素置于一边,小于该值的元素置于另一边,这样一个元素在排序中的最终位 ...

  10. 8.JVM内存分配机制超详细解析

    一.对象的加载过程 之前研究过类的加载过程.具体详情可查看文章:https://www.cnblogs.com/ITPower/p/15356099.html 那么,当一个对象被new的时候,是如何加 ...