数据库ACID和CAP原则

1 单机场景

单台物理机(服务器、主机)中的关系型数据库遵循ACID原则,对应关系如下表:

序号原则描述
1原子性(Atomicity)事务所有操作要么全部完成,要么全部不完成,一荣俱荣,一损俱损
2一致性(Consistency)事务开始或结束时,数据库状态一致(中间状态的数据对外不可见,只有最初状态和最终状态的数据对外可见),保证操作前和操作后数据结构一致,监控数据的中间状态,若有错误,则立即回滚
3隔离性(Isolation)多个事务操作,互不干扰,事务锁保证事务的隔离,可能会出现死锁
4持久性(Durability)事务完成之后,无法回滚

一致性在前,原子性在后,事务进行时,首先由一致性监控操作过程中数据是否一致,若数据结构发生变化,则进行回滚,这时原子性保证了数据回滚到初始状态。

2 分布式场景

分布式场景,数据分布在多台物理机(服务器、主机)中,数据库遵循CAP原则,对应关系如下表:

序号原则描述
1一致性(Consistency)数据一致更新,所有机器数据的变动同步进行
2可用性(Availability)高可用性,多台物理机集群中部分机器故障,其余部分物理机是否能正常响应客户端读写请求
3分区容错性(Partition tolerance)分区为网络分区(如上海和北京的网络区),容错性只多台物理机容忍网络通信故障的能力,多台物理机间通信不能在时限内达成数据一致,说明物理机通讯异常(出现网络分区),必须在C和A之间进行选择

3 CAP放弃原则

序号放弃描述
1C放弃实时一致性,即数据的一致性时间变长,部分物理机数据先变化,其余物理机一段时间后变化,但最终多台物理机数据是一致的
2A放弃高可用,任一单台物理机发生故障,整体物理机集群全部不对外提供数据读写服务
3P放弃分区容错性,当网络分区异常时无法保证多台物理机数据的一致

4 CAP选择

序号方案数据库说明
1CARDBMS保证数据强一致性和高可用性,但网络分区故障时,数据服务不可用
2CPMongoDB、HBase、Redis保证数据强一致性和网络故障容灾,但,任意物理机故障时,数据不可用
3APCouchDB、Cassandra、DynamoDB、Riak保证数据网络故障可用和物理机故障容灾,但牺牲数据实时一致性

5 BASE

BASE理论是权衡强一致性和高可用的结果,介绍如下表:

序号属性描述
1基本可用(Basically Available)系统出现了不可预知个故障,但是仍可用,此时响应速度变慢、功能缩水,但可正常工作
2软状态(Soft State)允许物理机数据存在中间状态,允许多物理机数据时延
3最终一致性(Eventually Consistent)多物理机中的数据一致存在时间间隔,但时延期之后,物理机集群数据完全一致

5 小结

  • 理论上分布式过程中不存在同时满足CAP三个特性的分布式集群;
  • BASE理论对CAP中一致性和可用性的权衡,即使无法做到强一致性,但每个应用可以根据自身业务特点,采用适当的方式使系统达到最终一致性;
  • 不同的场景需要不同的搭配方案,如CA,CP,AP;
  • 对于机器数量庞大,时常出现网络故障,可用性是必要的,因此使用AP,对于数据强一致的场景(如银行、证券)需要权衡CA和CP,当网络故障时,CA原则的数据完全不可用,CP原则部分可用;当机器部分故障时,CA原则数据可用,CP原则的数据完全不可用;

【参考文献】
[1]https://wenku.baidu.com/view/d2ae9c43571252d380eb6294dd88d0d233d43c21.html?from=search
[2]https://www.cnblogs.com/autointerface/p/11959711.html
[3]https://wenku.baidu.com/view/d245c9b6ec630b1c59eef8c75fbfc77da369971b.html?from=search
[4]https://www.cnblogs.com/frank2015/p/9554180.html
[5]http://blog.sina.com.cn/s/blog_53e5177d0102x8k6.html
[6]https://baijiahao.baidu.com/s?id=1634401106583534524&wfr=spider&for=pc

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值