美文网首页
MySQL 体系结构及存储引擎

MySQL 体系结构及存储引擎

作者: 晓码君 | 来源:发表于2021-04-25 15:33 被阅读0次

MySQL 体系结构

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

在Oracle 和SQL Server等数据库中,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。需要特别注意的是,存储引擎是基于表的,而不是数据库。

存储引擎

InnoDB存储引擎

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

InnoDB存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由InnoDB存储引擎自身进行管理。从 MySQL41(包括4)版本开始,它可以将每个InnoDB存储引擎的表单独存放到一个独立的ibd文件中。此外, InnoDB存储引擎支持用裸设备( row disk)用来建立其表空间。

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

对于表中数据的存储, InnoDB存储引擎釆用了聚集( clustered)的方式,因此每张表的存储都是按主键的顺序进行存放。如果没有显式地在表定义时指定主键, InnoDB存储引擎会为每一行生成一个6字节的 ROWID,并以此作为主键。

MyI SAM存储引擎

MyISAM存储引擎不支持事务、表锁设计,支持全文索引,主要面向一些OLAP数据库应用。在 MySQL5.5.8版本之前 MyISAM存储引擎是默认的存储引擎(除Windows版本外)。数据库系统与文件系统很大的一个不同之处在于对事务的支持,然而 MyISAM存储引擎是不支持事务的。究其根本,这也不是很难理解。试想用户是否在所有的应用中都需要事务呢?在数据仓库中,如果没有ETL这些操作,只是简单的报表查询是否还需要事务的支持呢?此外, MyISAM存储引擎的另一个与众不同的地方是它的缓冲池只缓存( cache)索引文件,而不缓冲数据文件,这点和大多数的数据库都非常不同。

MyISAM存储引擎表由MYD和MY组成,MYD用来存放数据文件,MYI用来存放索引文件。可以通过使用 myisampack工具来进一步压缩数据文件,因为 myisampack工具使用赫夫曼( Huffman)编码静态算法来压缩数据,因此使用 myisampack工具压缩后的表是只读的,当然用户也可以通过 myisampack来解压数据文件。

在 MySQL50版本之前, MyISAM默认支持的表大小为4GB,如果需要支持大于4GB的 MyIsAM表时,则需要制定 MAX ROWS和 AVG ROW LENGTH属性。从MySQL5.0版本开始, MyISAM默认支持256TB的单表数据,这足够满足一般应用需求。

各存储引擎之间的比较

相关文章

网友评论

      本文标题:MySQL 体系结构及存储引擎

      本文链接:https://www.haomeiwen.com/subject/ektfrltx.html