事务ACID
1,A(atomiccity)原子性:
一个事务内的所有操作是不可拆分的,要么全部操作成功,要么操作失败
例如:第一个人给第二个人转账100元,(1)第一个人账户减100元(2)第二个人账户加100元。
原子性就是,要么(1)(2)都执行成功,要么都执行失败,不可能出现(1)成功了,(2)失败了。
2,C(一致性)一致性
一个事务操作前和操作后的状态要一致
例如:上面的例子,
在转账前(1)第一个人账户内是100元(2)第二个人账户内是0元。
在转账后(1)第一个人账户内是0元(2)第二个人账户内是100元。
而不会出现转账之后第一个人账户内是100元第二个人也是100元。
3,我(隔离)独立性
并发的两个事务之间不会相互影响,相互隔离。一个事务不能读取到另一个事务正在修改没有提交的数据。
例如:一个人转账100元给另一个人,
转账需要两步(1)减100元,(2)给另一个人加一百元
转账的这个人此时不能查到(1)操作之后的数据
4,D(耐久性)持久性
事务完成后所做的改动都会被持久化,修改是永久性的。
NoSQL CAP + BASE
1,CAP原理:一个分布式系统不可能同时很好的满足一致性,可用性,分区容错性这三个需求。最多只能满足两个。
--C(Consistency)强一致性
--A(可用性)可用性
--P(Partition tolerance)分区容错性
--BASE就是为了解决关系性数据库强一致性引起的问题引起的可用性降低的问题。
BASE是三个属于的缩写:基本可用(基本可用)软状态(软状态)最终一致(最终一致)
通过让系统放松对在某一时刻数据的一致性的要求以换取系统整体伸缩性和性能上的改观。
因此根据CAP原理将NoSQL的数据库分成三类:(CAP三进二)
(1)满足CA原则:单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
(2)满足CP原则:满足一致性,分区容错性的系统,通常性能不是特别高。
(3)满足AP原则:满足可用性,分区容错性的系统,通常对一致性要求低一些。
分布式架构必须做出取舍
由于当前网络硬件肯定会出现延迟丢包的问题所以,P分区容错性是必须实现的,所以智能在C一致性和A可用性之间
CA传统数据库(Oracle,mysql)
AP大多数网站架构选择
CP Redis,mongodb