面试问到MySQL模块划分与架构体系怎么办

news2024/11/26 16:32:30

面试问到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语句进行解析和语法分析,以便后续的优化和执行。

解析器的主要功能

  1. 词法分析:解析器首先会对SQL语句进行词法分析,将输入的字符串按照空格、括号、逗号等分隔符进行切割,形成一个个标记(Token)。

  2. 语法分析:解析器根据MySQL定义的语法规则,对词法分析得到的标记进行语法分析,建立一棵语法树(Parse Tree)或语法分析树(Abstract Syntax Tree,AST)。语法分析的过程中,解析器会检查SQL语句的结构是否符合语法规则,如果发现错误,会抛出相应的错误信息。

  3. 语义分析:解析器会对语法分析得到的语法树进行语义分析,以确定SQL语句的意义和执行计划。例如,解析器会检查表名、列名是否存在,检查数据类型是否匹配,以及解析查询语句的选项(如DISTINCT、GROUP BY、HAVING等)。

  4. 优化:解析器将解析得到的语法树交给优化器(Optimizer)进行进一步的优化。优化器会考虑不同的执行计划,选择最优的执行计划,并生成相应的执行计划树(Execution Plan Tree)。

解析器的工作是将用户输入的SQL语句转化为可执行的内部表示形式,为后续的执行器(Executor)执行提供必要的信息和指令。通过解析器,MySQL能够理解和处理用户提交的SQL语句,并将其转化为对底层存储引擎的实际操作。

举个解析器 例子理解一下

假设有以下SQL语句:SELECT * FROM customers WHERE age > 30;

  1. 词法分析:将输入的SQL语句按照空格和关键字进行切割,得到以下标记序列:SELECT, *, FROM, customers, WHERE, age, >, 30, ;

  2. 语法分析:根据MySQL的语法规则,将标记序列构建成语法树。语法树的结构
    在这里插入图片描述

  3. 语义分析:解析器进行语义分析,检查语法树中的表名、列名是否存在,数据类型是否匹配等。例如,解析器会检查是否存在名为"customers"的表,以及"age"列是否存在。

  4. 优化:解析器将语法树交给优化器进行优化,选择最优的执行计划。在这个例子中,优化器可能会考虑是否使用索引来加速查询,并生成相应的执行计划树。

解析器完成以上过程后,将生成的内部表示形式传递给执行器,执行器根据执行计划执行具体的操作,返回查询结果给用户。

2.4. 优化器

优化器的主要任务是根据查询语句的语义和数据库的统计信息,选择最优的执行计划来执行查询操作。优化器的目标是通过选择最优的执行计划,从而提高查询的执行效率和性能。优化器的工作是在查询执行之前进行的,它的输出是一个优化的执行计划,用于指导数据库引擎的具体执行操作。

优化器的工作流程

  1. 查询重写:优化器会对查询语句进行重写,将其转化为逻辑查询树或者其他内部表示形式。在这个过程中,优化器会进行语法分析、语义分析和查询优化规则的应用,以生成一个优化的查询计划。

  2. 代价估算:优化器会对每个可能的查询计划进行代价估算,评估每个计划执行所需的时间、CPU和内存开销等。这个过程主要是根据数据库的统计信息和查询操作的特性来进行估算,以便选择代价最低的执行计划。

  3. 执行计划生成:优化器会根据代价估算的结果,选择一个最优的执行计划。执行计划是一个具体的操作序列,描述了查询操作在数据库引擎中的执行顺序和方式。优化器会考虑索引、连接操作、排序和聚合等操作的执行顺序和方法,以最小化查询的执行代价。

  4. 执行计划优化:生成执行计划后,优化器还会对执行计划进行进一步的优化。这包括对操作的顺序进行优化、选择最适合的算法和数据结构、选择合适的并行度等。

举个优化器 例子理解一下

假设有一个电商平台,需要进行用户的购物车查询和商品信息查询。有以下两个表:

表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优化器可以进行以下优化:

  1. 查询重写:优化器可以将查询语句重写为内部表示形式,例如将关键字“JOIN”和“ON”转化为适合优化的形式。

  2. 优化规则应用:优化器可以根据查询语句的结构和语义,应用一系列的查询优化规则。例如,优化器可以将WHERE子句中的“A.user_id = 12345”转化为一个过滤条件,以提前过滤掉不满足条件的行。

  3. 统计信息收集:优化器可以根据表A和表B的统计信息,如索引的选择性、行数等,来估计执行各个操作的成本。例如,优化器可以根据索引的选择性和行数估计连接操作的成本,以决定使用哪个表作为驱动表和被驱动表。

  4. 执行计划生成:根据代价估算的结果,优化器可以生成一个执行计划。在这个例子中,优化器可能选择使用索引来进行表的连接操作,以减少磁盘IO的开销,并且根据WHERE子句的过滤条件,选择合适的索引进行过滤操作。

  5. 执行计划优化:生成执行计划后,优化器还可以对执行计划进行进一步的优化。例如,优化器可以对操作的顺序进行优化,选择最适合的算法和数据结构,以及选择合适的并行度。

通过以上优化步骤,MySQL优化器可以选择最优的执行计划,以提高查询的性能和效率。在这个例子中,优化器可能选择使用用户ID为索引进行过滤操作,并通过商品ID进行表的连接操作,以获取指定用户的购物车商品信息,并按照价格降序排列。这样可以减少磁盘IO的开销,并快速获取所需的结果集。

2.5. 缓存

MySQL缓存指的是MySQL服务器的内存缓存,也称为查询缓存(Query Cache)。MySQL缓存是指MySQL服务器将执行过的查询结果存储在内存中,并在下一次有相同的查询请求时,直接从内存中返回结果,而不需要再次执行查询语句。这样可以大大提高查询的性能和效率。

MySQL缓存可以分为两种:

  1. 查询缓存(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中切换存储引擎:

  1. 查看当前使用的存储引擎:可以使用以下命令查看MySQL当前的默认存储引擎和已安装的存储引擎:

    SHOW ENGINES;
    
  2. 选择并安装新的存储引擎:根据需求选择合适的存储引擎,然后按照引擎提供的安装说明进行安装。

  3. 修改MySQL配置文件:将MySQL配置文件(通常是my.cnf)中的default_storage_engine参数设置为新的存储引擎。

  4. 重启MySQL服务器:重启MySQL服务器使新的存储引擎生效。

  5. 创建和使用新的存储引擎表:使用CREATE TABLE语句创建新的存储引擎表,并在查询时指定使用新的存储引擎。

3.2. 常见的MySQL存储引擎包括:

  1. InnoDB引擎:InnoDB是MySQL默认的存储引擎,它支持事务、行级锁和外键约束等特性。InnoDB引擎适用于大多数应用场景,尤其是需要事务支持和高并发读写的场景。

  2. MyISAM引擎:MyISAM是MySQL的另一种常用存储引擎,它不支持事务和行级锁,但具有快速的读取性能和较小的存储空间占用。MyISAM引擎适用于读密集的应用场景,如数据仓库和日志分析。

  3. Memory引擎:Memory引擎将表数据存储在内存中,具有快速的读写性能和低延迟。但是,由于数据存储在内存中,重启MySQL服务器或服务器崩溃时会导致数据丢失。Memory引擎适用于需要快速读写的临时表和缓存表。

  4. NDB Cluster引擎:NDB Cluster引擎是MySQL的分布式存储引擎,它可以将数据分布在多个节点上,并提供高可用性和容错性。NDB Cluster引擎适用于需要高可用性和大规模数据存储的场景,如电信、金融和互联网应用。

除了以上常见的存储引擎,还有其他一些存储引擎如Archive、CSV、Blackhole等,它们具有各自的特点和适用场景
在这里插入图片描述

参考文档

https://www.geeksforgeeks.org/architecture-of-mysql/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1048165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT社交时代降临!Meta在三大平台,集成28个生成式AI!

9月28日,全球社交、科技巨头Meta(前身是Facebook)在官网宣布,在旗下的Instagram、WhatsApp和Messenger三大社交平台中,集成28个生成式AI聊天机器人。 据悉,这些AI机器人是基于Meta最新发布的大语言模型Lla…

力扣-349.两个数组的交集

Idea 使用两个哈希集合&#xff0c;其中一个用来存储第一个数组&#xff0c;第二个来存储两个数组的交集&#xff0c;因为集合自带去重功能&#xff0c;因此最后用数组来接收就好了 AC Code class Solution { public:vector<int> intersection(vector<int>& n…

自动化测试框架总结

前言 自动化测试框架是一套工具、库和规范的集合&#xff0c;用于支持和简化自动化测试的开发、执行和管理。 提供一种结构化的方法来编写、组织和执行自动化测试用例&#xff0c;并提供一些常用的功能和工具&#xff0c;例如测试用例管理、结果报告生成、测试数据管理、日志…

17周年庆第一弹|中秋·国庆双节大促购物指南,给力狂欢!

随着中秋和国庆双节的来临,百脑汇广州店为了满足消费者的购物需求,特别推出了本次17周年店庆月:双节大促购物指南。本指南将为您介绍百脑汇广州店的优惠购机活动、热门商品等等,帮助您在本次17周年店庆月中获得更好的体验。 百脑汇广州店17周年店庆月第一弹:中秋国庆双节大促中…

【面试经典 150 | 滑动窗口】串联所有单词的子串

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;两个哈希表方法二&#xff1a;滑动窗口 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一…

【图论C++】树的重心——教父POJ 3107(链式前向星的使用)

》》》算法竞赛 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载…

$nextTick解决echarts宽度固定为100%的问题

问题描述:vue+element项目中使用到了tab切换选项卡,其中有一个tab下的内容是echarts,出现了echarts宽度缩减为100px无法继承100%属性。 问题: echarts渲染时tab选项卡display为none,所以width:100%没有可继承项,被echarts自带方法切割成100px。 我他喵的解决这个问题还是…

给 shell 自定义快捷键

shell 快捷键原理 本质上对于 shell 来说只有输入输出&#xff0c;它不会监听你系统快捷键的&#xff0c;监听快捷键其实是终端模拟器的责任&#xff0c;他会将你输入的快捷键转换成字符串序列。当我们使用了类似 ctrl -> 这样的快捷键&#xff0c;shell 会根据你输入的字…

QT的ui设计中改变样式表的用法

在QT的ui设计中,我们右键会弹出一个改变样式表的选项,很多人不知道这个是干什么的。 首先我们来看下具体的界面 首先我们说一下这个功能具体是干嘛的, 我们在设置很多控件在界面上之后,常常都是使用系统默认的样式,但是当有些时候为了美化界面我们需要对一些控件进行美化…

进阶JS-内置构造函数

基本数据类型&#xff1a;string、number、boolean、undefined、null 引用类型:对象 其实字符串、数值、布尔等基本类型也都有专门的构造函数&#xff0c;这些我们称为包装类型。 JS中几乎所有的数据都可以基于构成函数创建。 const str andy//其实是const strnew String(a…

【EI会议征稿】第三届机械、建模与材料工程国际学术会议(I3ME 2023)

第三届机械、建模与材料工程国际学术会议&#xff08;I3ME 2023&#xff09; 2023 3rd International Conference on Mechanical, Modeling and Materials Engineering 第三届机械、建模与材料工程国际学术会议&#xff08;I3ME 2023&#xff09;将于2023年12月1-3日在中国长春…

一套成熟的Spring Cloud智慧工地平台源码,自主版权,开箱即用

智慧工地云平台源码 APP端PC端数据大屏端全套源码 自主版权&#xff0c;开箱即可项目使用 智慧工地利用移动互联、物联网、云计算、大数据等新一代信息技术&#xff0c;彻底改变传统施工现场各参建方的交互方式、工作方式和管理模式&#xff0c;为建设集团、施工企业、监理单位…

第二证券:券商近期关注点浮现 扎堆调研19只个股 上调旅游股评级

19只个股 被券商扎堆调研 东方财富Choice数据显现&#xff0c;9月以来券商保持高强度的调研节奏&#xff0c;19只个股获得超25家券商扎堆调研&#xff0c;首要会合在半导体、医药生物、新能源、机械设备等范畴。人气最高的股票分别是埃斯顿、周大生、南网科技、卫星化学、宁波…

11.1Spring基础(核心概念,创建和使用,简单读取)

一.Spring概念: 1.Spring就是包含了众多工具方法的IoC容器. 2.IoC容器:控制反转,指的是对象的生命周期,将对象的生命周期(什么时候创建,销毁)交给Spring进行管理. 在传统开发中,如果A类依赖B类,会在A类中创建B类的实例,如果B类增加一个属性,那么使用B类的构造方法需要修改代码…

Java基于SpringBoot的原创歌曲分享平台

文章目录 1 简介2 技术栈3 需求分析4 平台设计主要功能5 平台实现5.1平台功能模块 5.2后台功能模块52.1管理员功能模块5.2.2用户功能模块 源码咨询 1 简介 原创歌曲分享平台&#xff0c;为了随时随地查看原创歌曲分享信息提供了便捷的方法&#xff0c;更重要的是大大的简化了管…

外卖霸王餐平台究竟是如何运作的?以及盈利点到底在哪里?

外卖霸王餐 1、业务简介。业务模式是消费者以5-10元吃到原价15-25元的外卖&#xff0c;底层逻辑是帮外卖商家做推广&#xff0c;解决新店基础销量、老店增加单量、品牌打万单店的需求。 因为外卖店的平均生命周期只有6个月&#xff0c;不断有新店愿意送霸王餐。部分老店也愿…

指南:通过 NFTScan API 获取钱包地址的 NFT Statistics 全量数据

获取钱包地址的全量 NFT 及统计分析数据对于开发者和投资者来说都是十分重要的。具体来说&#xff1a;对开发者而言&#xff0c;获取每个钱包的完整资产数据&#xff0c;并进行统计分析&#xff0c;是构建钱包管理工具、资产分析应用的基础&#xff0c;这些应用都需要全面且精确…

安装typescript之后提示不是内部命令

解决方案&#xff1a; 1、删除C:\Users\用户\下的.npmrc文件 2、在命令行输入npm cache clean --force 以上提示表示执行成功 3、重新安装typescript npm install -g typescript tsc

算法-堆/多路归并-查找和最小的 K 对数字

算法-堆/多路归并-查找和最小的 K 对数字 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/find-k-pairs-with-smallest-sums/description/?envTypestudy-plan-v2&envIdtop-interview-150 1.2 题目描述 2 优先级队列构建大顶堆 2.1 思路 将两个数字的和放入大…