关系型数据库 MySQL 体系结构详解

2019-08-15 15:11:24 浏览数 (1)

通过前面几篇文章学会如何安装 MySQL 以及基础知识后,我们还需要学习体系结构,MySQL 和 Oracle 体系结构类似,如果学过 Oracle 可以类比记忆,基础牢固才能学好数据库,才能做一个合格的 DBA,下面一起来看看。

MySQL 体系结构可分为两层,MySQL Server 层和 存储引擎层,而 MySQL Server 层又分为连接层和 SQL 层,连接层包括通信协议、线程处理、用户名密码认证,SQL 层包含权限判断、查询缓存、解析器、预处理器、查询优化器、缓存和执行计划。存储引擎主要有InnoDB、MyISAM、Memory、blackhole、TokuDB 和 MariaDB columnstore 等。详细的功能信息请看下文。

MySQL 体系结构

1、Connectors

指的是不同语言的应用程序接口(如JDBC、ODBC、Python等)与 MySQL 的连接交互层;

2、Management Serveices &Utilities

系统管理和控制工具,例如备份恢复、MySQL 复制、集群等;

3、Connection Pool

连接池,管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的信息; MySQL 服务器对每一个连接产生一个线程,而这个线程独自为该连接服务。因此,MySQL 服务器中的并行是指并行执行许多个查询而非一次查询内的并行。也由此原因致使 MySQL 对多核支持不够好,MySQL 服务器是一组线程的集合。

4、SQL Interface

SQL 接口,接受用户的 SQL 命令,并且返回用户需要查询的结果。比如 DML 就是调用 SQL Interface;

5、Parser

解析器,SQL 命令传递到解析器的时候会被解析器验证和解析。解析器是由 Lex 和 YACC 实现的,是一个很长的脚本;

主要功能:

l 将 SQL 语句分解成数据结构,并将这个结构传递到后续步骤,以后 SQL 语句的传递和处理就是基于这个结构的;

l 如果在分解构成中遇到错误,那么就说明这个 SQL 语句是不合理的 ;

l Lex:Lexical Analyzer 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序;

l Yacc:Yet Another Compiler Compiler 是一种工具,将任何一种编程语言的所有语法翻译成针对此种语言的 Yacc 语法解析器;

6、Optimizer

查询优化器,SQL 语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询;

优化 select uid,name from user where gender = 1;

SQL语句执行的过程如下:

l 这个 select 查询先根据 where 语句进行记录选取,而不是先将表全部记录查询出来以后再进行 gender 过滤;

l 这个 select 查询先根据 uid 和 name 进行属性投影(字段选择),而不是将属性全部取出以后再进行过滤;

l 将这两个查询条件联接起来生成最终查询结果;

7、Cache&Buffer

高速缓存区,查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。通过 LRU 算法将数据的冷端溢出,未来得及刷新到磁盘的数据页,叫脏页。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key 缓存,权限缓存等;

8、Engine

存储引擎,存储引擎是 MySQL 与文件打交道的子系统。也是 MySQL 最具有特色的一个地方。MySQL 的存储引擎是插件式的,它根据 MySQLAB 公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)现在有很多种存储引擎,各个存储引擎的优势各不一样。MySQL 也支持自定义制存储引擎,甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。

数据库与数据库实例

数据库:物理操作系统文件或其他形式文件类型的集合;

数据库实例:数据库后台进程或线程及一个共享内存区域组成,数据库实例是用来操作数据库文件的;

MySQL 是一个单进程多线程架构的数据库,与 SQL Server 类似。Oracle 数据库在 Linux OS 下是多进程,在 Windows 下也是单进程多线程。MySQL 数据库实例在系统上的表现就是一个进程。

MySQL常用存储引擎

存储引擎其实就是如何存储数据,如何为存储的数据建立索引以及如何更新、查询数据等技术实现的方法。

MySQL 中的数据用各种不同的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平,并且最终提供广泛的不同功能和能力。在 MySQL 中将这些不同的技术及配套的相关功能称为存储引擎。

1、存储引擎查询

查看 MySQL 服务器支持的存储引擎及默认的存储引擎。存储引擎是针对数据表的,不是针对数据库的,通过如下命令查看具体表指定的存储引擎。

代码语言:javascript复制
root@db22:10:  [(none)] show engines;   #查看数据库存储引擎
 -------------------- --------- ---------------------------------------------------------------- -------------- ------ ------------ 
|Engine             | Support |Comment                                                        | Transactions | XA   | Savepoints |
 -------------------- --------- ---------------------------------------------------------------- -------------- ------ ------------ 
|InnoDB             | DEFAULT | Supportstransactions, row-level locking, and foreign keys     | YES          | YES | YES        |
|MRG_MYISAM         | YES     | Collection of identical MyISAMtables                          | NO           | NO   | NO        |
|MEMORY             | YES     | Hash based, stored in memory, useful fortemporary tables      | NO           | NO   | NO        |
|BLACKHOLE          | YES     | /dev/null storage engine (anything youwrite to it disappears) | NO           |NO   | NO         |
|MyISAM             | YES     | MyISAM storage engine                                          |NO           | NO   | NO        |
|CSV                | YES     | CSV storage engine                                             |NO           | NO   | NO        |
|ARCHIVE            | YES     | Archive storage engine                                         |NO           | NO   | NO        |
|PERFORMANCE_SCHEMA | YES     |Performance Schema                                             |NO           | NO   | NO        |
|FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
 -------------------- --------- ---------------------------------------------------------------- -------------- ------ ------------ 
9 rowsin set (0.00 sec)
 
root@db22:10:  [(none)] show variables like'%engine%';  #查看数据库默认存储引擎
 ---------------------------------- -------- 
|Variable_name                    |Value  |
 ---------------------------------- -------- 
|default_storage_engine           | InnoDB|
|default_tmp_storage_engine       | InnoDB|
|disabled_storage_engines         |        |
|internal_tmp_disk_storage_engine | InnoDB |
 ---------------------------------- -------- 
4 rowsin set, 1 warning (0.18 sec)

2、常用存储引擎

下表是各大存储引擎特点与应用场景的比较。

InnoDB 和 MyISAM 是最主流的两个存储引擎,现在数据库默认的存储引擎就是 InnoDB,且 MySQL 8.0 宣布 InnoDB 存储数据字典,MyISAM 彻底被废弃,脱离了 MySQL。

可以看出 InnoDB 优势还是很明显的。InnoDB 是 MySQL 数据库 5.5 版本后的默认存储引擎,默认所说的 MySQL 即指 InnoDB 存储引擎的 MySQL,那么关于 InnoDB 的体系结构下一次在一起来看看吧,今日就到这里啦。


参考资料

https://my.oschina.net/peakfang/blog/2240253

张甦 著 《MySQL王者晋级之路》

0 人点赞