acid与acp详解数据库

传统关系型数据库事务acid

原子性、一致性、隔离性、持久性

1、A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。

2、C (Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

例如库存,多少个并发,库存最终量不能错。

例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。

一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间
并发事务有多少。
也就是说:如果事务是
并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账
案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论
并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性。

3、I (Isolation) 独立性/隔离性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。

4、D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

——————— 本文来自 纳尔逊皮卡丘 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zhaobig/article/details/78630843?utm_source=copy 

分布式数据库cap

NOSQL数据模型和CAP原理

IT虾米网

1. 一致性(Consistency):任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的;
2. 可用性(Availability):每一个操作总是能够在确定的时间内返回,也就是系统随时都是可用的。
3. 分区容忍性(Partition Tolerance): 在出现网络分区(比如断网)的情况下,分离的系统也能正常运行。

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个要求,最多只能同时较好的满足其中的两个。

互联网项目,P是必须满足的,

C和A,通常选择A

即PA

而传统企业级项目,能会是PC

传统的关系型数据库在功能支持上通常很宽泛,从简单的键值查询,到复杂的多表联合查询再到事务机制的支持。而与之不同的是,NoSQL系统通常注重性能和扩展性,而非事务机制(事务就是强一致性的体现)。

CAP的证明很简单,假设两个节点集{G1, G2},由于网络分片导致G1和G2之间所有的通讯都断开了,如果在G1中写,在G2中读刚写的数据, G2中返回的值不可能G1中的写值。由于A的要求,G2一定要返回这次读请求,由于P的存在,导致C一定是不可满足的。

放弃P:如果想避免分区容错性问题的发生,一种做法是将所有的数据(与事务相关的)都放在一台机器上。虽然无法100%保证系统不会出错,但不会碰到由分区带来的负面效果。当然这个选择会严重的影响系统的扩展性。

放弃A:使用网络分区,等数据一致后再去取数据,因此在等待期间系统无法对外提供服务,失去可用性。

放弃C:这里所说的放弃一致性,并不是完全放弃数据一致性,而是放弃数据的强一致性,而保留数据的最终一致性。以网络购物为例,对只剩下一件库存的商品,如果同时接受到了两份订单,那么较晚的订单将被告知商品告罄。

因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:

  • CA-单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强。
  • CP-满足一致性,分区容错的系统,通常可用性不是特别高
  • AP-满足可用性,分区容错性的系统,通常可能对一致性要求低。

根据CAP理论,在分布式存储系统中最多只能实现上面的两点,而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须要实现的。

所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。

  • CA:传统Oracle、mysql数据库
  • AP:Tokyo Cabinet、SimpleDB、couchDB、Riak
  • CP:redis、mongodb

资料来源:IT虾米网

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/3860.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论