Mysql 体系结构

MySQL体系结构

  • 链接池组件
  • 管理服务和工具组件
  • SQL接口组件
  • 查询分析器组件
  • 优化器组件
  • 缓存组件
  • 插件式表存储引擎
  • 物理文件

存储引擎

可以根据MySQL官方手册给出的定义存储引擎的过程来编写符合自己需求的存储引擎。
或者使用官方提供的存储引擎。

InnoDB存储引擎

InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理的应用。其特点是行锁设计、支持外间,并支持类似于Oracle的非锁定读(默认读取操作不会产生锁)。

InnoDB存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由InnoDB存储引擎自身进行管理。可以将每个独立的表单独存放在一个idb文件中。InnoDB存储引擎支持使用裸设备来建立其表空间。

InnoDB通过多版本并发控制(MVCC)来获得高并发性;
实现了SQL标准的4种隔离级别,默认为REPEATABLE;
使用Next-KeyLocking策略避免欢度现象的产生;
提供了插入缓冲(Insert Buffer);
二次写(Double Write);
预读(Read Ahead)。

Innodb存储引擎采用了聚集的方式,每张表的存储都是按照主键的顺序进行存放。如果没有显式地在表定义时制定主键,InnoDB存储引擎会为每一行生成一个6字节的RowId,并以此作为主键。

MyISAM存储引擎

MyISAM引擎主要面向一些OLAP(联机分析处理)的应用。 因此不支持事务、表锁设计,但支持全文索引。

它的缓存池只缓存索引文件,不缓存数据文件,数据文件的缓存交给操作系统来完成。
MYISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。

Maria存储引擎

其目标是用来替代原有的MYISAM,可以看作是MyISAM的后续版本。
特点是支持缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事务和非事务安全的选项。
更好的BLOB自负类型的处理性能。

NDB存储引擎

也叫NDBCluster存储引擎,壮阳药用于MySQL Cluster分布式集群环境。

NDB的特点是数据全部放在内存中,因此主键查找的速度极快,并且通过添加NDB数据存储结点可以线性地提高数据库性能,是高可用、高性能的集群系统。
由于其存储引擎特性,Join操作是在Muysql数据库层完成,而不是在存储引擎层完成。

Memory存储引擎

表中的数据存放在内存中,适合用于存储临时数据的临时表,以及数据仓库中的纬度表。Memory存储引擎默认使用哈希索引。

Memory存储引擎不支持表锁,并发行能差,不支持TEXT和BLOB列类型。存储varchar时是按照char的方式进行的。

MySQL数据库使用Memory存储引擎作为临时表来存放查询的中间结果集。
如果中间爱护你接过机大于Memory存储引擎表的容量设置,又或者包含有TEXT或者BLOB列类型的字段,Mysql会把中间结果集转换到MyISAM存储引擎表存放到磁盘中(因为MyISAM不缓存数据文件),因此会有性能损失。

Archive存储引擎

用来存储归档数据,如日志信息等。
使用zlib算法将数据行进行压缩后存储,压缩比达到1:10.
该引擎只支持INSERT和SELECT操作,该引擎使用行锁来实现高并发的插入操作。