IT评测·应用市场-qidao123.com

标题: MySQL原理:逻辑架构 [打印本页]

作者: 八卦阵    时间: 2025-3-24 07:01
标题: MySQL原理:逻辑架构
目的:了解 SQL实行流程 以及 MySQL 内部架构,每个零件具体负责做什么
  
  目录

1 服务器处理客户端哀求
1.1 MySQL 服务器端逻辑架构分析
2 Connectors
3 第一层:毗连层
3.1 数据库毗连池(Connection Pool)
4 第二层:服务层
5 第三层:存储引擎层
6 存储层 — 文件系统(不属于 MySQL 架构)
6.1 日志模块
6.2 数据模块(数据的文件存储格式)
1.7 架构总结
巩固知识


1 服务器处理客户端哀求

1.1 MySQL 服务器端逻辑架构分析



2 Connectors

Connectors,指的是不同语言中与SQL的交互。MySQL起首是一个网络步伐,在TCP之上界说了自己的应用层协议。所以要使用MYSQL,我们可以编写代码,跟MySQLServer创建TCP毗连,之后按照其界说好的协议进行交互大概比力方便的办法是调用SDK,比如NativeCAP1JDBC、PHP等各语言MySQL Connector,大概通过ODBC。但通过SDK来访问MySQL,本质上还是在TCP毗连上通过MySQL协议跟MySQL进行交互。

MySQL Server结构可以分为如下的三层:毗连层/服务层/引擎层
不包罗物理磁盘上文件/也不包罗文件系统



3 第一层:毗连层

功能:创建 TCP 毗连
经过三次握手创建毗连乐成后,MySQL服务器对TCP 传输过来的账号密码做身份认证&权限获取

3.1 数据库毗连池(Connection Pool)

   一个系统只会和MySQL服务器创建一个毗连吗?只能有一个系统和MySQL服务器创建毗连吗?
  当然不是,多个系统都可以和MySQL服务器创建毗连,每个系统创建的毗连肯定不止一个。
  为了办理TCP无穷创建与TCP频繁创建销毁带来的资源耗尽、性能降落问题。MySQL服务器里有专门的TCP毗连池 限定毗连数。采用 长毗连模式 复用TCP毗连,来办理上述问题。
TCP 毗连收到哀求后,必须要分配给一个线程专门与这个客户端的交互。所以还会有个线程池,去走后面的流程,每一个毗连从线程池中获取线程,省去了创建和销毁线程的开销。
毗连池的最大线程数可以通过参数max-connections来控制,假如到来的客户端毗连超出该值时,新到来的毗连都会被拒绝,关于最大毗连数的一些下令重要有两条:

对于不同的机器设置,可以适当的调整毗连池的最大毗连数大小,以此可以在一定程度上提升数据库的性能。除了可以查询最大毗连数外,MySQL本身还会对客户端的毗连数进行统计,对于这点可以通过下令show status like "Threads%";查询:
所以毗连受理的职责是负责认证、管理毗连、获取权限信息
4 第二层:服务层

第二层架构重要完成大多数的焦点服务功能,如SQL接口,并完成 缓存的查询 ,SQL的 分析和优化 及部分 内置函数的实行 。所有 跨存储引擎的功能 也在这一层实现,如过程、函数等。
在该层,服务器会 解析查询 并创建相应的内部 解析树 ,并对其完成相应的 优化 :如确定查询表的顺序,是否利用索引等,末了天生相应的实行利用。
假如是SELECT语句,服务器还会 查询内部的缓存 。假如缓存空间富足大,这样在办理大量读利用的环境中可以或许很好的提升系统的性能。






  1. SELECT id,name FROM student WHERE gender ='女';
复制代码
这个SELECT查询先根据WHERE语句进行 选取 ,而不是将表全部查询出来以后再进行gender 过滤。
这个SELECT查询先根据id和name进行属性 投影 ,而不是将属性全部取出以后再进行过滤,将这两个查询条件 毗连 起来天生终极查询效果。


5 第三层:存储引擎层

存储引擎也可以明白成MySQL最紧张的一层,在前面的服务层中,聚集了MySQL所有的焦点逻辑利用,而引擎层则负责具体的数据利用以及实行工作
存储引擎是MySQL数据库中与磁盘文件打交道的子系统,不同的引擎底层访问文件的机制也存在些许细微差异,引擎也不仅仅只负责数据的管理,也会负责库表管理、索引管理等,MySQL中所有与磁盘打交道的工作,终极都会交给存储引擎来完成。
MySQL现在有非常多的存储引擎可选择,此中最为常用的则是InnoDB与MyISAM引擎,可以通过show variables like '%storage_engine%';下令来检察当前所使用的引擎。其他引擎如下:


Oracle、SQLServer等数据库的实现只有一个存储引擎,因为它们是闭源的,所以仅有官方自己提供的一种引擎。
和别的数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥精良作用,重要体现在存储引擎的架构上,插件式的存储引擎 架构将查询处理和别的的系统使命以及数据的存储提取相分离。这种架构可以根据业务的无求和实际需要选择合适的存储引擎。 同时开源的 MySQL 还答应 开发人员设置自己的存储引擎。
这种高效的模块化架构为那些希望专门针对特定应用步伐需求(例如数据仓库、事件处理或高可用性情况)的人提供了巨大的好处,同时享受使用一组独立于任何接口和服务的优势存储引擎。
插件式存储引擎层(storage Engines),真正的负责了MySQL中数据的存储和提取,对物理服务器级别维护的底层数据实行利用,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。
6 存储层 — 文件系统(不属于 MySQL 架构)

这一层则是MySQL数据库的底子,本质上就是基于机器物理磁盘的一个文件系统,此中包含了设置文件、库表结构文件、数据文件、索引文件、日志文件等各类MySQL运行时所需的文件,这一层的功能比力简朴,也就是与上层的存储引擎做交互,负责数据的终极存储与长期化工作
重要可分为两个模块:1. 日志模块 2. 数据模块
所有的数据,数据库、表的界说,表的每一行的内容,索引,都是存在 文件系统 上,以 文件 的方式存在的,并完成与存储引擎的交豆。当然有些存储引擎比如InnoDB,也支持不使用文件系统直接受理裸设备,但当代文件系统的实现使得这样做没有必要了。在文件系统之下,可以使用本地磁盘,可以使用DAS、NAS、SAN等各种存储系统。
6.1 日志模块

在MySQL中重要存在七种常用的日志类型,如下:

上述列出了MySQL中较为常见的七种日志,但实际上还存在许多其他类型的日志,不外一般对调优、排盘问题、数据恢复/迁移没太大资助,用的较少,因此不再列出。
6.2 数据模块(数据的文件存储格式)

MySQL的所有数据终极都会落盘(写入到磁盘),而不同的数据在磁盘空间中,存储的格式也并不相同,因此再列举出一些MySQL中常见的数据文件类型:

1.7 架构总结



巩固知识



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4