当前位置: 首页 > news >正文

对 MYSQL 架构的了解

MySQL 是一种广泛使用的关系型数据库管理系统,其架构主要包括以下几个关键部分:

一、连接层

客户端连接管理:MySQL 服务器可以同时处理多个客户端的连接请求。当客户端应用程序(如使用 Java、Python 等语言编写的程序)尝试连接到 MySQL 服务器时,连接层负责建立连接。它会验证客户端提供的用户名、密码等认证信息,只有认证通过的客户端才能成功建立连接。例如,一个 Web 应用服务器要访问 MySQL 数据库存储用户信息,就需要先在连接层进行身份验证。

通信协议处理:MySQL 使用自己的通信协议来在客户端和服务器之间传递数据和命令。连接层负责解析客户端发送的 SQL 语句请求,并将服务器的响应结果按照协议格式返回给客户端。

二、服务层(SQL 层)

查询解析器(Parser)

词法分析:当客户端发送 SQL 语句后,查询解析器首先会对 SQL 语句进行词法分析。它会将 SQL 语句分解为一个个的单词(Token),比如 SELECT、FROM、WHERE 等关键字,以及表名、列名、数值等标识符。例如,对于语句 “SELECT * FROM users WHERE age> 18”,会分解出 “SELECT”“*”“FROM”“users”“WHERE”“age”“>”“18” 这些单词。

语法分析:在词法分析的基础上,语法分析器会根据 MySQL 的语法规则来检查 SQL 语句的语法结构是否正确。如果 SQL 语句不符合语法规则,就会返回语法错误信息给客户端。例如,语句 “SELECT * FORM users”(错误地拼写了 FROM)就会被语法分析器检测出错误。

查询优化器(Optimizer)

成本估算:优化器会对解析后的 SQL 查询计划进行评估。它会考虑多种因素来估算不同执行计划的成本,如索引的使用情况、表的连接方式(如内连接、外连接)、数据量大小等。例如,对于一个涉及多表连接的查询,优化器会分析是先连接哪两个表成本更低。

生成最优执行计划:基于成本估算,优化器会选择一个它认为是最优的执行计划来执行 SQL 查询。这个执行计划可能包括决定使用哪些索引、以何种顺序访问表等。例如,在一个有索引的表上进行查询时,优化器会判断是否使用索引来提高查询速度。

查询执行器(Executor)

根据优化器生成的执行计划,查询执行器负责实际执行 SQL 查询操作。它会与存储引擎进行交互,读取或写入数据。例如,执行一个 SELECT 语句时,执行器会从存储引擎中获取符合条件的数据行,然后将这些数据返回给服务层进行后续处理。

事务管理:MySQL 支持事务处理,执行器在处理事务相关的 SQL 语句(如 BEGIN、COMMIT、ROLLBACK 等)时,会负责协调事务的开始、提交和回滚操作。它确保事务的原子性、一致性、隔离性和持久性(ACID)特性。例如,在一个银行转账事务中,如果转账操作失败,执行器会根据事务的回滚机制,将数据恢复到转账之前的状态。

三、存储引擎层

存储引擎概述:MySQL 支持多种存储引擎,如 InnoDB、MyISAM、Memory 等。不同的存储引擎有不同的特点,适用于不同的应用场景。存储引擎负责数据的存储和读取操作。

InnoDB 存储引擎(常用)

存储结构:InnoDB 采用聚簇索引(Clustered Index)来存储数据。聚簇索引的叶子节点存储了实际的数据行,而非聚簇索引的叶子节点存储的是指向聚簇索引的指针。例如,在一个以主键为聚簇索引的表中,数据行按照主键值的顺序存储在磁盘上。

事务支持:InnoDB 是支持事务的存储引擎,通过事务日志(Redo Log 和 Undo Log)来保证事务的 ACID 特性。Redo Log 用于在系统崩溃后恢复已经提交的事务修改,Undo Log 用于回滚未完成的事务。

行级锁:InnoDB 支持行级锁,这使得在多用户并发访问数据库时,可以更精细地控制并发操作。例如,当多个用户同时对同一张表中的不同行进行更新操作时,行级锁可以减少锁冲突,提高并发性能。

MyISAM 存储引擎

存储结构:MyISAM 存储引擎的数据文件和索引文件是分开存储的。数据文件存储实际的数据行,索引文件存储索引信息。这种存储方式使得在某些情况下,索引的维护和数据的读写操作相对简单。

性能特点:MyISAM 在查询操作频繁、对事务支持要求不高的场景下有较好的性能。但是它不支持事务,也不支持行级锁,只支持表级锁。例如,在一个以读为主的数据库应用中,如果不需要事务处理,MyISAM 可能是一个选择。

四、缓存层

查询缓存(早期版本有,较新版本已逐渐废弃):在早期的 MySQL 版本中,查询缓存用于存储查询结果。当一个新的查询到来时,服务器会先检查查询缓存中是否已经存在相同的查询结果。如果存在,就直接从缓存中返回结果,而不需要再次执行查询。但是,由于缓存失效机制复杂,在高并发和频繁更新数据的场景下,查询缓存可能会带来性能问题,所以在较新版本中逐渐被弱化。

缓冲池(Buffer Pool):InnoDB 存储引擎等有缓冲池机制。缓冲池是一块内存区域,用于缓存从磁盘读取的数据页和索引页。当查询需要读取数据时,如果数据已经在缓冲池中,就可以直接从内存中获取,大大提高了查询速度。缓冲池会根据一定的算法(如 LRU,最近最少使用算法)来管理内存中的数据页,将经常访问的数据页保留在缓冲池中,将不经常访问的数据页淘汰出缓冲池。

相关文章:

对 MYSQL 架构的了解

MySQL 是一种广泛使用的关系型数据库管理系统,其架构主要包括以下几个关键部分: 一、连接层 客户端连接管理:MySQL 服务器可以同时处理多个客户端的连接请求。当客户端应用程序(如使用 Java、Python 等语言编写的程序)…...

深入解析 StarRocks 物化视图:全方位的查询改写机制

小编导读: 本文将重点介绍如何利用物化视图进行查询改写。文章将全面介绍物化视图的基本原理、关键特性、应用案例、使用场景、代码细节以及主流大数据产品的物化视图改写能力对比。 物化视图在 StarRocks 中扮演着至关重要的角色,它是进行数据建模和加速…...

k8s常见问题及debug

ERROR1 ErrImagePull pod pending 外网无法方位集群服务 kubectl 命令失败 Pod Error 进入容器失败 pod重启 Running not ready CrashLoopBackOff PV/PVC helm install...

Winnows基础(2)

Target 了解常见端口及服务,熟练cmd命令,编写简单的 .bat 病毒程序。 Trail 常见服务及端口 80 web 80-89 可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 mssql 1521 oracle 2082/2083 cpanel主机管理系统登陆(国外用的…...

(14)D-FINE网络,爆锤yolo系列

yolo过时了?传统的yolo算法在小目标检测方面总是不行,最新算法DEIM爆锤yolo,已经替yolo解决。 一、创新点 ​ 这个算法名为DEIM,全称是DETR with Improved Matching for Fast Convergence,其主要创新点在于提出了一…...

关于数据流图绘制和使用上的一些个人经验

假设我们需要开发一个项目进度管理系统,在这个项目进度管理系统之中,我们需要开发一个功能:项目成员的列表。我们具有这样的业务需求: 在项目进度管理系统中,我们需要知道参与项目的人员到底有哪些,并且项目…...

Leetcode Hot 100 【二叉树】104. 二叉树的最大深度

104. 二叉树的最大深度 已解答 简单 相关标签 相关企业 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3…...

雅思真题短语梳理(八)

126员工流动率高 high staff turnover 127(多)负担一些工作任务 cover some duties / an increased workload 128不满 feel upset and resentful 129偏向性待遇 preferential treatment 130介入帮忙 step in and help 131切实的好处 tangible benefits 132挽留 staff retention…...

Codeforces Round 993 (Div. 4)个人训练记录

Codeforces Round 993 (Div. 4) 只选择对我有价值的题目记录 E. Insane Problem 题目描述 给定五个整数 k k k, l 1 l_1 l1​, r 1 r_1 r1​, l 2 l_2 l2​ 和 r 2 r_2 r2​,Wave 希望你帮助她计算满足以下所有条件的有序对 …...

java-io流

根据流的方向: 输入流(InputStream/Reader):从数据源读取数据到程序中。输出流(OutputStream/Writer):将数据从程序写入到目的地。 根据流处理信息的大小: 字节流(Byte S…...

数据可视化

数据可视化 数据可视化 数据可视化主要目的:借助于图形化手段,清晰有效地传达与沟通信息。数据可视化可以把冰冷的数字转换成图形,揭示蕴含在数据中的规律和道理。 常用的数据可视化库: D3.js 目前 Web 端评价最高的 Javascri…...

CompletableFuture使用详解

一、 CompletableFuture介绍 平时多线程开发一般就是使用Runnable,Callable,Thread,FutureTask,ThreadPoolExecutor这些内容和并发编程息息相关。相对来对来说成本都不高,多多使用是可以熟悉这些内容。这些内容组合在…...

【长期有效】短链接生成-短链接-短网址-短链接生成接口-短链接转换接口-短网址URL生成-短链接-短网址-短域名-短链接

短链接API接口的作用主要体现在以下几个方面: 一、链接缩短与分享优化 短链接API接口的主要功能是将长链接转换为短链接。这种转换使得链接更加简洁、易读和易分享,尤其在社交媒体、电子邮件、短信等字符受限或按字符计费的场合中,短链接能…...

使用Idea自带的git功能进行分支合并

文章目录 1.背景描述2.分支切换3.分支合并的具体操作4.将在local环境下,从dev合并到qas分支上的代码,推送到远端 1.背景描述 目前在开发的当前项目有四个分支,master(主分支)、pre(预生产分支)、qas(测试分支)、dev(开发分支); …...

工业摄像机基于电荷耦合器件的相机

工业摄像机系列产品及其识别技术的详细介绍: 一、工业摄像机概述 工业摄像机是利用光学成像技术获取视觉信息,并通过图像处理算法分析这些信息的设备。它通常具有高图像稳定性、高传输能力和高抗干扰能力等特性,适用于各种复杂的工业环境。 …...

【期末大作业】使用Python熟练掌握面向对象

引言 在编程学习过程中,构建项目是一个非常有效的方式,不仅能巩固和应用所学的知识,还能通过实践来解决实际问题。本文将通过几个经典的项目示例来展示如何用面向对象的方式设计和实现一个完整的系统,包括学生成绩管理系统、图书…...

JAVA:代理模式(Proxy Pattern)的技术指南

1、简述 代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理,以控制对这个对象的访问。通过代理模式,我们可以在不修改目标对象代码的情况下扩展功能,满足特定的需求。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什…...

【MAC】深入浅出 Homebrew 下 Nginx 的安装与配置指南

硬件:Apple M4 Pro 16寸 系统: macos Sonoma 15.1.1 Nginx 是一款高性能的 Web 服务器和反向代理服务器,广泛应用于全球各地的网站和企业应用中。本文将详细介绍如何在 macOS 环境下使用 Homebrew 安装、启动、管理以及优化配置 Nginx&#x…...

【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】

【华为OD-E卷-寻找关键钥匙 100分(python、java、c、js、c)】 题目 小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子,并给出箱子编号,箱子编…...

SQL MID()

SQL中的MID()函数是一个用于从指定位置开始截取字符串中指定长度的子串的函数。这个函数在数据库查询和数据处理中经常被使用,特别是在需要从较长的文本字段中提取特定信息时。 MID()函数的基本语法是:SELECT MID(column_name, start, length) FROM tab…...

Sui 基金会任命 Christian Thompson 为新任负责人

Sui 基金会是专注于推动 Sui 蓬勃发展的生态增长与采用的机构。近日,基金会宣布任命 Christian Thompson 为新任负责人。在 Sui 主网发布的开创性一年里,Sui 凭借其无与伦比的速度、可扩展性和效率,迅速崛起为领先的 Layer 1 区块链之一&…...

ViEW生命周期

Vue的生命周期是指Vue实例从创建到销毁的整个过程,包括多个阶段和对应的钩子函数。以下是Vue生命周期的详细说明: 1. **创建阶段**: - beforeCreate:在实例初始化之前调用,此时数据观测和事件配置尚未完成,…...

[蓝桥杯 2019 国 B] 排列数

目录 前言 题解 思路 疑问 解答 前言 对于本篇文章是站在别人的基础之上来写的,对于这道题作为2019年国赛B组的最难的一题,他的难度肯定是不小的,这道题我再一开始接触的时候连思路都没有,也是看了两三遍别人发的题解&#x…...

python 中执行from elasticsearch import Elasticsearch,AsyncElasticsearch 报错

在 Python 中执行 from elasticsearch import Elasticsearch, AsyncElasticsearch 时,如果提示 AsyncElasticsearch 不存在,可能是因为以下几个原因: 1. 安装的 elasticsearch 库版本不匹配 AsyncElasticsearch 是在 elasticsearch 库的较新版本中引入的。如果你安装的版本…...

git 删除鉴权缓存及账号信息

在Windows系统下 清除凭证管理器中的Git凭据 按下Win R键,打开“运行”对话框,输入control,然后回车,打开控制面板。在控制面板中找到“用户账户”,然后点击“凭据管理器”。在凭据管理器中,找到“Windows…...

浏览器要求用户确认 Cookies Privacy(隐私相关内容)是基于隐私法规的要求,VUE 实现,html 代码

Cookie Notices and Cookie Consent | Cookiepedia 1. 法律法规要求 许多国家和地区的隐私法律要求网站在存储或处理用户数据(包括 Cookies)之前必须获得用户的明确同意: GDPR(欧盟通用数据保护条例) 要求&#xff…...

数据结构:栈和队列的实现

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO ( Last In First Out )的原则。 压栈:栈…...

2024.12.21辩论赛感受

背景 今天辩论赛的双方论点是: 正方:寒假留在研发中心的收获大 反方:寒假去做其他事情的收获 辩论赛,为了锻炼自己,选择了不想选择以及相对不好辩论的反方。出现的状况有一下几点: 1.发现自己脑子完全跟不…...

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…...

圣诞快乐(h5 css js(圣诞树))

一,整体设计思路 圣诞树h5(简易) 1.页面布局与样式: 页面使用了全屏的黑色背景,中央显示圣诞树,树形由三层绿色的三角形组成,每一层的大小逐渐变小。树干是一个棕色的矩形,位于三角…...

移植 OLLVM 到 LLVM18,修复控制流平坦化报错

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 前言 把 OLLVM 移植到 LLVM18 后,发现 -fla(控制流平坦化)并不能正常使用。 关于移植过程可以参考这篇文章 【移植 OLLVM…...

MFC/C++学习系列之简单记录——序列化机制

MFC/C学习系列之简单记录——序列化机制 前言简述六大机制序列化机制使用反序列化总结 前言 MFC有六大机制,分别是程序启动机制、窗口创建机制、动态创建机制、运行时类信息机制、消息映射机制、序列化机制。 简述六大机制 程序启动机制:全局的应用程序…...

【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析

文章目录 1. 计算机网络有哪些分类2. 计算机网络中协议与标准的区别3. 计算机网络拓扑有哪些结构4. 常用的网络设备有哪些,分属于OSI的哪一层5. IEEE802局域网标准有哪些 【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析 1. 计算机网络有哪些分类 计算…...

Python中的上下文管理器:从资源管理到自定义实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Python中的上下文管理器(Context Manager)为资源管理提供了强大的支持,尤其在处理文件、网络连接、数据库连接等需要精确控制生命周期的…...

STM32 高级 物联网通信之CAN通讯

目录 CAN通讯介绍 物理层 协议层 CAN的帧(报文)种类 1 数据帧(发送单元->接受单元) 2 远程帧(接受单元->发送单元) 3 错误帧(发送方发送数据错误会发送的状态帧) 4 过载帧(接收方放不下会发送到的状态帧) 5 帧间隔(状态) 数据帧介绍 远程帧介绍 C…...

如何求解小于等于x的正整数因子y的个数总和

G ( X , Y ) X 的因子 Y 个数 G(X,Y) X的因子Y个数 G(X,Y)X的因子Y个数 例如 G ( 8 , 2 ) 3 G(8,2)3 G(8,2)3 G ( 12 , 2 ) 2 G(12,2)2 G(12,2)2 F ( X , Y ) ∑ i 1 X G ( i ) F(X, Y) \sum_{i1}^{X} G(i) F(X,Y)i1∑X​G(i) 直接上结论 F ( X , Y ) X Y 1 ⋯ X…...

Epic游戏使用mod

以土豆兄弟为例: 第一步:获取 SteamCMD 下载官方 Steam 控制台客户端 (steamCMD) 1. 下载好后打开,是一个在 cmd 窗口的运行的命令行 2. 输入以下代码登录 login anonymous 第二步: 确认自己要下载的游戏 ID 和 mod ID 然后…...

前端:纯前端快速实现html导出word和pdf

实现html导出word,需要使用两个库。 html-docx-js和file-saver 导出word的js方法 > npm install html-docx-js >npm install file-saver js引入 import FileSaver from “file-saver”; import htmlDocx from “html-docx-js/dist/html-docx”; /**导出…...

Windows装Docker至D盘/其他盘(最新,最准确,直接装)

前言 Docker的默认安装路径为 C:\你的用户名\AppData\Local\Docker\wsl这样安装常常会导致C盘爆满。目前现有博客的安装方法往往不能把docker的container和image也装在非C盘。本博客旨在用最简单的方式,把Docker Deskstop的images和container装在D盘中。 安装前&a…...

2024 年 IA 技术大爆发深度解析

摘要: 本文旨在深入剖析 2024 年 IA 技术大爆发所引发的多方面反响。通过对产业变革、经济影响、就业市场、社会影响、政策与监管以及未来展望等维度的探讨,揭示 IA 技术在这一关键时期对全球各个层面带来的深刻变革与挑战,并提出相应的思考与…...

现代 CSS 布局与响应式设计实战指南

作为一名前端开发者,我经常被问到:"为什么你的页面布局这么流畅?响应式适配这么完美?"今天,我就来分享一下在实际项目中常用的 CSS 布局技巧和响应式设计方案。 现代布局三剑客:Flex、Grid 和 C…...

react 项目打包二级目 使用BrowserRouter 解决页面刷新404 找不到路由

使用BrowserRouter package 配置 &#xff08;这部分代码可以不做配置也能实现&#xff09; {"homepage": "/admin",}vite.config 配置 export default defineConfig({base: /admin])BrowserRouter 添加配置项 <BrowserRouter basename/admin>&l…...

Yolo11改进策略:Block改进|使用FastVit的RepMixerBlock改进Yolo11,重参数重构助力Yolo11涨点(全网首发)

文章目录 摘要FastViT:一种使用结构重新参数化的快速混合视觉变换器1、简介2、相关工作3、体系结构3.1、概述3.2、FastViT3.2.1、重新参数化跳过连接3.2.2、线性训练时间过参数化3.2.3、大核卷积4、实验4.1、图像分类4.2、鲁棒性评价4.3、3D Hand网格估计4.4、语义分割和目标检…...

2.6 网络面试问题

tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程&#xff0c;服务端开放一个IP端口&#xff0c;收到连接后&#xff0c;服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...

02-10.python入门基础一Python模块与包(二)

五、Python 包的概念 &#xff08;一&#xff09;包的定义与结构 在 Python 中&#xff0c;“包”&#xff08;Package&#xff09;是一种按照目录来组织模块的方式&#xff0c;它允许开发者将相关的模块集合在一起&#xff0c;形成一个更具逻辑性和结构性的代码单元。 从物…...

[WiFi] WiFi 802.1x介绍及EAP认证流程整理

802.1X Wi-Fi 802.1X 是一种网络访问控制协议&#xff0c;常用于保护无线网络。它提供了一种基于端口的网络访问控制机制&#xff0c;主要用于在用户和网络之间建立安全的连接。以下是 802.1X 的一些关键特点&#xff1a; 认证框架 802.1X 使用 EAP&#xff08;可扩展认证协议…...

前端通过new Blob下载文档流(下载zip或excel)

当后端返回这样的预览&#xff1a; 前端该如何下载呢&#xff1f;首先在axios请求里&#xff0c;加入第三个参数{ responseType: ‘blob’ }。 proxy.$post(url, params, { responseType: blob }).then((res)>{downloadFormat(res) });然后在一个函数里处理返回&#xff0c…...

R 常用的内置软件包及功能介绍

R 中有许多内置包&#xff0c;提供了丰富的功能来帮助用户进行数据分析、统计建模、图形可视化等任务。以下是一些常用的内置包及其功能简介&#xff1a; 1. stats 包 stats 是 R 的一个核心包&#xff0c;几乎每个 R 用户都会使用它。它包含了许多统计分析的函数&#xff0c…...

基于 HC_SR04的超声波测距数码管显示(智能小车超声波避障部分)

超声波测距模块HC-SR04 1、产品特色 ①典型工作用电压&#xff1a;5V ②超小静态工作电流&#xff1a;小于 5mA ③感应角度(R3 电阻越大,增益越高,探测角度越大)&#xff1a; R3 电阻为 392,不大于 15 度 R3 电阻为 472, 不大于 30 度 ④探测距离(R3 电阻可调节增益,即调节探测…...

12月第十九讲:Redis应用Redis相关解决方案

1.数据库与缓存一致性方案 2.热key探测系统处理热key问题 3.缓存大value监控和切分处理方案 4.Redis内存不足强制回收监控告警方案 5.Redis集群缓存雪崩自动探测 限流降级方案 6.缓存击穿的解决方法 线上Redis比较严重的问题排序是&#xff1a;数据库和缓存一致性、热key…...