MySQL 体系结构
由图可以看出,MySQL 由以下部分组成:
1. 连接池组件
2. 管理服务和工具组件
3. SQL 接口组件
4. 查询分析器组件
5. 优化器组件
6. 缓冲(Cache)组件
7. 插件式存储引擎
8. 物理文件
需要特别注意的是,存储引擎是基于表的,而不是数据库。
几种存储引擎介绍
1. InnoDB 存储引擎
a. InnoDB 存储引擎支持事务,其设计目标主要面向在线事务处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持类似于 Oracle 的非锁定读,即默认读取操作不会产生锁。从 MySQL 数据库 5.5.8 版本开始,InnoDB 存储引擎是默认的存储引擎。
b. InnoDB 通过多版本并发控制(MVCC)来获得高并发性,并且实现了 SQL 标准的 4 种隔离级别,默认为 REPEATABLE 级别。使用 next-key locking 的策略来避免幻读(phantom)现象的产生。
c. InnoDB 存储引擎提供了插入缓存(insert buffer)- 随着后续演进变为 change buffer、二次写(double write)、自适应哈希(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。
d. 对于表中数据的存储,InnoDB 存储引擎采用了聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放的。如果没有显示地在表定义时指定主键,InnoDB 存储引擎会为每一行生成一个 6 字节的 ROWID,并以此作为主键。
2. MyISAM 存储引擎
a. MyISAM 存储引擎不支持事务、表锁设计,支持全文检索,主要面向一些 OLAP 数据库应用。
b. MyISAM 存储引擎的缓冲池只缓存(cache)索引文件,而不是缓存数据文件,这点和大多数的数据库都非常不同。
c. MyISAM 存储引擎表由 MYD 和 MYI 组成。MYD 放数据文件,MYI 放索引文件。
3. NDB 存储引擎
NDB 存储引擎是一个集群存储引擎,类似于 Oracle 的 RAC 集群,不过与 RAC share everything 架构不同的是,其结构是 share nothing 的集群架构,因此能提供更高的可用性。NDB 的特点是数据全部放在内存中(从 MySQL5.1 版本开始,可以将非索引数据放在磁盘上),因此主键查找(primary key lookups)的速度极快,并且通过添加 NDB 数据存储节点(Data Node)可以线性地提高数据库性能,是高可用、高性能的集群系统。
关于 NDB 存储引擎,有一个问题值得注意,那就是 NDB 存储引擎的连接操作(JOIN)是在 MySQL 数据库层完成的,而不是在存储引擎层完成的。这意味着,复杂的连接操作需要巨大的网络开销,因此查询速度很慢。如果解决这个问题,NDB 存储引擎的市场应该是非常巨大的。
4. Memory 存储引擎
Memory 存储引擎(之前称 HEAP 存储引擎)将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。非常适用于存储临时数据的临时表,以及数据仓库中的纬度表。Memory 存储引擎默认使用哈希索引,而不是 B + 树索引。
MySQL 数据库使用 Memory 存储引擎作为临时表来存放查询的结果集(intermediate result)。如果中间结果集大于 Memory 存储引擎表的容量设置,有或者中间结果含有 TEXT 或 BLOB 列类型字段,则 MySQL 数据库会把其转换到 MyISAM 存储引擎表而存放到磁盘中。之前提到 MyISAM 不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。
5. Archive 存储引擎
Archive 存储引擎只支持 insert 和 select 操作,从 MySQL5.1 开始支持索引。Archive 存储引擎使用 zlib 算法将数据行(row)进行压缩后存储,压缩比一般可达 1:10。
正如其名字所示,Archive 非常适合存储归档数据,如日志信息。
Archive 存储引擎使用行锁来实现高并发的插入操作,但是其本身并不是事务安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。
6. Federated 存储引擎
Federated 存储引擎表并不存放数据,它只是指向一台远程 MySQL 数据库服务器上表。类似于 SQL Server 的链接服务器和 Oracle 的透明网关。不同的是当前 Federated 存储引擎只支持 MySQL 数据库表,不支持异构数据库表。
7. Maria 存储引擎
新开发的引擎,设计目标主要是用来取代原有的 MyISAM 存储引擎,从而成为 MySQL 默认的存储引擎。
特点:支持缓存数据和索引文件,应用了行锁设计,提供 MVCC 功能,支持事务和非事务安全的选项,以及更好的 BLOB 字符类型的处理性能。
8. 其他存储引擎
Merge、CSV、Sphinx 和 Infobright 等
版权声明: 本文为 InfoQ 作者【红袖添香】的原创文章。
原文链接:【http://xie.infoq.cn/article/744446b7cc98d442b4df6bb99】。文章转载请联系作者。
评论