面试问到MySQL模块划分与架构体系怎么办
面试问到Mysql模块划分与架构体系怎么办
文章目录
- 1. 应用层
- 连接管理器(Connection Manager)
- 安全性和权限模块(Security and Privilege Module)
- 2. MySQL服务器层
- 2.1. 服务支持和工具集
- 2.2. SQL Interface
- 2.3. 解析器
- 举个解析器 例子理解一下
- 2.4. 优化器
- 举个优化器 例子理解一下
- 2.5. 缓存
- 3. 存储引擎层
- 3.1. 可插拔的特性
- 3.2. 常见的MySQL存储引擎包括:
- 参考文档

图片来源 https://www.rathishkumar.in/2016/04/understanding-mysql-architecture.html
1. 应用层
这是MySQL架构中的最上层,有的文章里叫做网络接入层
,可以在许多客户端 - 服务器架构中看到这个层。这一层包括一些大多数客户端 - 服务器应用程序的常见服务,核心就干三件事 连接处理、身份验证、安全。
连接管理器(Connection Manager)
当客户端连接到服务器时,客户端会为其连接获得自己的线程。所有来自该客户端的查询都在指定的线程内执行。线程由服务器缓存,因此不需要为每个新连接创建和销毁。
安全性和权限模块(Security and Privilege Module)
在客户端成功连接到MySQL服务器后,服务器将检查该客户端是否有权限对MySQL服务器发出某些查询。
2. MySQL服务器层
这一层负责MySQL关系数据库管理系统的所有逻辑功能。MySQL服务器的大脑位于这一层。MySQL的逻辑层分为几个子组件,包括:服务接口和工具集、SQL接口、SQL解析器、优化器、缓存和缓冲区。
2.1. 服务支持和工具集
MySQL提供了相当广泛的服务支持和工具集 。这是MySQL受欢迎的主要原因之一。这一层为MySQL系统的管理和维护提供了服务和实用程序,支持备份和恢复、安全、复制、集群、分区、工作台等辅助和高可用扩展支持功能。
2.2. SQL Interface
结构化查询语言(SQL)是一种查询语言,用于查询MySQL服务器。它是MySQL客户端用户和服务器之间互动的工具。一些SQL组件包括数据操作语言(DML)、数据定义语言(DDL)、存储过程、视图、触发器。
2.3. 解析器
解析器(Parser)是MySQL服务层的一个重要组件,负责将用户提交的SQL语句进行解析和语法分析,以便后续的优化和执行。
解析器的主要功能
-
词法分析:解析器首先会对SQL语句进行词法分析,将输入的字符串按照空格、括号、逗号等分隔符进行切割,形成一个个标记(Token)。
-
语法分析:解析器根据MySQL定义的语法规则,对词法分析得到的标记进行语法分析,建立一棵语法树(Parse Tree)或语法分析树(Abstract Syntax Tree,AST)。语法分析的过程中,解析器会检查SQL语句的结构是否符合语法规则,如果发现错误,会抛出相应的错误信息。
-
语义分析:解析器会对语法分析得到的语法树进行语义分析,以确定SQL语句的意义和执行计划。例如,解析器会检查表名、列名是否存在,检查数据类型是否匹配,以及解析查询语句的选项(如DISTINCT、GROUP BY、HAVING等)。
-
优化:解析器将解析得到的语法树交给优化器(Optimizer)进行进一步的优化。优化器会考虑不同的执行计划,选择最优的执行计划,并生成相应的执行计划树(Execution Plan Tree)。
解析器的工作是将用户输入的SQL语句转化为可执行的内部表示形式,为后续的执行器(Executor)执行提供必要的信息和指令。通过解析器,MySQL能够理解和处理用户提交的SQL语句,并将其转化为对底层存储引擎的实际操作。
举个解析器 例子理解一下
假设有以下SQL语句:SELECT * FROM customers WHERE age > 30;
-
词法分析:将输入的SQL语句按照空格和关键字进行切割,得到以下标记序列:SELECT, *, FROM, customers, WHERE, age, >, 30, ;
-
语法分析:根据MySQL的语法规则,将标记序列构建成语法树。语法树的结构
-
语义分析:解析器进行语义分析,检查语法树中的表名、列名是否存在,数据类型是否匹配等。例如,解析器会检查是否存在名为"customers"的表,以及"age"列是否存在。
-
优化:解析器将语法树交给优化器进行优化,选择最优的执行计划。在这个例子中,优化器可能会考虑是否使用索引来加速查询,并生成相应的执行计划树。
解析器完成以上过程后,将生成的内部表示形式传递给执行器,执行器根据执行计划执行具体的操作,返回查询结果给用户。
2.4. 优化器
优化器的主要任务是根据查询语句的语义和数据库的统计信息,选择最优的执行计划来执行查询操作。优化器的目标是通过选择最优的执行计划,从而提高查询的执行效率和性能。优化器的工作是在查询执行之前进行的,它的输出是一个优化的执行计划,用于指导数据库引擎的具体执行操作。
优化器的工作流程
-
查询重写:优化器会对查询语句进行重写,将其转化为逻辑查询树或者其他内部表示形式。在这个过程中,优化器会进行语法分析、语义分析和查询优化规则的应用,以生成一个优化的查询计划。
-
代价估算:优化器会对每个可能的查询计划进行代价估算,评估每个计划执行所需的时间、CPU和内存开销等。这个过程主要是根据数据库的统计信息和查询操作的特性来进行估算,以便选择代价最低的执行计划。
-
执行计划生成:优化器会根据代价估算的结果,选择一个最优的执行计划。执行计划是一个具体的操作序列,描述了查询操作在数据库引擎中的执行顺序和方式。优化器会考虑索引、连接操作、排序和聚合等操作的执行顺序和方法,以最小化查询的执行代价。
-
执行计划优化:生成执行计划后,优化器还会对执行计划进行进一步的优化。这包括对操作的顺序进行优化、选择最适合的算法和数据结构、选择合适的并行度等。
举个优化器 例子理解一下
假设有一个电商平台,需要进行用户的购物车查询和商品信息查询。有以下两个表:
表A:用户购物车表(id, user_id, product_id, quantity)
表B:商品信息表(product_id, product_name, price)
现在有一个查询语句:
SELECT A.user_id, B.product_name, B.price, A.quantity
FROM A
JOIN B ON A.product_id = B.product_id
WHERE A.user_id = 12345
ORDER BY B.price DESC
在这个例子中,MySQL优化器可以进行以下优化:
查询重写:优化器可以将查询语句重写为内部表示形式,例如将关键字“JOIN”和“ON”转化为适合优化的形式。
优化规则应用:优化器可以根据查询语句的结构和语义,应用一系列的查询优化规则。例如,优化器可以将WHERE子句中的“A.user_id = 12345”转化为一个过滤条件,以提前过滤掉不满足条件的行。
统计信息收集:优化器可以根据表A和表B的统计信息,如索引的选择性、行数等,来估计执行各个操作的成本。例如,优化器可以根据索引的选择性和行数估计连接操作的成本,以决定使用哪个表作为驱动表和被驱动表。
执行计划生成:根据代价估算的结果,优化器可以生成一个执行计划。在这个例子中,优化器可能选择使用索引来进行表的连接操作,以减少磁盘IO的开销,并且根据WHERE子句的过滤条件,选择合适的索引进行过滤操作。
执行计划优化:生成执行计划后,优化器还可以对执行计划进行进一步的优化。例如,优化器可以对操作的顺序进行优化,选择最适合的算法和数据结构,以及选择合适的并行度。
通过以上优化步骤,MySQL优化器可以选择最优的执行计划,以提高查询的性能和效率。在这个例子中,优化器可能选择使用用户ID为索引进行过滤操作,并通过商品ID进行表的连接操作,以获取指定用户的购物车商品信息,并按照价格降序排列。这样可以减少磁盘IO的开销,并快速获取所需的结果集。
2.5. 缓存
MySQL缓存指的是MySQL服务器的内存缓存,也称为查询缓存(Query Cache)。MySQL缓存是指MySQL服务器将执行过的查询结果存储在内存中,并在下一次有相同的查询请求时,直接从内存中返回结果,而不需要再次执行查询语句。这样可以大大提高查询的性能和效率。
MySQL缓存可以分为两种:
- 查询缓存(Query Cache)
当一个查询被执行时,MySQL服务器会将查询结果存储在内存中。如果下次有相同的查询请求,MySQL会直接从缓存中返回结果,而不去执行查询语句。查询缓存对于相同查询请求的重复查询非常有效,但对于更新频繁的表和数据变化较大的表,会导致缓存命中率低,影响性能。
MySQL 8.0版本已经移除了查询缓存功能,主要原因是因为查询缓存对于高并发的查询和更新操作会导致性能瓶颈,而且查询缓存对于更新频繁的表和数据变化较大的表,会导致缓存命中率低,影响性能。
3. 存储引擎层
可插拔存储引擎功能使MySQL成为开发者首选。这是MySQL能够在大玩家中取得优势的特性。MySQL允许我们根据不同的情况和要求选择各种存储引擎。我们将在即将到来的文章中讨论每个存储引擎的特性,这里只列出了支持的存储引擎的列表。
MyISAM、InnoDB、Federated、Mrg_MyISAM、Blackhole、CSV、Memory、Archive、Performance_schema。
3.1. 可插拔的特性
这意味着用户可以根据自己的需求选择合适的存储引擎,甚至可以在不停止MySQL服务器的情况下切换存储引擎。
之所以可以插拔的方式,是因为MySQL提供了一个叫做存储引擎API的接口,允许第三方开发者开发自己的存储引擎,并将其集成到MySQL中。通过这个接口,用户可以定制存储引擎,以满足各种不同的数据存储需求。
用户可以通过以下步骤在MySQL中切换存储引擎:
-
查看当前使用的存储引擎:可以使用以下命令查看MySQL当前的默认存储引擎和已安装的存储引擎:
SHOW ENGINES;
-
选择并安装新的存储引擎:根据需求选择合适的存储引擎,然后按照引擎提供的安装说明进行安装。
-
修改MySQL配置文件:将MySQL配置文件(通常是my.cnf)中的default_storage_engine参数设置为新的存储引擎。
-
重启MySQL服务器:重启MySQL服务器使新的存储引擎生效。
-
创建和使用新的存储引擎表:使用CREATE TABLE语句创建新的存储引擎表,并在查询时指定使用新的存储引擎。
3.2. 常见的MySQL存储引擎包括:
-
InnoDB引擎:InnoDB是MySQL默认的存储引擎,它支持事务、行级锁和外键约束等特性。InnoDB引擎适用于大多数应用场景,尤其是需要事务支持和高并发读写的场景。
-
MyISAM引擎:MyISAM是MySQL的另一种常用存储引擎,它不支持事务和行级锁,但具有快速的读取性能和较小的存储空间占用。MyISAM引擎适用于读密集的应用场景,如数据仓库和日志分析。
-
Memory引擎:Memory引擎将表数据存储在内存中,具有快速的读写性能和低延迟。但是,由于数据存储在内存中,重启MySQL服务器或服务器崩溃时会导致数据丢失。Memory引擎适用于需要快速读写的临时表和缓存表。
-
NDB Cluster引擎:NDB Cluster引擎是MySQL的分布式存储引擎,它可以将数据分布在多个节点上,并提供高可用性和容错性。NDB Cluster引擎适用于需要高可用性和大规模数据存储的场景,如电信、金融和互联网应用。
除了以上常见的存储引擎,还有其他一些存储引擎如Archive、CSV、Blackhole等,它们具有各自的特点和适用场景
参考文档
https://www.geeksforgeeks.org/architecture-of-mysql/
相关文章:

面试问到MySQL模块划分与架构体系怎么办
面试问到Mysql模块划分与架构体系怎么办 文章目录 1. 应用层连接管理器(Connection Manager)安全性和权限模块(Security and Privilege Module) 2. MySQL服务器层2.1. 服务支持和工具集2.2. SQL Interface2.3. 解析器举个解析器 …...
并查集及其优化
1.并查集 #define SIZE 100 int UFSets[SIZE];void Initial(int S[]) {for (int i 0; i < SIZE; i)S[i]-1; }int Find(int S[], int x) {//查while(S[x] > 0)x S[x];return x; }void Union(int S[], int Root1, int Root2) {//并if(Root1 Root2)return;S[Root2] Roo…...

LeetCode 周赛上分之旅 #48 一道简单的树上动态规划问题
⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度…...

mysql报错:Column Count Doesn‘t Match Value Count at Row 1
mysql中执行insert、update、delete报错:Column Count Doesnt Match Value Count at Row 1 的解决方案 通常情况:字段不匹配 如:student有id, name, age字段 -- 错误写法 INSERT INTO student VALUES(5,horse)-- 正确写法 INSERT INTO stu…...

安卓 kuaishou 设备did和egid 学习分析
did和egid注册 接口 https://gdfp.ksapisrv.com/rest/infra/gdfp/report/kuaishou/android did 是本地生成的16进制 或者 获取的 android_id public static final Random f16237a new Random(System.currentTimeMillis()); public static long m19668a() { return f1623…...

基于Vue+ELement实现增删改查案例与表单验证(附源码)
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《ELement》。🎯🎯 …...
webpack:使用externals配置来排除打包后的某个依赖插件IgnorePlugin的使用
背景 假设,我们写了一个库并使用 webpack 打包输出 bundle,但是这个库依赖一个第三方包,比如依赖 lodash,这时候我们不想把这个库打包进 bundle 里因为体积会变大,而且我们的主项目里已经安装了这个 lodash࿰…...

2023年中国工业脱水机行业供需分析:随着自动化和智能化技术的快速发展,销量同比增长4.9%[图]
工业脱水机行业是指专门从湿润的固体物料中去除水分的设备制造和相关服务。它广泛应用于食品加工、化工、制药、纺织、环保等行业,用于去除物料中的水分,提高产品质量和降低能耗。 工业脱水机行业分类 资料来源:共研产业咨询(共研…...
[论文笔记]MacBERT
引言 今天带来MacBERT的阅读笔记。论文题目是 重新审视中文自然语言处理的预训练模型。 本篇主要是探讨中文预训练语言模型在非英文语言中的有效性,然后提出了一种简单而有效的模型,称为MacBERT,它在多个方面改进了RoBERTa,特别是采用纠错型掩码语言模型(MLM as correcti…...
AI发展目前最大挑战是什么?
影响AI成本的因素包括多个方面: 首先,AI技术的复杂性是其成本高昂的一个重要原因。AI技术需要进行大量数据处理、模型训练和优化,这需要耗费大量的计算资源和时间。同时,AI技术需要高水平的专业人才进行设计、开发和维护…...
自然语言处理NLP:LTP、SnowNLP、HanLP 常用NLP工具和库对比
文章目录 常见NLP任务常见NLP工具英文NLP工具中文NLP工具 常见NLP任务 Word Segmentation 分词 – Tokenization Stem extraction 词干提取 - Stemming Lexical reduction 词形还原 – Lemmatization Part of Speech Tagging 词性标注 – Parts of Speech Named entity rec…...

百度交易中台之内容分润结算系统架构浅析
作者 | 交易中台团队 导读 随着公司内容生态的蓬勃发展,内容产出方和流量提供方最关注的“收益结算”的工作,也就成为重中之重。本文基于内容分润结算业务为入口,介绍了实现过程中的重难点,比如千万级和百万级数据量下的技术选型和…...
【索引】常见的索引、B+树结构、什么时候需要使用索引、优化索引方法、索引主要的数据结构、聚簇索引、二级索引、创建合适的索引等重点知识汇总
目录 索引的分类 什么时候需要 / 不需要创建索引? 有什么优化索引的方法 MySQL索引主要使用的两种数据结构是什么 为什么 MySQL 采用 B 树作为索引 聚簇索引和二级索引 根据给定的表,如何创建索引比较好 索引的分类 普通索引:最基本的…...

Egg 封装接口返回信息
中间件封装 代码 const msgArr {"200":成功,"401":token失效 } module.exports (option, app) > {return async function(ctx, next) {try{//成功是返回的信息ctx.emit(code,data,msg)>{console.log(1111,code,data,msg)ctx.body {code,data:dat…...
Android AMS——创建APP进程(五)
接上一篇,在 ActivityTaskSupervisor 中会判断进程是否存在,如果进程不存在,则会创建进程,执行 startProcessAsync() 方法。如果进程存在,则执行 realStartActivityLocked() 方法。在APP 的启动时,进程是不存在的。所以我们先来分析一下进程不存在的情况。 一、创建进程…...

凉鞋的 Unity 笔记 102. 场景层次 与 GameObject 的增删改查
102. 场景层次 与 GameObject 的增删改查 在上一篇,我们完成了 Unity 引擎的 Hello world 输出,并且完成了第一个基本循环: 通过这次基本循环的完成,我们获得了一点点的 Unity 使用经验,这非常重要。 有实践经验后再…...

信息安全:网络安全审计技术原理与应用.
信息安全:网络安全审计技术原理与应用. 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。网络安全审计的作用在于建立“事后“安全保障措施,保存网络安全事件及行为信息,为网络安全事件分析提供线…...

嵌入式Linux应用开发-第十三章APP怎么读取按键值
嵌入式Linux应用开发-第十三章读取按键及按键驱动程序 第十三章 APP怎么读取按键值13.1 妈妈怎么知道孩子醒了13.2 APP读取按键的4种方法13.2.1 查询方式13.2.2 休眠-唤醒方式13.2.3 poll方式13.2.4 异步通知方式13.2.4.1 异步通知的原理:发信号13.2.4.2 应用程序之…...

Web 中间件怎么玩?
本次主要是聊聊关于 web 中间件, 分为如下四个方面 什么是 web 框架中间件 为什么要使用 web 中间件 如何使用及其原理 哪些场景需要使用中间件 开门见山 web 中间件是啥 Web 框架中的中间件主要指的是在 web 请求到具体路由之前或者之后,会经过一个或…...
HMTL知识点系列(4)
目录 1. 在你过去的项目中,你如何解决HTML的布局和样式问题?2. 你能否解释一下HTML的“文档对象模型”(DOM)是什么,以及它的重要性?3. 你有没有经验处理网页的兼容性问题,特别是在不同浏览器之间…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...