MySQL技术内幕 InnoDB存储引擎 第2版 封面
MySQL技术内幕 InnoDB存储引擎 第2版 封面

1.2 MySQL 体系结构

下图很好地展示了 MySQL 的体系结构,这个图要牢记,它对于以后深入理解 MySQL 数据库会有极大的帮助。

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

需要特别注意的是,存储引擎是基于表的,而不是数据库。

1.3 MySQL 存储引擎

通过 1.2 节,我们知道 MySQL 数据库具有一种插件式体系结构,这是区别于其他数据库的一个重要特性。存储引擎的好处是,每个存储引擎都有各自的特点,能够根据具体的应用建立不同的存储引擎表。

由于 MySQL 数据库的开源特性,用户可以根据 MySQL 预定义的储存引擎接口编写自己的存储引擎,以满足特殊场景的需要,这就是开源给我们带来的方便与力量。比如,eBay 的工程师 Igor Chernyshev 对 MySQL Memory 存储引擎的改进(http://code.google.com/p/mysql-heap-dynamic-rows/)并应用于 eBay 的 Personalization Platform。

1.3.1 InnoDB 存储引擎

InnoDB 存储引擎官方文档介:https://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html

  • InnoDB 存储引擎支持事务,其设计的主要目标是面向在线事务处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持非锁定读
  • InnoDB 存储引擎将数据放在一个逻辑的表空间中,即每一个 InnoDB 存储引擎的表单独存放到一个独立的 ibd 文件中
  • 版本并发控制(MVCC)来获得高并发性
  • 实现了SQL标准的四种离级别,默认为 REPEATABLE 级别
  • 使用 next-key locking 策略来避免读现象(phantom)的产生
  • 入缓冲(insert buffer)
  • 次写入(double write)
  • 适应哈希索引(adaptive hash index)
  • 步刷新
  • 新邻接页

记忆方法

前两个分别是 InnoDB 的主要特性 —— 事务,数据组织方式 —— 逻辑表空间。这用不着特殊记忆,如果忘掉了就说不过去了。

后面七个特性利用单字口诀记忆:多隔幻、插两自异刷(自行联想,想忘都难)

1.3.2 MyISAM 存储引擎

  • 不支持事务,表锁设计,支持全文索引,主要面向一些在线分析处理(OLAP)的数据库应用
  • MyISAM 存储引擎表由 MYD 和MYI 组成,MYD 用来存放数据文件,MYI 用俩存放索引文件
  • MyISAM 存储引擎只缓存索引文件,数据文件的缓存交由操作系统本身完成

1.3.4 Memory 存储引擎

Memory 存储引擎将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。主要用来作为临时表存放查询的中间结果。

Memory 存储引擎默认使用哈希索引,而不是我们熟悉的 B+ 树索引。

1.3.4 Archive 存储引擎

只支持 Insert 和 Select 操作,使用 zlib 算法将数据行(row)进行压缩后存储,压缩比一般可达1:10。所以,Archive 存储引擎非常适合存储归档数据,如日志信息。Archive 存储引擎使用行锁来实现高并发的插入操作,但是其本身并不是事务完全的存储引擎,其设计目标主要是提供高速的插入和压缩的功能。

本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,说不定哪天故事又继续更新了呢。
本文地址:https://qoogle.top/chapter-one-of-mysql-technology-insider-innodb-storage-engine-2nd-edition/
最后修改日期:2020年4月24日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。