MySQL- 存储引擎

Mysql逻辑架构视图

 

主要存储引擎

引擎

Mysql版本事务锁粒度主要引用忌用
InnoDB全部支持支持Mvcc行级锁事务处理 
MyISAM全部不支持支持并发插入的表锁Select,insert高负载读写并重的场合
MyISAM  Merge全部不支持支持并发插入的表锁分段归档,许多全局查找
Memory(HEAP)全部不支持表锁中间计算,静态数据查证大型数据集,持久性存储,重启后数据丢失
Falcon6.0支持支持Mvcc行级锁事务处理 
Archive4.1支持支持Mvcc行级锁日志记录,聚合分析,只支持insert,select操作需要随机读取 删除
CSV4.1不支持表锁日志记录,大规模加载外部数据需要随机读取,索引等
NDB Cluster5.0支持行级锁高可用集群典型引用
Maria6.x支持支持mvcc行级锁替代MyISAM 

可以通过show table status like '表名称'\G 来查看表的信息

 锁粒度 

1.表锁 (Table Lock)

     当一个用户对表进行写操作(新增,删除,修改), 会获得一个写锁,写锁会禁止其他用户的读写操作,当无人做写操作时,其他用户才能获得读锁,读锁与读锁之间不会冲突。表锁是最小锁策略,其性能良好,表锁由Mysql本身 和 存储引擎实现。

2.行级锁(Row Lock)

  行级锁可以支持最大的并发处理,同时也带来了最大锁开销,行级锁在InnoDB,Falcon存储引擎出以实现。 行级锁由存储引擎实现,而不是Mysql服务器本身。

3.MVCC行级锁

   MVCC 是一种多版本并发控制(Multiversion Concurrency Control)的技术,MVCC不是mysql独有的技术,Oracle,PostgreSQL等其他数据库也使用了该技术。

每种存储引擎实现MVCC的方式是不同的,例如乐观并发控制,悲观并发控制,下面以Innodb的实现方式 说说其简要工作原理:

Innodb通过为每个数据行增加两个隐士的字段来实现MVCC,这两个隐士字段记录了行的创建的时间,以及过期时间(删除时间),每一行都存储了事件发生时的系统版本号,用来替代事件发生时的实际时间。每一次开启一个新的事务时,版本号都会递增,每个事务都会保存它在开始时的“系统版本”的记录,而每个查询都会根据事务的版本号,检查每行数据的版本号。

SELECT

    Innodb 检查每行数据,确保它们符合两个标准

   *Innodb只查找版本号小于或等于当前版本号的数据,这确保了当前事务读取的数据行都是在事务开始前已存在,或者是当前事务创建或修改的行。

   *数据行的删除标识必须是未定义,或者是大于事务版本的,这确保了查询出来的数据在事务开始时是未被删除的。

INSERT

   Innodb为新增的数据行记录当前版本号

DELETE

  修改要删除行的过期时间标识

UPDATE

   为每个需要更新的行建立一个新的行的拷贝,并为新的行拷贝记录当前系统版本。也为更新前的数行记录系统版本号,作为旧行的删除版本标识。保存这些额外记录的好处是大多数并发操作都不必申请枷锁,这使读操作变得更快,因为读操作是要选取符合标准的数据行即可,这种方式的缺点是:存储引擎必须为每行数据存储更多的额外数据,浪费空间,做更多的检查工作,以及整理一些额外的数据带来的开销。

加锁策略并发系统开销引擎
表级加锁最低最低MyISAM,Merge,MyISAM  Merge
行级加锁NDB Cluster
支持MVCC的行级加锁最高最高InnoDB,Falcon

选择合适的引擎

1.事务

    如果应用需要事务处理操作,Innodb仍是最稳定的,如果不需要事务,主要操作是处理一些SELECT和INSERT操作或专用日志记录,那么MYISAM是一个不错的选择。

2.并发

3.备份

4.崩溃后恢复

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值