MySQL基础篇:逻辑架构

文章目录

    • 1、整体结构图
      • 1.1 连接层
      • 1.2 服务层
        • 1.2.1 Management Services & Utilities
        • 1.2.2 SQL Interface
        • 1.2.3 Parser
        • 1.2.4 Optimizer
        • 1.2.5 Cache 和Buffer
      • 1.3 引擎层
      • 1.4 存储层
    • 2、架构特点

1、整体结构图

MySQL基础篇:逻辑架构_第1张图片

和其他数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。

主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。

1.1 连接层

最上面是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。

主要完成一些类似于连接处理、授权认证、以及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于 SSL 的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

1.2 服务层

1.2.1 Management Services & Utilities

系统管理和控制工具

1.2.2 SQL Interface

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

1.2.3 Parser

解析器。 SQL 命令传递到解析器的时候会被解析器验证和解析

1.2.4 Optimizer

查询优化器。 SQL 语句在查询之前会使用查询优化器对查询进行优化,比如有where 条件时,优化器来决定先投影还是先过滤。

1.2.5 Cache 和Buffer

查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key 缓存,权限缓存等

1.3 引擎层

存储引擎层,存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。

对比项 MyISAM InnoDB
外键 不支持 支持
事务 不支持 支持
行表锁 表锁
即使操作一条记录也会锁住整个表,
不适合高并发的操作
行锁
操作时只锁定某一行,不对其他行有影响,
适合高并发的操作
缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
关注点 读性能 并发写,事务、资源
默认安装 Y Y
默认使用 N Y
自带系统表使用 Y N

使用命令查看

#查看所安装的MySQL现在已提供什么存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
#查看MySQL当前默认的存储引擎
mysql> show variables like '%storage_engine%';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
| storage_engine         | InnoDB |
+------------------------+--------+
2 rows in set (0.00 sec)

1.4 存储层

数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

2、架构特点

  • 基于C/S架构模型
  • 基于线程工作
  • 同时MySQL是一个独立的进程

以下内容摘自深入分析MySQL的逻辑架构

每一个客户端发起一个新的请求都由服务器端的连接/线程处理工具负责接收客户端的请求并开辟一个新的内存空间 在服务器端的内存中生成一个新的线程, 当每一个用户连接到服务器端的时候就会在进程地址空间里生成一个新的线程 用于响应客户端请求 用户发起的查询请求都在线程空间内运行, 结果也在这里面缓存并返回给服务器端.线程的重用和销毁 都是由连接/线程处理管理器实现的

综上所述:用户发起请求 连接/线程处理器 开辟内存空间 开始提供查询的机制

接下来用户发起SQL查询语句 用户的SQL语句 在连接/线程处理器接收 接收下来后 开始交给服务器端的核心组件来查询。为了加速MySQL的查询速度提供了一个查询缓存空间。如果同一个SQL语句此前被查询过了结果符合某个特定条件 就会保存在查询缓存空间里 因此第二次执行这条语句的时候 就直接返回结果 这样大大的提高了MySQL检索响应速度。如果缓存中没有响应的语句(缓存未命中)此时就交给分析器。

分析器分析用户发起的SQL语句把语句进行切片该分析器包括词法分析和语法分析两部分 语法分析器用来分析接收到的语句语法是否正确 如果语法是错误的就不用执行这条语句了如果语法分析无误(syntex 0K !)接下来就做词法分析, 词法分析 就是把接收到的语句进行切片一段一段用空格分开 因为分析器分析的结果要送达给解释器进行执行的【命令 选项 参数】

为什么要进行词法分析呢?

SQL有个最重要的特点 在数据库的表中的检索特定字段的数据时 不同数据库不同表 是不一样的 字段不一样 就必须要把接收到的语句进行切片才能找到特定的字段值

词法分析后的结果发现没有问题

分析的结果交给优化器进行优化,怎么进行优化呢?

有N中执行办法 ,N中执行路径,否用到数据库执行路径中哪个速度最快 都是优化过程需要考虑的问题 优化器的主要目的就是从N中执行路径中选择一种最快的 并生成对应的可执行的二进制格式 并进行执行 ,选一个最优的执行

执行就是从存储在磁盘中的文件中检索一个最优的数据

真正存储在磁盘上的数据是由存储引擎管理的, 存储在文件系统或者是裸设备上的数据管理程序

本身能提供给上层应用不同的功能 不同的存储引擎具有不同的特性

你可能感兴趣的:(MySQL,mysql,存储架构)