MySQL架构设计其实很简单

news2024/10/5 21:22:39

一、概述

我们很多互联网项目首选的数据库就是MySql5.7,因为免费,支持数据库主从复制,读写分离,且语法简单,容易上手,虽然对sql的函数、触发器、存储过程有一定的了解,也能说出一些优化sql语句的方法,但这些只能说是对MySql的浅薄了解。

在当今这个社会,竞争异常的激烈,如果还只停留在表面的CRUD,那么是没有任何优势的,像现在的MySQL面试题,你能答出来吗?

说说MySQL中MVCC机制的原理?
MySQL的事务原理和实现?
MySQL数据主从复制的原理?
MySQL底层数据的存储结构?
如何使MySQL支持海量数据存储?
MySQL中的锁机制原理和实现?
MySQL索引机制?索引中涉及的数据结构和算法?
MySQL为何使用B+树作为索引结构?
B+树可以存放多少数据?
说说MySQL中间隙锁的实现原理?
InnoDB引擎为何会崩溃?说说其实现原理?
等等其他一系列高频面试

所以我们想对MySql有一个深入彻底的了解,就必须了解它的底层架构是怎么实现的。

今天就由我带领大家一块学习MySQL分层架构,深入了解MySQL底层实现原理、以及每层的作用,我们常见的Sql优化是在哪些层实现了优化。

二、架构详解

1、MySql的整体架构,如下图

在这里插入图片描述

  • 由图中我们可以看到数据库架构主要由Service层和存储引擎层。
  • Service层又分为连接器、分析器、优化器、执行器及缓存。所有跨存储引擎的功能都在这一层实现,如:函数、存储过程、触发器、视图等。
  • 存储引擎是可插拔式的,目前主要的存储引擎有MyISAM、InnoDB、Memory等,MySQL5.5之前默认是MyISAM、之后是InnoDB。

2、连接器

  • 连接器的主要作用是用来管理客户端的连接及身份认证。
  • 客户端与Server端的连接采用的是TCP协议,经过三次握手,建立连接之后,连接器开始进行身份验证。
  • 身份验证的代码

mysql -hlocalhost -P3306 -uroot -p

如果身份验证失败就会出现错误

ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)。

在这里,我们可以使用show processlist命令查看系统所有的连接信息
在这里插入图片描述

在上图中Command表示连接状态,Daemon表示后天进程,Query表示查询,Sleep表示看下连接。

3. 查询缓存

  • 可以端查询数据不会直接去使用存储引擎查询数据,而是先在缓存查询数据是否存在。如果存在,直接返回,否则再执行一遍查询流程,查询结束后再把结果缓存起来,这样可以大大提高查询效率。

  • 如果数据发生更改,将清空缓存,如执行update、insert、delete、alter等操作。

  • 对于频繁更改的数据,缓存的命中率很低,使用缓存反而降低了读写性能,所以在MySQL8.0后就移除了缓存模块。

  • 可以通过下面的命令查看缓存是否开启

show variables like ‘%query_cache%’;

在这里插入图片描述

4、分析器

  • 主要对MySQL的词法和语法进行分析。
  • 首先进行词法分析,分析出MySQL的关键字、以及每个词语代表的含义。然后进行语法分析,是否遵循MySQL的要求。
  • MySQL识别语句中的列名、表名、select、update、insert、where等MySQL关键字,再根据语法规则判断sql语句是否符合满足语法,最终生成一个抽象的语法数(AST)。
  • 比如:sql语句中少写个where关键字,就会提示错误。
mysql> use shop;
mysql> select * from sys_user id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 1' at line 1

5. 优化器

  • 在真正执行sql语句之前,还要经过优化器进行处理。
  • 例如我们熟悉的执行计划 Explain 就是优化器生成的。
  • 优化器主要有两个作用:逻辑优化和物理优化。

1、逻辑优化主要进行等价微词重写、条件化简、子查询消除、连接消除、语义优化、分组合并、选择下推、索引优化查询、表查询替换视图查询、Union替换or操作等。
2、物理优化主要通过贪婪算法,根据代价估值模型,估算出每种执行方式的代价。并使用索引优化表连接,最终生成查询执行计划。

如下图就是优化的详细过程:
在这里插入图片描述
如果想知道优化器估算结果信息,可以通过Explain查看,如:

mysql> explain select * from sys_user where id = 1;

6. 执行器

在优化器对sql语句的优化完成,并生成了执行计划后, 就会把执行计划传递给执行器。
执行器调用存储引擎接口,真正的执行查询。获取到存储引擎返回的结果,并把结果返回给客户端,至此查询语句结束。

7、整个查询过程,如图:

在这里插入图片描述

8、总结

本文主要对MySQL的底层架构进行了简单的介绍,同时对每层架构的作用都做了详细的说明。从中我们可以看出MySQL每层架构分工明确、逻辑清晰、深刻体现了架构设计中“高内聚、低耦合”的设计思想。我们平时在架构设计的时候,也要多学习这种分层的架构设计思想。

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

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

相关文章

基于SpringBoot+Vue的前后端分离的博客管理系统

菜单 首页写文章内容管理 博客管理相册管理归档登录、注册(项目整合了shiro+jwt+redis,用户未登录不能发布博客、内容管理、相册、归档等功能) 文章​​​​​​​末尾赋前后端代码以及数据库文件链接!!! 1 首页 首页包括菜单、博客、登录用户、推荐博客排行、博客分类…

Autosar-Interface接口

文章目录 一、Autosar接口1、AUTOSAR Interface2、Standardized Interface3、Standardized AUTOSAR Interface二、AUTOSAR接口的通用规则三、示例-存储四、总结一、Autosar接口 在Autosar里规定了三类接口,分别是AUTOSAR接口,标准AUTOSAR接口和标准接口。 下图将所有的接口…

【Linux】I/O复用

概述 I/O复用使得程序能同时监听多个文件描述符,看文件上是否有用户感兴趣的事件发生,提高程序性能。 使用I/O复用技术的情况: 客户端同时处理多个套接字 客户端同时处理用户输入和网络连接 同时监听多个端口 同时处理TCP和UDP请求 TCP服务器…

【JavaEE】文件操作(InputStream、OutputStream)

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 在Java中总会用到文件操作,比如从盘符读写文件,按字节和字符进行数据读写,那么你真的认识什么是文件路径吗?平时谈到的“文件”,…

mybatis实现CRUD详解(使用mapper映射文件实现增删改查)

mybatis实现CRUD详解(使用mapper映射文件实现增删改查) 创建maven项目&#xff1a;项目结构如图所示 准备数据库表&#xff1a; 准备pom.xml所需的依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.…

快速弄懂RPC

快速弄懂RPC 常见的远程通信方式远程调用RPC协议RPC的运用场景和优势 常见的远程通信方式 基于REST架构的HTTP协议以及基于RPC协议的RPC框架。 远程调用 是指跨进程的功能调用。 跨进程可以理解为一个计算机节点的多个进程或者多个计算机节点的多个进程。 RPC协议 远程过…

C++string类

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容讲解了C中的string类以及类内的一些常用函数 Cstring类 文章…

k8s_3节点集群部署

背景 近期想在自己电脑上部署一套3节点K8s 作为自己平时的学习测试环境。 本来想看一下有没有比较便捷的部署方式如&#xff1a; rancherdesktop: https://docs.rancherdesktop.io/zh/next/getting-started/installation/ sealos: https://www.sealos.io/docs/getting-started…

【超算/先进计算学习】日报3

目录 今日已完成任务列表遇到的问题及解决方案任务完成详细笔记作业管理系统 slurm作业管理系统及常用用户命令节点状态查询/作业提交命令作业队列查询/作业取消命令任务练习 调试器 GDB实时调试core 文件调试 对自己的表现是否满意简述下次计划其他反馈 今日已完成任务列表 4-…

Spring的体系结构

Spring的体系结构 一、Spring简介1. Spring介绍1.1 为什么要学1.2 学什么1.3 怎么学 2. 初识Spring2.1 Spring家族2.2 Spring发展史 3. Spring体系结构3.1 Spring Framework系统架构图3.2 Spring Framework课程学习路线 4. Spring核心概念4.1 目前我们代码存在的问题4.2 核心概…

『Linux从入门到精通』第 ⑫ 期 -深入了解冯诺依曼体系结构与操作系统(Operator System)

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;计算机之父——冯诺依曼&#x1f337;冯诺依曼体系结构&#x1f33a;木桶效应 &#x1f337;操作系统(Operator System)&#x1f33a;如何理解操作系统&#x1f33a;系统调用和库函数概念 &#x1f490;专栏导…

论文结构商讨

论文查重 pass软件 提出问题 1、由于选取的算法太多了&#xff0c;不知道是简单介绍&#xff0c;还是深入介绍 希望找到一个具体的模板 2、数据库要是用一个就在前面介绍&#xff0c;用不一样的就在每章里面分别介绍 4、数据集介绍放在那个具体位置&#xff1f; 如果可以画出…

蓝精灵事件来袭: 深受喜爱的蓝色角色来 Web3 啦!

起源于漫画并成为国际知名的卡通和电影明星的蓝色x小家伙正在进入 NFT 舞台。 作者&#xff1a;Coindesk——Toby Bochan 因漫画、卡通片和电影而闻名的热门动画系列“蓝精灵”正在展开新的冒险&#xff0c;由蓝精灵协会推出一系列新的非同质化通证&#xff08;NFT&#xff09;…

汽车ECU的内部构成与功能模块

摘要&#xff1a; ECU作为与外部通信的接口&#xff0c;为了通过微控制器运算实现符合实际状态的最佳控制&#xff0c;需要检测外部状态的输入手段及实际控制驱动的输出手段。 1. 常规功能模块 ① 电源&#xff1a;向ECU内的各模块提供稳定的电压&#xff08;5V、3V等&#xf…

sequelize + Nodejs + MySQL 的简单用法

How to Use Sequelize ORM in NodeJS - Tutorial 1 Sequlize 简介 Sequelize 是最流行的可以与 Nodejs 一起使用的一种关系数据库 ORM (Object-relational mapping 对象关系映射)&#xff0c;Mongoose 是 MongoDB 的 ORM. Sequelize 的作用&#xff0c;简单地说&#xff0c;就…

Netty编解码器,Netty自定义编解码器解决粘包拆包问题,Netty编解码器的执行过程详解

文章目录 一、编解码器概述1、编解码器概述2、编码器类关系图3、解码器类关系图 二、以编解码器为例理解入站出站1、Server端2、Client端3、编解码器3、执行查看结果4、注意事项 三、Netty其他内置编解码器1、ReplayingDecoder2、其他编码器3、内置编解码器处理粘包拆包问题 四…

[LeetCode复盘] LCCUP‘23春季赛 20230422

[LeetCode复盘] LCCUP23春季赛 20230422 一、总结二、 1. 补给马车1. 题目描述2. 思路分析3. 代码实现 三、2. 探险营地1. 题目描述2. 思路分析3. 代码实现 四、 3. 最强祝福力场1. 题目描述2. 思路分析3. 代码实现 五、 4. 传送卷轴1. 题目描述2. 思路分析3. 代码实现 六、 5…

REDIS03_AOF概述、工作流程、写回策略、正常异常流程、重写机制、配置文件详解

文章目录 ①. AOF - 概述作用②. AOF - 工作流程③. 缓冲区 - 写回策略④. 配置文件说明(6 VS 7)⑤. 正常、异常恢复⑥. AOF - 优劣势⑦. AOF - 重写机制⑧. AOF优化配置项详解⑨. RBD和AOF共存模式 ①. AOF - 概述作用 ①. 官网介绍 ②. 以日志的形式来记录每个写操作,将Red…

解决RabbitMQ的The channelMax limit is reached. Try later.

The channelMax limit is reached. Try later.顾名思义就是channel达到数量限制 查看源码得出 大概意思就是&#xff1a; 默认最大通道数&#xff1b;2047&#xff0c;因为它在服务器端是第2048个&#xff0c;每个连接用于协商和错误通信。 也可以在rabbitmq的管控台看出 总结…

单页面与路由

目录 &#xff08;一&#xff09;什么是SPA应用&#xff1f; &#xff08;二&#xff09;路由 &#xff08;1&#xff09;什么是路由&#xff1f; &#xff08;2&#xff09;路由的分类 &#xff08;3&#xff09;路由的安装和使用 &#xff08;三&#xff09;、路由的使…