Mysql--架构篇--体系结构(连接层,SQL层,存储引擎层,文件存储层)
MySQL是一种广泛使用的关系型数据库管理系统(RDBMS),其体系结构设计旨在提供高效的数据存储、查询处理和事务管理。MySQL的体系结构可以分为多个层次,每个层次负责不同的功能模块。
MySQL的体系结构主要由以下几个部分组成:(自上而下)
- 连接层
- SQL层
- 存储引擎层
- 文件系统层
体系结构示例:

1、连接层
连接层是MySQL服务器与客户端之间的桥梁,负责处理客户端的连接请求、身份验证、权限检查以及连接池管理等。
客户端连接器(Client Connectors):
提供与MySQL服务器建立连接的支持。目前几乎支持所有主流的服务器编程技术,例如常见的Java、C、Python、.NET等,它们通过各自的API技术与MySQL建立连接。
2、SQL层(或服务层)
SQL层是MySQL的核心部分,也称服务层(MySQL Server)。负责解析SQL查询、优化查询、执行查询操作并将结果返回给客户端。
SQL层的主要组件包括:
(1)、连接池(Connection Pool):MySQL提供了内置的连接池功能(从8.0版本开始),用于管理多个客户端连接。连接池可以减少频繁创建和销毁连接的开销,提升系统的并发处理能力。
(2)、系统管理和控制工具(Management Services & Utilities):用于备份恢复、安全管理、集群 管理等 。
(3)、SQL接口(SQL Interface):用于接收客户端发送的各种SQL命令,并且返回用户需要查询的结果。比如DML、DDL、存储过程、视图、触发器等。
(4)、解析器(Parser):解析器负责将SQL语句转换为内部的语法树结构。它会检查语法是否正确,并生成相应的执行计划。
(5)、查询优化器(Query Optimizer):查询优化器是SQL层的核心组件之一,负责选择最优的查询执行计划。优化器会根据表的统计信息(如索引、表大小、数据分布等)评估不同的执行路径,并选择最高效的方案。优化器的目标是减少I/O操作、降低CPU使用率,从而提高查询性能。
(6)、执行器(Executor):执行器根据优化器生成的执行计划,调用存储引擎层的接口来实际执行查询操作。执行器负责处理各种SQL操作,如SELECT、INSERT、UPDATE、DELETE等。
(7)、缓存(Cache&Buffer):缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,权限缓存,引擎缓存,索引缓存等。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据,用于加速数据读取操作。注意:MySQL曾经提供了一个查询缓存功能(在8.0版本中已被移除),用于缓存查询结果。如果相同的查询再次执行,MySQL可以直接从缓存中返回结果,而不需要重新执行查询。虽然查询缓存可以提高某些场景下的性能,但在高并发写入的情况下,它的效果可能适得其反,因此在现代版本中已被移除。
3、存储引擎层(Pluggable Storage Engines)
存储引擎层是MySQL的关键组成部分,负责实际数据的存储与提取,与底层系统文件进行交互。MySQL支持多种存储引擎,每种存储引擎都有其独特的特性和适用场景。现在有很多种存储引擎,各有各的特点,最常见的是MyISAM和InnoDB。
常见的存储引擎包括:
(1)、InnoDB:默认存储引擎,支持事务、外键约束、行级锁和崩溃恢复。InnoDB是大多数生产环境的首选,特别适用于需要高并发写入和事务安全的场景。
(2)、MyISAM:早期MySQL的默认存储引擎,不支持事务和行级锁,但具有较高的读取性能。MyISAM适合只读或读多写少的场景,但由于其缺乏事务支持,现在已较少使用。
(3)、Memory:将数据存储在内存中,适用于临时表或需要快速读写的场景。由于数据存储在内存中,重启后数据会丢失,因此不适合持久化存储。
(4)、NDB Cluster:用于分布式集群的存储引擎,支持高可用性和水平扩展。NDB Cluster通过分片技术将数据分布在多个节点上,适合需要处理大规模数据集和高并发访问的场景。
(5)、Archive:专门用于归档数据的存储引擎,适合存储大量历史数据。Archive引擎压缩数据,节省存储空间,但写入性能较低,适合只写或很少读取的场景。
(6)、CSV:将数据存储为CSV文件格式,适合与外部应用程序进行数据交换。CSV引擎不支持索引和复杂的查询操作,主要用于数据导入和导出。
4、文件存储层
该层负责将数据库的数据和日志存储在文件磁盘上,并完成与存储引擎的交互,是文件的物理存储层。主要包含日志文件,数据文件,配置文件,pid文件,socket文件等。
不同存储引擎对文件系统的使用方式有所不同:
(1)、InnoDB
InnoDB使用独立的表空间文件(.ibd)来存储每个表的数据和索引。此外,InnoDB 还维护一个共享表空间文件(ibdata1),用于存储系统表、回滚段、双写缓冲区等元数据。InnoDB还有独立的重做日志文件(redo log)和撤销日志文件(undo log),用于实现事务的持久性和崩溃恢复。

(2)、MyISAM
MyISAM使用三个文件来存储每个表的数据:
- .frm文件:存储表的元数据(如表结构、字段定义等)。
- .MYD文件:存储表的数据。
- .MYI文件:存储表的索引。
其他相关文件说明:
db.opt文件:记录这个库的默认使用的字符集和校验规则。
ibdata1文件:系统表空间数据文件,存储表元数据、Undo日志等 。
ib_logfile0、ib_logfile1 文件:Redo log日志文件。
pid文件:pid文件是mysqld应用程序在Unix/Linux环境下的一个进程文件,和许多其他 Unix/Linux服务端程序一样,它存放着自己的进程id。
socket文件:socket文件也是在Unix/Linux环境下才有的,用户在Unix/Linux环境下客户端连接可以不通过TCP/IP网络而直接使用Unix Socket来连接MySQL。
乘风破浪会有时,直挂云帆济沧海!!!
相关文章:
Mysql--架构篇--体系结构(连接层,SQL层,存储引擎层,文件存储层)
MySQL是一种广泛使用的关系型数据库管理系统(RDBMS),其体系结构设计旨在提供高效的数据存储、查询处理和事务管理。MySQL的体系结构可以分为多个层次,每个层次负责不同的功能模块。 MySQL的体系结构主要由以下几个部分组成&#…...
【0x005B】HCI_Write_Default_Erroneous_Data_Reporting命令详解
目录 一、命令概述 二、命令格式及参数 2.1. HCI_Write_Default_Erroneous_Data_Reporting命令格式 2.2. Erroneous_Data_Reporting 三、生成事件及参数 3.1. HCI_Command_Complete事件 3.2. 状态码(Status) 四、命令执行流程 4.1. 命令发起阶段(主机端) 4.2. 命…...
基于 Python 的学生成绩管理系统设计与实现
标题:基于 Python 的学生成绩管理系统设计与实现 内容:1.摘要 摘要:本文介绍了一个基于 Python 的学生成绩管理系统的设计与实现。该系统旨在提高学生成绩管理的效率和准确性,方便教师和学生进行成绩查询和分析。本文详细描述了系统的设计思路、功能模块…...
【Apache Doris】周FAQ集锦:第 29 期
引言 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和开发者分享有关 Apache Doris 的常见问题。 通过这个每周 FAQ 栏目,希望帮助社…...
【C】初阶数据结构3 -- 单链表
之前在顺序表那一篇文章中,提到顺序表具有的缺点,比如头插,头删时间复杂度为O(n),realloc增容有消耗等。而在链表中,这些问题将得到解决。所以在这一篇文章里,我们将会讲解链表的定义与性质,以及…...
Autodl安装tensorflow2.10.0记录
首先租用新实例(我选的是3080*2卡),由于基础镜像中没有2.10.0版本,选miniconda3的基础环境 创建虚拟环境:conda create --name xxx python3.8(环境名)激活虚拟环境:conda activate x…...
【Rust】常见集合
目录 思维导图 一、Rust常用集合 1. Rust标准库中的集合概述 2. 常用集合类型 2.1 向量(Vector) 2.2 字符串(String) 2.3 哈希映射(Hash Map) 二、向量(Vec) 1. 向量的概述…...
SpiderFlow平台v0.5.0之引入selenium插件
引入selenium插件 首先到码云下载插件点击下载编辑到本地并导入到工作空间或安装到maven库在spider-flow/spider-flow-web/pom.xml中引入插件 <!-- 引入selenium插件 --> <dependency><groupId>org.spiderflow</groupId><artifactId>spider-…...
git push命令
git push 常用命令 1. 拉取远程仓库最新数据 使用 git fetch git fetch作用: 获取远程仓库的最新数据(包括分支、标签等),但不会修改本地工作目录。 结果: 仅更新远程分支(如 origin/main)的…...
洛谷P1161
开灯 - 洛谷 代码区: #include<stdio.h> int ans[2000005]{1}; //1为关 int main(){int n;scanf("%d",&n);double arry[n][2];//此处最好用双精度浮点数,单精度浮点数的精确度够高对于此题来说,第一次没全对就是因为精度…...
Python脚本自动发送电子邮件
要编写一个Python脚本来自动发送电子邮件,你可以使用smtplib库来处理SMTP协议,以及email库来构建邮件内容。 安装必要的库 通常情况下,smtplib和email库是Python标准库的一部分,因此不需要额外安装。如果你使用的是较旧的Python版…...
vscode的安装与使用
下载 地址:https://code.visualstudio.com/ 安装 修改安装路径(不要有中文) 点击下一步,创建桌面快捷方式,等待安装 安装中文插件 可以根据自己的需要安装python和Jupyter插件...
sparkRDD教程之必会的题目
1.前期准备 (1)看看上一期的博客,最好跟着上一期的博客把sparkRDD的基本命令给熟练掌握后,再来做这篇文章的任务。 上一期的博客:sparkRDD教程之基本命令-CSDN博客 (2)新建文件task6.scala …...
Unity 2d描边基于SpriteRender,高性能的描边解决方案
目标 以Unity默认渲染管线为例,打造不需要图片内边距,描边平滑,高性能的描边解决方案 前言 在2d游戏中经常需要给2d对象添加描边,来突出强调2d对象 当你去网上查找2d描边shader,移植到项目里面,大概率会…...
信凯科技业绩波动明显:毛利率远弱行业,资产负债率偏高
《港湾商业观察》施子夫 1月8日,深交所官网显示,浙江信凯科技集团股份有限公司(以下简称“信凯科技”)主板IPO提交注册。 自2022年递交上市申请,信凯科技的IPO之路已走过两年光景,尽管提交注册࿰…...
js基础---var与let的区别以及const的使用
js基础—var与let的区别以及const的使用 var与let的区别 在较旧的JavaScript,使用关键字var来声明变量,而不是let。var现在开发中一般不再使用它,只是我们可能再老版程序中看到它。let的出现为了解决var的一些问题。 var 声明存在以下三种问…...
用css和html制作太极图
目录 css相关参数介绍 边距 边框 伪元素选择器 太极图案例实现、 代码 效果 css相关参数介绍 边距 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}div{width: …...
OJ12:160. 相交链表
目录 题目思路分析代码展示 题目 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 示例 1: 输入:intersectVal 8, listA [4,1,8,4,5], listB [5,…...
软件工程和项目管理领域 - CMMI 极简理解
CMMI 概述 CMMI 全称为 Capability Maturity Model Integration,即能力成熟度模型集成 CMMI 是由美国卡内基梅隆大学软件工程研究所(SEI)开发的一套综合性管理模型 CMMI 是一种用于评估和改进组织在软件开发和维护方面过程能力的国际标准 …...
C# 线程基础之 线程同步
线程同步的手段很多 lock 是通过内存索引块 0 1 切换 进行互斥的实现 互斥量 信号量 事件消息 其实意思就是 一个 标记量 通过这个标记 来进行类似的互斥手段 具体方式的分析 代码在后 1.互斥量 Mutex 作用 非常类似lock 一个Mutex 名称来代替 lock的引用对象 2.信号量 Semaph…...
如何永久保存微信聊天记录:WeChatMsg本地化数据管理完全指南
如何永久保存微信聊天记录:WeChatMsg本地化数据管理完全指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...
热传导方程在工程仿真中就像老朋友的聚会——大家总得找个方式坐下来聊聊温度怎么传。今天咱们用MATLAB折腾几个一维和二维的导热算例,顺便聊聊不同计算格式的脾气
【MATLAB各种计算格式的一维/二维导热算例】 1. 一维下的全显格式,全隐格式,半隐格式的导热算例 2.二维下的全显格式,全隐格式,隐式格式ADI迭代,隐式格式点迭代,隐式格式高斯-赛德点迭代(GS&…...
探索p5.js Web Editor:重构创意编程体验的开发平台
探索p5.js Web Editor:重构创意编程体验的开发平台 【免费下载链接】p5.js-web-editor The p5.js Editor is a website for creating p5.js sketches, with a focus on making coding accessible and inclusive for artists, designers, educators, beginners, and …...
AA-PEG-Lipoic acid,硫辛酸PEG乙酸,显著提升稳定性和生物相容性
一.名称英文名称:AA-PEG-LA,AA-PEG-Lipoic acid,Acetic Acid-PEG-LA,Acetic Acid-PEG-Lipoic acid,LA-PEG-AA,Lipoic acid-PEG-AA中文名称:硫辛酸聚乙二醇乙酸,硫辛酸PEG乙酸分子量&…...
Agno 多 Agent 实战(二):搭建完整内容创作流水线
前情回顾 上一篇我们用路由模式做了一个智能问答系统,路由模式适合单步任务,一次分配。今天分享的是更复杂的场景:多步骤协作。 很多任务不是一步能做完的,比如写一篇文章:得先找资料,再写初稿,再审核修改,最后排版。这就需要多个 Agent 一步步协作,我们可以用协调模…...
好写作AI:本科毕业论文的“通关秘籍制造机”
对于众多本科生而言,撰写毕业论文就像是一场艰难的“冒险之旅”,从选题时的迷茫,到内容创作的绞尽脑汁,再到格式调整的繁琐,每一步都充满挑战。不过别担心,好写作AI(官网:https://ww…...
基于粒子群算法(PSO)的宽带消色差超透镜Matlab核心程序探秘
基于粒子群算法PSO宽带消色差超透镜matlab核心程序有注释便于理解代码的含义,包含FDTD仿真,文章复现案例讲解,适合学习几何相位和传输相位,消色差效果很好可以对代码进行优化在光学领域,宽带消色差超透镜是一个热门的研…...
挖掘机伸缩臂的原理
挖掘机伸缩臂是装载于挖掘机上的一种特殊工作装置,旨在灵活扩展挖掘机的作业半径、挖掘深度。它集挖掘机、起重机、抓木器等多种工程机械结构的优点于一体,结构紧凑且重量轻,操作简便,作业效率高。挖掘机伸缩臂的工作原理主要依赖…...
015、部署准备:Docker容器化与生产环境配置管理
015、部署准备:Docker容器化与生产环境配置管理 从一次凌晨三点的事故说起 上个月团队里有个服务在生产环境突然挂掉,日志里就一行“ConfigError: Missing ‘DATABASE_URL’”。排查半天才发现,运维同事更新容器镜像时漏了个环境变量。这种问题在虚拟机时代可能只是重启修复…...
STM8 Bootloader设计与CAN总线固件升级实践
1. 项目概述在嵌入式产品开发中,经常会遇到设备出厂后需要远程升级固件的需求。特别是当设备已经封装完成,无法通过常规编程接口(如SWIM、JTAG)进行烧录时,Bootloader技术就成为了解决问题的关键方案。这次出差经历让我…...
