关于分布式事务分析与对比

## 分布式事务 笔记
---
### 一、CAP理论,分布式系统三要素:
- C 一致性(Consistency)数据都一样;
- A 可用性(Availability)服务响应时间可接受;
- P 分区容错性(Partition tolerance)一个崩了其他能用。

   
CAP为什么提出同时只能满足2点,比如:
- 1、满足C,所有数据都一样,则需要同步数据;
- 2、满足A,服务都是正常的且响应时间也可以接受。
- 3、满足P,肯定是多服务或者多服务器。
  
  
- a、满足C、A 所有数据一样,时间要短,那么服务器越多数据同步时间越长,所以P不满足。 
- b、满足C、P 所有数据一样,服务器多,那么时间不可能短,用户读取非最新数据,所以A不满足。
- c、满足A、P 时间短、服务器多C就不可能满足。

---
### 二、ACID理论,主要是关系型数据库:
- 原子性(Atomicity) 全部成功或全部失败回滚;
- 一致性(Consistency) A与B一共有100块钱,不管怎么转账一共还是只有100;
- 隔离性(Isolation) 并发执行的事务之间不能相互影响,也就是解决事务并发的安全问题; 
- 持久性 (Durable) 事务提交后就是永久的。
  
  
  **事务隔离性内涵以及并发带来的问题有:**
  
  1. 脏读(事务读取另一个事务未提交数据)

  a) 两个并发事务A,B。A修改数据未提交,B读取了A未提交的数据;
  
  b) 隔离级别设置为 Read Committed 时,就可以避免脏读,但是仍可能会造成不可重复读;
  
  c) Sql Server、Oracle 默认级别就是 Read committed。
 
  
  2. 不可重复读(一个事务多次查询返回不同值)
  
  a) 两个并发事务A,B。A读取了数据,B修改数据后,A再读取则数据不同了;
  
  b) 隔离级别设置为Repeatable read时,可以避免不可重复读;
  
  c) MySQL 默认隔离级别就是 Repeatable read。

    

  3. 幻读(事务修改数据后,另一个事务又插入数据,影响读取结果)

  a) 两个并发事务A,B。A修改数据后,B插入数据,A又查询发现B插入数据没修改。;
  
  b) 隔离级别设置为Serializable(最高的事务隔离级别)时,不仅可以避免脏读、不可重复读,还可以避免幻读。

    
  **MySql四种隔离级别:**

  隔离级别与并发性能成反比,隔离级别越高,并发性能越低

- Serializable (串行化):最高级别,可避免脏读、不可重复读、幻读的发生;
   
- Repeatable read (可重复读):可避免脏读、不可重复读的发生;
    
- Read committed (读已提交):可避免脏读的发生;
    
- Read uncommitted (读未提交):最低级别,任何情况都无法保证。

---
###  三、**数据库的并发控制(锁):**

    乐观锁与悲观锁一种解决问题的思想。
    乐观锁的理念是:
    乐观锁不加锁去执行某项操作,如果发生冲突则失败并重试,直到成功为止。假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性;

    悲观锁的理念是:
    悲观锁也就是资源独占,其他线程挂起,直到锁释放。假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
    
##### 乐观锁:
- 乐观锁不锁任何东西,而是提交事务时检查记录是否被其他事务修改,没有则提交,有则回滚;
- 乐观锁采用的实现方式一般是记录数据版本(<font color='red'>版本号、时间戳</font>);
- 读取数据时将版本标识的值一并读出,数据每更新一次同时对版本标识进行更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值