对 MYSQL 架构的了解

news/2024/12/22 14:22:43 标签: mysql, 架构, 数据库

MySQL 是一种广泛使用的关系型数据库管理系统,其架构主要包括以下几个关键部分:

一、连接层

客户端连接管理:MySQL 服务器可以同时处理多个客户端的连接请求。当客户端应用程序(如使用 Java、Python 等语言编写的程序)尝试连接到 MySQL 服务器时,连接层负责建立连接。它会验证客户端提供的用户名、密码等认证信息,只有认证通过的客户端才能成功建立连接。例如,一个 Web 应用服务器要访问 MySQL 数据库存储用户信息,就需要先在连接层进行身份验证。

通信协议处理:MySQL 使用自己的通信协议来在客户端和服务器之间传递数据和命令。连接层负责解析客户端发送的 SQL 语句请求,并将服务器的响应结果按照协议格式返回给客户端。

二、服务层(SQL 层)

查询解析器(Parser)

词法分析:当客户端发送 SQL 语句后,查询解析器首先会对 SQL 语句进行词法分析。它会将 SQL 语句分解为一个个的单词(Token),比如 SELECT、FROM、WHERE 等关键字,以及表名、列名、数值等标识符。例如,对于语句 “SELECT * FROM users WHERE age> 18”,会分解出 “SELECT”“*”“FROM”“users”“WHERE”“age”“>”“18” 这些单词。

语法分析:在词法分析的基础上,语法分析器会根据 MySQL 的语法规则来检查 SQL 语句的语法结构是否正确。如果 SQL 语句不符合语法规则,就会返回语法错误信息给客户端。例如,语句 “SELECT * FORM users”(错误地拼写了 FROM)就会被语法分析器检测出错误。

查询优化器(Optimizer)

成本估算:优化器会对解析后的 SQL 查询计划进行评估。它会考虑多种因素来估算不同执行计划的成本,如索引的使用情况、表的连接方式(如内连接、外连接)、数据量大小等。例如,对于一个涉及多表连接的查询,优化器会分析是先连接哪两个表成本更低。

生成最优执行计划:基于成本估算,优化器会选择一个它认为是最优的执行计划来执行 SQL 查询。这个执行计划可能包括决定使用哪些索引、以何种顺序访问表等。例如,在一个有索引的表上进行查询时,优化器会判断是否使用索引来提高查询速度。

查询执行器(Executor)

根据优化器生成的执行计划,查询执行器负责实际执行 SQL 查询操作。它会与存储引擎进行交互,读取或写入数据。例如,执行一个 SELECT 语句时,执行器会从存储引擎中获取符合条件的数据行,然后将这些数据返回给服务层进行后续处理。

事务管理:MySQL 支持事务处理,执行器在处理事务相关的 SQL 语句(如 BEGIN、COMMIT、ROLLBACK 等)时,会负责协调事务的开始、提交和回滚操作。它确保事务的原子性、一致性、隔离性和持久性(ACID)特性。例如,在一个银行转账事务中,如果转账操作失败,执行器会根据事务的回滚机制,将数据恢复到转账之前的状态。

三、存储引擎层

存储引擎概述:MySQL 支持多种存储引擎,如 InnoDB、MyISAM、Memory 等。不同的存储引擎有不同的特点,适用于不同的应用场景。存储引擎负责数据的存储和读取操作。

InnoDB 存储引擎(常用)

存储结构:InnoDB 采用聚簇索引(Clustered Index)来存储数据。聚簇索引的叶子节点存储了实际的数据行,而非聚簇索引的叶子节点存储的是指向聚簇索引的指针。例如,在一个以主键为聚簇索引的表中,数据行按照主键值的顺序存储在磁盘上。

事务支持:InnoDB 是支持事务的存储引擎,通过事务日志(Redo Log 和 Undo Log)来保证事务的 ACID 特性。Redo Log 用于在系统崩溃后恢复已经提交的事务修改,Undo Log 用于回滚未完成的事务。

行级锁:InnoDB 支持行级锁,这使得在多用户并发访问数据库时,可以更精细地控制并发操作。例如,当多个用户同时对同一张表中的不同行进行更新操作时,行级锁可以减少锁冲突,提高并发性能。

MyISAM 存储引擎

存储结构:MyISAM 存储引擎的数据文件和索引文件是分开存储的。数据文件存储实际的数据行,索引文件存储索引信息。这种存储方式使得在某些情况下,索引的维护和数据的读写操作相对简单。

性能特点:MyISAM 在查询操作频繁、对事务支持要求不高的场景下有较好的性能。但是它不支持事务,也不支持行级锁,只支持表级锁。例如,在一个以读为主的数据库应用中,如果不需要事务处理,MyISAM 可能是一个选择。

四、缓存层

查询缓存(早期版本有,较新版本已逐渐废弃):在早期的 MySQL 版本中,查询缓存用于存储查询结果。当一个新的查询到来时,服务器会先检查查询缓存中是否已经存在相同的查询结果。如果存在,就直接从缓存中返回结果,而不需要再次执行查询。但是,由于缓存失效机制复杂,在高并发和频繁更新数据的场景下,查询缓存可能会带来性能问题,所以在较新版本中逐渐被弱化。

缓冲池(Buffer Pool):InnoDB 存储引擎等有缓冲池机制。缓冲池是一块内存区域,用于缓存从磁盘读取的数据页和索引页。当查询需要读取数据时,如果数据已经在缓冲池中,就可以直接从内存中获取,大大提高了查询速度。缓冲池会根据一定的算法(如 LRU,最近最少使用算法)来管理内存中的数据页,将经常访问的数据页保留在缓冲池中,将不经常访问的数据页淘汰出缓冲池。


http://www.niftyadmin.cn/n/5795436.html

相关文章

各个领域的常用编程语言

高级编程语言: Python - 易于学习,广泛应用于Web开发、数据科学、人工智能等。 Java - 用于企业级应用、安卓开发。 C# - 微软开发,主要用于.NET框架。 JavaScript - Web开发的核心语言,也可以用于服务器端编程(Node.j…

音视频入门基础:MPEG2-TS专题(21)——FFmpeg源码中,获取TS流的视频信息的实现

一、引言 通过FFmpeg命令可以获取到TS文件/TS流的视频压缩编码格式、色彩格式(像素格式)、分辨率、帧率信息: ./ffmpeg -i XXX.ts 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这些视频信息的。 二、视频压缩编码格式 FFmpeg获取TS文…

Redis——缓存预热+缓存雪崩+缓存击穿+缓存穿透

文章目录 1、 缓存预热2、 缓存雪崩3、 缓存击穿4、 缓存穿透总结 1、 缓存预热 什么是预热: mysql加入新增100条记录,一般默认以mysql为准作为底单数据,如何同步给redis(布隆过滤器)这100条新数据。 为什么需要预热…

网络直播带货查询系统设计与实现:SSM + JAVA 核心架构与 JSP 支撑

第四章 系统设计 4.1 系统体系结构 网络直播带货网站的结构图4-1所示: 图4-1 系统结构 模块包括主界面,主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等进行相应的操作。 登录系统结构图,如图4-2所示&#xf…

Suno Api V4模型无水印开发「高清音频WAV下载」 —— 「Suno Api系列」第6篇

历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中,支持120并发任务 Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇 Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇 Suno Api V4模型无水印开发「AI生成歌词」…

python:正则表达式

正则表达式(Regular Expressions,简称 regex)是一种强大的文本处理工具,用于匹配字符串中的字符组合。Python 提供了 re 模块来支持正则表达式的操作。以下是一些常用的正则表达式操作和示例: 导入 re 模块 首先&…

Docker dockerfile镜像编码 centos7

一、 大多数docker基础镜像使用locale查看编码,发现默认编码都是POSIX,这会导致中文乱码。 解决方法如下: 二、首先使用locale -a查看容器所有语言环境 三、dockerfile中加入以下参数重新生成镜像   ENV LANGen_US.UTF-8   ENV TZAsia/Shanghai  …

四川托普信息技术职业学院教案1

四川托普信息技术职业学院教案 【计科系】 周次 第 1周,第1次课 备 注 章节名称 第1章 XML语言简介 引言 1.1 HTML与标记语言 1.2 XML的来源 1.3 XML的制定目标 1.4 XML概述 1.5 有了HTML了,为什么还要发展XML 1.5.1 HTML的缺点 1.5.2 XML的特点 1.6 X…