事务
分布式事务:
事务是什么?
事务处理的常见问题
单机事务和分布式事务
分布式事务遇到的问题
事务简介
事务的本子就是(锁 和 并发的关系)
优势:容易理解
劣势:性能较低
容易理解的模型性能都不好,性能好的模型都不容易理解。
性能好,锁的颗粒度就要尽可能的小。颗粒度小就增加了开发的难度。
事务简介-----------单个事务单元
一个事务单元 Bob 给Smith 100块
事务要保证的是就是要保证事务的一致性。
ACID(保证事务完整性)
这些也是一个事务单元 :
1、商品要建立一个是基于GMT_Modified 的索引;
2、从数据中读取一行记录;
3、想数据库写入一行记录,同时更新这行记录的所有索引
4、删除整张表
一组事务单元
Smith 给了job 100块
事务-------产生的原因
事务单元之间的happen-before 关系
读写 写读 读读 写写
问题是:
如何能够以最快的速度完成?
又如何保证上面四种操作的逻辑顺序,又是很重要的。
事务 -------排队发
序列化读写
优势-------不需要冲突控制
劣势-------慢速设备。。。。。。。。。。。。
事务--------------排他锁
针对同一个单元的访问进行控制(不同的事务单元可以并行进行)。
如果有能发生冲突那就串行,如果没有冲突的可能就并行。
事务单元之间的happen ------before 关系
事务--------------读写锁(I 隔离级别(读未提交、读已提交、可重复读、串行执行)
现在主流的数据库实现的方法: MVCC是数据库的并发性非常好。
MVCC可以让数据库写读都不会阻塞,但是也有代价:系统实现的并发有难度。(undo log 和redolog文件超大的问题)
能够做到写不阻塞读;
事务单元与事务单元之间的关系。
事务处理常见问题:
事务处理:
事务谁先谁后 一个读请求应该读哪一个写之后的数据?(事务版本号)
逻辑时间戳
SCN(oracle)
TRX_id (innodb)
事务处理------ 故障恢复
可能的错误情况
业务熟悉不匹配时,需要回滚。
系统崩溃时 ,需要回滚
事务处理-------------死锁与死锁监测
死锁的解决方案:
尽可能不死锁
碰撞检测(锁等待相互锁等待,杀死其中的一个锁等待,这个是应用最多方法)
等待锁超时
从单机事务到分布式事务
分布式事务与单机事务,相同与不同