MySQL进阶之MySQL数据库整体架构设计

了解掌握MySQL数据库的架构设计、文件系统,有利于更全面、系统的掌握MySQL数据库,是进阶精通MySQL的必修课 。
MySQL逻辑架构总体分为客户端连接器(Connectors)和服务器端(MySQL Server)两大部分 。应用程序客户端或可视化数据库客户端通过提供的连接器连接到服务端来使用MySQL提供的服务 。
架构图
整体架构分为客户端连接器(Connectors)和服务器端(MySQL Server)两大部分 。其中服务器端分为3层,包括SQL层、可拔插存储引擎层、文件系统(物理结构),核心在SQL层、可拔插存储引擎层 。

MySQL进阶之MySQL数据库整体架构设计

文章插图
MySQL逻辑架构图
客户端(Connectors)
即连接器Connectors,包括MySQL提供的原生C语言API、实现了JDBC的连接器驱动程序等 。基本上,大部分编程语言都实现了连接MySQL数据库的程序包,通过这些程序包连接到MySQL数据库的程序或应用,也可以认为是MySQL的客户端 。
  • Native C API
  • JDBC
  • ODBC
  • .NET
  • php
  • Python
  • Perl
  • Ruby
服务器端(Server)
服务器端主要由SQL层、可拔插存储引擎层、文件系统三部分 。
其中SQL层(SQL Layer)包含以下6个组件
  • 系统管理和控制工具(Management Services & Utilities )MySQL提供的一些系统管理工具,比如mysql、mysqladmin等命令行工具
  • 连接池(Connection Pool)连接池组件负责身份认证authentication、连接池的实现(线程复用、连接限制)、检查内存,缓存等
  • SQL接口(SQL Interfaces)实现各种语句DDL、DML等,以及存储过程、函数、触发器、视图等接口,负责命令分发
  • 解析器(Parser)解析SQL语句,负责对SQL语句的词法和语法解析,形成初级语法树
  • 优化器(Optimizer)对初级语法树进行优化,生成计划,选择合理的索引
  • 缓存和缓冲(Caches & Buffers)缓冲提交的SQL请求等;对查询结果进行缓存,如果有开启 。8.0版本后,缓存Cache已弃用 。
在5.5版本后,MySQL默认使用存储引擎是InnoDB 。存储引擎是以表为单位应用的,创建表时可以指定使用的存储引擎,比如
CREATE TABLE tb_name(columns) ENGINE=InnoDB|MyISAM|Memory以下是MySQL支持的常见引擎
MySQL进阶之MySQL数据库整体架构设计

文章插图
MySQL支持的常见引擎
在5.7版本中,CREATE TABLE语句创建表时默认使用的存储引擎为InnoDB,可以省略指定 。目前使用比较多的存储引擎包括InnoDB和MyISAM 。InnoDB与MyISAM的区别如下表所示,开发人员可以按照业务需求使用不同的引擎
MySQL进阶之MySQL数据库整体架构设计

文章插图
InnoDB与MyISAM的区别
一般情况下,InnoDB、MyISAM、Memory等几个存储引擎可以满足大部分的一个应用场景 。下面是这三个存储引擎的使用场景或选型依据
  • InnoDB
支持事务,支持外键,支持崩溃修复和并发控制 。对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),频繁更新、删除数据,这类应用场景建议使用InnoDB,因为支持事务的提交(commit)和回滚(rollback) 。
  • MyISAM
插入数据快,空间和内存使用比较低 。如果主要用于插入新记录和读取记录,或应用的完整性和并发性要求比较低,可以考虑选择MyISAM 。
  • Memory
数据存储在内存中,处理速度较快,但安全性不高 。如果需要很快的读写速度,对数据安全性要求不高,数据作为临时处理使用或不需要持久保存,可以选择Memory 。它对表的大小有要求,不能建立太大的表 。
注意,因为存储引擎是作用在表上的,所以同一个数据库,可以使用多个存储引擎,即不同的表可以有不同的存储引擎 。如果一个表要求比较高的事务处理,可以选择InnoDB;而查询比较高的表,可以使用MyISAM;如果该数据库需要一个用于查询的临时表,也可以考虑使用Memory存储引擎 。总之,根据不同的一个用场景,可以使用一种存储引擎或多种存储引擎组合使用 。
文件系统
  • 数据文件
包括表定义文件、表数据、索引等
  • 日志文件
包括通用日志文件、二级制文件binlog、中继日志relaylog、重做日志redolog、回滚日志undolog、错误日志errlog,以及慢查询日志slowlog等
执行流程下图是MySQL执行一条语句的简单流程图
MySQL进阶之MySQL数据库整体架构设计

文章插图
简单流程图
物理架构即文件系统,MySQL的文件组织架构 。MySQL是通过文件系统对数据和索引进行存储的 。从物理结构可以分为数据索引文件和日志文件两大类 。其中,数据索引文件采用随机IO的方式写入磁盘存储,日志文件采用顺序IO方式写入磁盘存储 。两种写入磁盘的方式对比如下


推荐阅读