MySQL 体系结构与存储引擎

数据库:

物理操做系统文件或其余形式文件类型的集合。在MySQL数据库中,数据库文件能够是frm, MYD, MYI, ibd结尾的文件。当使用NDB引擎时,数据库的文件可能不是操做系统上的文件,而是存放于内存之中的文件,可是定义仍然不变。数据库

实例:

MySQL数据库由后台线程以及一个共享内存区组成。共享内存能够被运行的后台线程所共享。须要牢记的是,数据库实例才是真正用于操做数据库文件的。缓存

MySQL由一下及部分构成:

1. 链接池组建安全

2. 管理服务和工做组建服务器

3. SQL接口组件网络

4. 查询分析组件并发

5. 优化器组件高并发

6. 缓冲组件性能

7. 插件式储存引擎优化

8. 物理文件操作系统

MySQL数据库区别于其余数据库的最重要的一个特色就是其插件式的表存储引擎。须要特别注意的是,存储引擎是基于表的,而不是数据库。

 

InnoDB存储引擎:

InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理(OLTP)的应用。其特色是行锁设计,支持外键,并支持相似于Oracle的非锁定读,即默认读取操做不会产生锁。从数据库5.58版本开始,InnoDB存储引擎是默认的存储引擎。

InnoDB经过使用多版本并发控制(MVCC)来获取高并发特性,并实现了SQL标准4种隔离级别,默认为REPEATABLE级别。同时,使用一种被称为next-key locking的策略来避免幻读(phantom)现象产生。除此以外,InnoDB存储引擎还提供了插入缓存(insert buffer),二次写(double write),自适应哈希索引(adaptive hash index),预读(read ahead)等高性能和高可用的功能。

对于表中数据的存储,InnoDB存储引擎采用了汇集(clustered)的方式,所以每张表的存储都是按照主键的顺序进行存放。若是没有显示的在表定义时指顶主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并一次做为主键。

MyISAM存储引擎:

MyISAM存储引擎不支持事务,表锁设计,支持全文索引,主要面向一些OLAP主句库应用。在MySQL 5.58版本以前MyISAM存储引擎是默认的存储引擎。数据库系统与文件系统很大的一个不一样之处在于对事务的支持,然而MyISAM存储引擎是不支持事务的。毕竟不是全部的应用都须要事务进行操做。

MyISAM引擎的另外一个不同凡响的地方是它的缓冲池只缓存(cache)索引文件,而不缓存数据文件。这和大部分数据库都很是不一样。

NDB储存引擎:

特色是数据全放在内存中,所以主键查找(primary key lookups)的速度极快,而且经过添加NDB数据存储节点(Data Node)能够线性地提升数据库性能,是高可用,高性能的集群系统。

NDB存储引擎的JOIN操做是在MySQL数据层完成的,而不是在存储引擎层完成的。这意味着复杂的JOIN操做须要巨大的网络开销,所以查询速度很慢。

Memory存储引擎:

Memory存储引擎将表中的数据存放在内存中,所以,数据库发生崩溃或者重启,表中的数据都将消失。它很是适合用于存储临时数据的临时表,以及数据仓库中的维度表。Memory存储引擎默认使用哈希索引,而不是咱们熟悉的B+树索引。

虽然Memory存储引擎速度很是快,但在使用上仍是有必定的限制。好比,只支持表锁,并发性能较差,且不支持TEXT和BLOB列类型。最重要的是,存储变长字段varchar时,是按照字段char的方式进行的,所以会浪费内存。

此外有一点,MySQL数据库使用Memory存储引擎做为临时表来存放查询的中间结果(Intermediate result)。若是中间结果大于Memory存储引擎表的容量设置,又或者中间结果含有TEXT或BLOG列类型字段,则MySQL数据库会把其转换到MyISAM存储引擎表而放到磁盘中。以前提到MyISAM不缓存数据文件,所以这时产生的临时表的性能对于查询会有损失。

Archive存储引擎:

Archive存储引擎只支持INSERT和SELECT操做,从MySQL 5.1开始支持索引。Archive存储引擎很是适合存储归档数据,如日志信息。Archive存储引擎使用行锁来实现高并发插入操做,可是其自己并非事务安全的存储引擎,其设计目标主要时提供告诉的插入和压缩功能。

Federated存储引擎:

Federated存储引擎表并不存放数据,它只时指向一台远程MySQL数据库服务器上的表。这很是相似于SQL Server的连接服务器和Oracle的透明网关,不一样的时,当前Federated存储引擎只支持MySQL数据库表,不支持异构数据库表。

Maria存储引擎:

Maria存储引擎时新开发的引擎,设计目标主要时用来取代原有的MyISAM 存储引擎,从而成为MySQL的默认存储引擎。它的特色是:支持缓存数据和索引文件,应用了行锁设计,提供MVCC功能,支持事务和非事务的安全选项,以及更好的处理BLOB字符类型。

相关文章
相关标签/搜索