面试问到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. 你有没有经验处理网页的兼容性问题,特别是在不同浏览器之间…...
CFS内网穿透靶场实战
一、简介 不久前做过的靶场。 通过复现CFS三层穿透靶场,让我对漏洞的利用,各种工具的使用以及横向穿透技术有了更深的理解。 一开始nmap探测ip端口,直接用thinkphpv5版本漏洞工具反弹shell,接着利用蚁剑对服务器直接进行控制,留下…...
【RabbitMQ实战】07 3分钟部署一个RabbitMQ集群
一、集群的安装部署 我们还是利用docker来安装RabbitMQ集群。3分钟安装一个集群,开始。 前提条件,docker安装了docker-compose。如果没安装的话,参考这里 docker-compose文件参考bitnami官网:https://github.com/bitnami/contai…...
PS 切片工具 选择切片 切片存储
上文 PS 透视裁剪工具 中 我们简单讲述了透视裁剪工具 今天 我们来讲他后面的切片工具 首先 他的用途还是很多的 例如 你有一个很大的图片 其中包括 轮播 导航 主题内容 但他们都在一个图片上 你就可以用切片工具 将完整的图片切成多个部分 这里 我们选择了切片工具 光标也会…...
Git版本控制系统
概念: 一个免费的 开源 分布式源码仓库,帮助团队维护代码 个人使用 多人联机使用 git安装: 这里直接看大佬的安装 文章 很不错的 git 安装配置https://blog.csdn.net/mukes/article/details/115693833 安装完毕之后: 使用命名git -v查看…...
Element UI搭建首页导航和左侧菜单以及Mock.js和(组件通信)总线的运用
目录 前言 一、Mock.js简介及使用 1.Mock.js简介 1.1.什么是Mock.js 1.2.Mock.js的两大特性 1.3.Mock.js使用的优势 1.4.Mock.js的基本用法 1.5.Mock.js与前端框架的集成 2.Mock.js的使用 2.1安装Mock.js 2.2.引入mockjs 2.3.mockjs使用 2.3.1.定义测试数据文件 2…...
What is an HTTP Flood DDoS attack?
HTTP 洪水攻击是一种针对 Web 和应用程序服务器的第 7 层分布式拒绝服务 (DDoS) 攻击。HTTP 洪水攻击通过使用 HTTP GET 或 HTTP POST 请求执行 DDoS 攻击。这些请求是有效的,并且针对可用资源,因此很难防范 HTTP 洪水攻击。 匿名…...
第 114 场 LeetCode 双周赛题解
A 收集元素的最少操作次数 模拟: 反序遍历数组,用一个集合存当前遍历过的不超过 k k k 的正数 class Solution { public:int minOperations(vector<int> &nums, int k) {unordered_set<int> vis;int n nums.size();int i n - 1;for (;; i--) {if…...
[Java框架] Java常用爬虫框架推荐
Selenium GitHub 截止 2023年9月份 Star数量27.7K Selenium是一款基于浏览器自动化的工具,它可以模拟用户在浏览器上的操作行为,并获取网页上的内容。Selenium支持多种浏览器,可以很好地处理JavaScript生成内容。但是Selenium相较于其他框架而…...
Kafka:安装与简单使用
文章目录 下载安装windows安装目录结构启动服务器创建主题发送一些消息启动消费者设置多代理集群常见问题 工具kafka tool 常用指令topic查看topic删除topic 常见问题参考文献 下载安装 下载地址:kafka-download windows安装 下载完后,找一个目录解压…...
029-从零搭建微服务-消息队列(一)
写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…...
网站制作目标及要求/推广营销软件
背景 在开发过程中,由于后端与前端并行开发,或者前端需要等待后台开发,难以保证对接效率,同时即使用开发好的 API 对接,也有可能一个 API 不通就阻塞了整个软件的对接工作。同时对软件的敏感度也很高,一不…...
江门市外事侨务局网站党建设/微信视频号小店
Salesforce系列(0):工作中常用的salesforce相关的英语词汇汇总! 前言 今天博主将为大家分享:Salesforce系列(0):工作中常用的salesforce相关的英语词汇汇总!不喜勿喷,如…...
网站开发人员如何写工作日志/有什么推广的平台
背景七年级数学上册第三章“一元一次方程”中,通过一些实际问题,研究了最基本的方程形式——一元一次方程,对求解一元一次方程采用了“去分母”、“去括号”、“移项”、“合并同类项”、“系数化1”等方法;学生在熟悉这些方法的同…...
郑州网站建设预订/湖南seo服务电话
本文大纲 我觉得很有必要讲述这个文章,进行数据处理的第一步就是Python数据读取。但是你可能没想到,在进行数据读取的同时,我们其实可以配合相关参数做很多事儿,这对于后续的数据处理都是极其有帮助。read_excel()函数和read_csv(…...
高端网站鉴赏/免费引流微信推广
有时候共享了文件夹,别人却无法访问,有可能是因为对方访问的用户没有密码导致的,给访问用户设置密码就可以. 但是有时候由于各种原因,不能给用户设置密码,这可怎么办? 其实这是一个安全策略导致的,该策略要求:使用空密码的账户只能通过控制台登陆. 把它关了就行,它在这里: 转载…...
wordpress默认管理员密码/百度搜图入口
node版本升级nvmnvmw覆盖安装第一次安装node,可以直接到官网下载安装程序直接安装就可以,但是安装后如何进行node的版本管理 发现网上也提供了node的版本管理工具: nvm nvm是MAC & Linux版本管理工具不适用于window nvmw nvmw是windo…...