回答思路:
1、先谈mysql架构
2、引出并发的场景以及事物的影响
3、为了解决并发引出MVCC
4、MVCC的具体实现原理
- mysql的逻辑架构大概分为四层:
第一层: 服务层(为客户端服务)
为请求做连接处理,授权认证,安全等。
第二层:核心服务
比如查询解析,优化,缓存,内置函数。存储过程,触发器,视图等。对于第二层来说,所以跨存储引擎的功能都在这一层实现。
第三层:存储引擎
负责mysql中数据的存储和提取。服务器通过api与存储引擎通信,这些接口屏蔽了存储引擎之间的差异。也就是说,接口的存在,导致不同存储引擎的差异不会影响到上层查询过程。
架构分层之后,可以更好的理解一些问题,比如我们很关心的并发问题:mysql层面的并发控制,实际上是分为两种:
服务层的并发
存储引擎层的并发的
第四层:系统文件层,保存数据、索引、日志等。
- 事务隔离级别
大家都知道数据库事务具备ACID特性,即Atomicity(原子性) Consistency(一致性), Isolation(隔离性), Durability(持久性)
原子性:要执行的事务是一个独立的操作单元,要么全部执行,要么全部不执行
一致性:事务的一致性是指事务的执行不能破坏数据库的一致性,一致性也称为完整性。一个事务在执行后,数据库必须从一个一致性状态转变为另一个一致性状态。
隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行,SQL92规范中对隔离性定义了不同的隔离级别:
读未提交(READ UNCOMMITED)->读已提交(READ COMMITTED)->可重复读(REPEATABLE READ)->序列化(SERIALIZABLE)。隔离级别依次增强,但是导致的问题是并发能力的减弱。
事务隔离级别
MYSQL 事务日志
MVCC实现
具体点击这里参考