分布式事务一般会牺牲强一致性,保证高可用性和分区容错性,最终一致性。
CAP理论 :
-
C:一致性 各个节点之间的数据一致性
-
强一致性: 客户端看到的跟数据库中的一样,不存在中间状态
-
最终一致性:客户端看到的跟数据库中的可以暂时不一样,允许在中间状态,只要最终保持一致就可以
-
弱一致性:允许部分数据不一致
-
-
A:可用性: 就算有某个服务宕机(坏了)整个系统也能用。(系统提供的服务,始终能在有限的时间内,对每个用户请求返回正常结果)
-
P:分区容错性(可扩展性)必须要保证的
ACID:事务的四大特点
主要是为了保证本地事务的执行前后数据的完整
-
原子性:不可分割,要么全部成功,要么全部失败,不允许部分执行。
-
隔离性:多个事务并发执行时,会将不同的事务隔离起来,具体会根据不同的事务隔离级别进行处理,MySQL默认 可重复读 。(建议使用 读已提交)
-
为什么建议使用读已提交而不是 可重复读。
-
在RR隔离级别下,存在间隙锁,导致出现死锁的几率比RC大的多!
-
在RR隔离级别下,条件列未命中索引会锁表!而在RC隔离级别下,只锁行
-
-
一致性:(将数据从一个正确的状态,转换成另一个正确的状态)
-
持久性:数据修改后一定是永久保存的,即使数据库故障出错也因该可以恢复数据。
事务的隔离级别
-
读未提交: A事务读到了 B事务还未提交的事务 (脏读)
-
读已提交: 可能幻读,不会脏读。
-
可重复读: 比如 A查询“张三”不存在 ,B在此时插入张三提交, A插入“张三” 失败。 幻读链接
-
串行化: 在每条读的数据上加上锁,使之不可能发生冲突 ,但可能出现很多超时现象