查看原文
其他

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

JiekeXu JiekeXu DBA之路 2024-03-03

通过前面几篇文章学会如何安装 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 服务器支持的存储引擎及默认的存储引擎。存储引擎是针对数据表的,不是针对数据库的,通过如下命令查看具体表指定的存储引擎。

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王者晋级之路》



推荐阅读:

模拟真实环境下超简单超详细的 MySQL 5.7 安装

具有百度云会员功能的百度云盘下载器

关系型数据库 MySQL 表相关操作

Linux 下 CentOS 7 安装教程

MySQL 基础知识学习

周末面基后的碎碎念

十大资源分享篇一


资源分享:

5T 技术资源大放送!包括但不限于:Linux、Python、Oracle、MySQL、Java、前端、大数据、人工智能等,具体获取方式可关注本公众号或者添加我微信获取~~

添加微信,可加入资源技术交流群


长按 识别二维码 即可关注!

走过路过,不要错过这个 好看 哦!

继续滑动看下一个

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

JiekeXu JiekeXu DBA之路
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存