存储引擎基于表而不基于数据库
innodb的设计目标
为在线事务处理(Online Transaction Processing)的应用而生
innodb为什么性能这么好?
innodb使用mvcc来获得高并发性
what‘s MVCC?
名词解释
Multi-Version Concurrency Control(多版本并发控制)
一般用在何处?
用在数据库中以实现数据库的并发访问
用在代码中以实现事务内存
通俗的话
如果有人从数据库中读数据的同时,另一个人在写入数据。读数据的人不会看到“半写”或者不一致的数据
原理:
修改数据时,不直接用新数据覆盖旧数据,而是讲旧数据标记为过时的(obsolete)
并在另一处增加新版本的数据
好处
避免了删除操作在内存和磁盘造成的空洞的开销
坏处
需要系统周期性的整理,删除过时的数据
特点:
mvcc数据库读与写相互隔离,不需要加锁
读写并存时,写操作会根据数据库当前的状态创建一个新版本,并发的读会依旧访问旧版本的数据
除了mvcc还有哪些并发控制方法
加锁,让所以读者等待写者工作完成,最简单
总结
mvcc就是用同一份数据临时保存多版本的方式,实现并发控制
并发例子
两个事务1、2并发写
事务对对象做写操作之前,会先读
时间线 | 事务1 | 事务2 |
---|---|---|
0 | 读 | |
1 | 读 | |
2 | 写 | |
3 | 写 --->事务退出重新开始 |