MySql常用存储引擎介绍

来源:互联网 发布:清华计算机系课程知乎 编辑:程序博客网 时间:2024/05/22 15:32
MyISAM 存储引擎
每一个表都存放为三个以表名命名的物理文件,包括存放表结构定义信息的.frm文件,存放表数据的.MYD文件和所有索引数据的.MYI文件
MyISAM支持以下三种索引
  1. B-Tree索引:所有的索引节点都按照平衡树的数据结构来存储,所有的索引数据节点都在叶节点,B-Tree 可以显著减少定位记录时所经历的中间过程,从而加快存取速度
  2. R-Tree索引:与B-Tree索引类似,主要设计用于为存储空间和多位数据的字段做索引
  3. Full-Text索引:全文索引,存储结构也是b-tree

Innodb存储引擎
功能特点:
  1. 事务支持,支持4钟事务级别:(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE )
    1. EAD UNCOMMITTED (可以读未提交的): 查询可以读取到其他事务正在修改的数据,即使其他事务的修改还没有提交.这种隔离等级无法避免脏读.
    2. READ COMMITTED(只可以读已经提交的):其他事务对数据库的修改,只要已经提交,其修改的结果就是可见的,与这两个事务开始的先后顺序无关.这种隔离等级避免了脏读,但是无法实现可重复读,甚至有可能产生幻读.
    3. REPEATABLE READ(可重复读):read committed更进了一步,它只能读取在它开始之前已经提交的事务对数据库的修改,在它开始以后,所有其他事务对数据库的修改对它来说均不可见.从而实现了可重复读,但是仍有可能幻读
    1. SERIALIZABLE(可串行化):这是事务隔离等级的最高级别.其实现原理就是对于所有的query,即使是查询,也会加上读锁,避免其他事务对数据的修改.所以它成功的避免了幻读.但是代价是,数据库系统的并发处理能力大大降低,所以它不会被用到生产系统中.
  1. 数据多版本读取(MVCC): 它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是,把数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能。MVCC可以提供基于某个时间点的快照,使得对于事务看来,总是可以提供与事务开始时刻相一致的数据,而不管这个事务执行的时间有多长.所以在不同的事务看来,同一时刻看到的相同行的数据可能是不一样的,即一个行可能有多个版本
  2. 锁定机制的改变:实现了行锁
  3. 实现外键:使在数据库端控制部分数据的完整性成为可能
物理文件结构:
  1. 数据文件(表数据和索引数据):存放数据表中的数据和所有的索引数据,包括主键和其他普通索引,存在两种表空间:
    1. 共享表空间:所有表和索引数据被存放 在同一个表空间(一个或多个数据文件)中,通过 innodb_data_file_path来指定,增加数 据文件需要停机重启,共享表空间必须存在,因为 Innodb 的 undo 信息和其他一些元数据信息都是存放在共享表空间 里面
    2. 独享表空间:每个表的数据和索引都存放在一个单独的.ibd文件中

NDB存储引擎
主要用于 MySQL Cluster 分布式集群环境,Mysql Cluster 实际上就是在无共享存储设备的情况下实现的一种内存数据 库 Cluster 环境,其主要是通过 NDB Cluster(简称 NDB)存储引擎来实现的
一个 Mysql Cluster 的环境主要由以下三部分组成:
  1. 负责管理各个节点的 Manage 节点主机
管理节点负责整个 Cluster 集群中各个节点的管理工作,包括集群的配置,启动关闭 各节点,以及实施数据的备份恢复等。管理节点会获取整个 Cluster 环境中各节点的状态和 错误信息,并且将各 Cluster 集群中各个节点的信息反馈给整个集群中其他的所有节点。由 于管理节点上保存在整个 Cluster 环境的配置,同时担任了集群中各节点的基本沟通工作, 所以他必须是最先被启动的节点。
  1. SQL 层的 SQL 服务器节点,也就是我们常说的 Mysql Server
主要负责实现一个数据库在存储层之上的所有事情,比如连接管理,query 优化和响 应,cache 管理等等,只有存储层的工作交给了 NDB 数据节点去处理了。也就是说,在纯粹 的 Mysql Cluster 环境中的 SQL 节点,可以被认为是一个不需要提供任何存储引擎的 Mysql 服务器,因为他的存储引擎有 Cluster 环境中的 NDB 节点来担任。所以,SQL 层各 Mysql 服 务器的启动与普通的 Mysql 启动有一定的区别,必须要添加 ndbcluster 项,可以添加在 my.cnf 配置文件中,也可以通过启动命令行来指定
  1. Storage 层的 NDB 数据节点( NDB Cluster)
NDB是一个内存式存储引擎也就是说,他会将所有的数据和索引数据都load到内存 中 , 但也会将数据持久化到存储设备上,最新版本,已经支持用户自己选择数据可以不全 部 Load 到内存中
NDB 节点主要是实现底层数据存储的功能,保存 Cluster 的数据。每一个 NDB 节点保存 完整数据的一部分(或者一份完整的数据,视节点数目和配置而定)

Merge  存储引擎
实现了对结构相同的 MyISAM 表 , 通 过一些特殊的包装对外提供一个单一的访问入口,以达到减小应用的复杂度的目的

Memory  存储引擎
将数据存储在内存中的存储 引擎,Memory 存储引擎不会将任何数据存放到磁盘上,仅仅存放了一个表结构相关信息 的.frm 文件在磁盘上面,Memory 表支持索引,并且同时支持 Hash 和 B-Tree 两种格式的

BDB  存储引擎
BDB 存储引擎全称为 BerkeleyDB 存储引擎,实现了事务安全,也有自己的redo日志,也和Memory,存储引擎一样,实现页级锁定

FEDERATED  存储引擎
主要用来提供对远 程 MySQL 服务器上面的数据的访问借口

ARCHIVE  存储引擎
主要用于通过较小的存储空间来存放过期的很少访问的历史数据

BLACKHOLE  存储引擎
不会记录下任何数据,但是会在 binlog 中记录下所有的 sql,这些 sql 最 终都是会被复制所利用,并实施到最终的 slave 端,除此之外,还有以下用途:
  1. SQL 文件语法的验证
  2. 来自二进制日志记录的开销测量,通过比较允许二进制日志功能的 BLACKHOLE 的性 能与禁止二进制日志功能的 BLACKHOLE 的性能。
  3. 因为 BLACKHOLE 本质上是一个“no-op” 存储引擎,它可能被用来查找与存储引擎 自身不相关的性能瓶颈。

CSV  存储引擎
实际上操作的就是一个标准的 CSV 文件,他不支持索引。起主要用途就是 大家有些时候可能会需要通过数据库中的数据导出成一份报表文件


0 0