BoltDB 事务实现
BoltDB 支持多读单写方式的并发级别
事务操作会锁表
它的 MVCC 为 2 个版本,当前版本和正在写的版本
多读:可以并发读当前版本
单写(串行写):写时拷贝当前 B+ 树,构建新 B+ 树,最后原子切 meta 页
MySQL InnoDB 事务实现
MySQL InnoDB 支持多读多写方式的并发级别
MySQL 事务不会锁表,不同行记录的写操作,可以并发(某些不行,注意间隙锁)
它的 MVCC 为 N 个版本,粒度是按行可以有多个版本
多读:一致性非锁定读,不同事务隔离级别读取不同行版本数据
多写:不同行的写,可以并发
MySQL InnoDB 事务特点
MySQL InnoDB 最牛逼的地方是:
- 多个事务,会同时修改 B+ 树
- 对相同行的修改,才会被锁阻塞
也就是说,MySQL 忙时, B+ 树其实时刻是不一致状态
这里主要靠 undo 日志提供的 MVCC 机制,提供视图上的一致
这也是 4 种事务隔离级别产生的原因