MyISAM

存储文件

.frm:表结构定义信息

.MYD:表数据

.MYI:表索引

支持的索引

B-Tree:所有的索引节点都按照balance tree的数据结构来存储,所有的索引数据节点都在叶子结点。

(所有参与一个索引的字段长度之和不能超过1000Byte)

R-Tree:用于为存储空间和多维数据的字段做索引,目前仅支持geometry类型的字段做索引

Full-text:结构也是b-tree,主要是为了解决like查询的低效问题

数据存放格式

静态固定长度:表中没有可变字段长度

动态可变长度:表中有可变字段长度

压缩:手动选择或者使用myisampack压缩

Innodb

从MySQL5.5版本之后,MySQL的默认内置存储引擎已经是InnoDB了

存储文件

.frm 表结构

.ibd 存储数据和索引,在同一个文件中

支持功能

a)支持事务

b)数据多版本读取(undo)

c)锁定机制改变,实现了行锁

d)实现外键

日志

在概念上,innodb通过force log at commit机制实现事务的持久性,即在事务提交的时候,必须先将该事务的所有事务日志写入到磁盘上的redo log file和undo log file中进行持久化

undo log有两个作用:提供回滚和多个行版本控制(MVCC)。

在数据修改的时候,不仅记录了redo,还记录了相对应的undo,如果因为某些原因导致事务失败或回滚了,可以借助该undo进行回滚。

NDB Cluster

主要用于 MySQL Cluster 分布式集群环境,Cluster 是 MySQL 从 5.0 版本才开始提供的新功能

简单的说, Mysql Cluster 实际上就是在无共享存储设备的情况下实现的一种内存数据库 Cluster 环境,其主要是通过 NDB Cluster(简称 NDB)存储引擎来实现的。

组成部分

a)manager节点主机

负责管理各个节点,包括集群配置,启动关闭各节点,以及实施数据的备份恢复。

管理节点会获取整个 Cluster 环境中各节点的状态和错误信息, 并且将各 Cluster 集群中各个节点的信息反馈给整个集群中其他的所有节点。 由于管理节点上保存在整个 Cluster 环境的配置,同时担任了集群中各节点的基本沟通工作,所以他必须是最先被启动的节点

b)SQL服务器节点

也就是Mysql Server 。负责实现一个数据库在存储层之上的所有事情,比如连接管理,query优化和响应,cache管理,只在存储层的工作交给NDB数据节点去处理。

SQL 层各 Mysql 服务器的启动与普通的 Mysql 启动有一定的区别,必须要添加 ndbcluster 项,可以添加在my.cnf 配置文件中,也可以通过启动命令行来指定

c)Storage层的NDB数据节点(NDB Cluster)

NDB 是一个内存式存储引擎也就是说, 他会将所有的数据和索引数据都 load 到内存中,但也会将数据持久化到存储设备上。不过,最新版本,已经支持用户自己选择数据可以不全部 Load 到内存中了

其他存储引擎

Merge

实现了对结构相同的 MyISAM 表, 通过一些特殊的包装对外提供一个单一的访问入口, 以达到减小应用的复杂度的目的。 要创建MERGE 表,不仅仅基表的结构要完全一致,包括字段的顺序,基表的索引也必须完全一。

MERGE 表本身并不存储数据,仅仅只是为多个基表提供一个同意的存储入口。所以在创建 MERGE 表的时候, MySQL 只会生成两个较小的文件,一个是.frm 的结构定义文件,还有一个.MRG 文件,用于存放参与 MERGE 的表的名称 (包括所属数据库 schema)

在同一个 mysqld 下面,就可以进行 Merge.

Memory

Memory 存储引擎不会将任何数据存放到磁盘上,仅仅存放了一个表结构相关信息的.frm 文件在磁盘上面

BDB

BDB 存储引擎的数据存放也是每个表两个物理文件,一个.frm 和一个.db 的文件,数据和索引信息都是存放在.db 文件中。此外, BDB 为了实现事务安全,也有自己的 redo 日志,和 Innodb 一样, 也可以通过参数指定日志文件存放的位置。 在锁定机制方面, BDB 和 Memory存储引擎一样,实现页级锁定

FEDERATED

我们创建一个 FEDERATED 表的时候, 仅仅在本地创建了一个表的结构定义信息的文件而已,所有数据均实时取自远程的 MySQL 服务器上面的数据库

ARCHIVE

ARCHIVE 存储引擎主要用于通过较小的存储空间来存放过期的很少访问的历史数据。ARCHIVE 表不支持索引,通过一个.frm 的结构定义文件,一个.ARZ 的数据压缩文件还有一个.ARM 的 meta 信息文件。由于其所存放的数据的特殊性, ARCHIVE 表不支持删除,修改操作,仅支持插入和查询操作。锁定机制为行级锁定

BLACKHOLE

CSV

CSV 存储引擎实际上操作的就是一个标准的 CSV 文件,他不支持索引。起主要用途就是

大家有些时候可能会需要通过数据库中的数据导出成一份报表文件, 而 CSV 文件是很多软件

都支持的一种较为标准的格式, 所以我们可以通过先在数据库中建立一张 CVS 表, 然后将生

成的报表信息插入到该表,即可得到一份 CSV 报表文件了