【MySQL】架构

1. MySQL架构基本理解

与餐厅就餐类比理解

  • 每次数据库查询就像一次餐厅服务
    • 应用程序发出查询相当于点菜
    • MySQL解析和执行查询,后厨根据订单制作食物
    • 事务管理保证数据的一致性,类似于结账的时候保证账单正确
    • 查询的时候考虑优化器,类似于厨师选择最快的炒菜方法

对应结构理解

 各个层级作用简单理解

连接层

  •  管理客户端的连接请求。负责身份验证线程复用连接限制、以及一些缓存管理。通过连接池,MySQL 可以高效地处理大量并发请求,减少频繁的连接创建和销毁的开销
  • 像餐厅的迎宾员,负责安排客人入座,分配资源

服务层

  • NoSQL Interface:支持 NoSQL 的 CRUD 操作(主要是简单的增删查改)。
  • SQL Interface处理 DML、DDL 语句,包括视图、存储过程和触发器。
  • Parser:将 SQL 语句解析成数据库可以理解的操作,检查语法和权限。
  • Optimizer:根据查询语句的结构,选择执行查询的最佳路径。
  • Caches & Buffers:提供全局缓存,以及针对不同存储引擎的缓存机制。
  • NoSQL 和 SQL 接口像服务员,将客户端的请求转换为具体的操作。
  • 解析器(Parser)和优化器(Optimizer)决定如何高效执行请求。
  • 缓存和缓冲区就像厨房准备的食材,减少重复操作,提高性能。

存储引擎层

  • InnoDB:支持事务、行级锁和外键约束,是 MySQL 默认存储引擎。
  • MyISAM:轻量级引擎,不支持事务,适用于读多写少的场景。
  • MEMORY:将数据存储在内存中,速度快但数据不持久。

文件系统层

  • 负责将数据以及日志文件存储在操作系统的文件系统上
  • 日志文件(如 redoundo、错误日志等)
  • 数据库数据文件二进制日志配置文件

缓存与缓冲区8.0以后不再使用

MySQL8.0移除了全局查询缓存,因为其会成为高并发环境下性能瓶颈,同时InnoDB提供了更加高效的缓存机制,现在基本都推荐使用应用层缓存(Redis类似)解决高并发缓存问题,MySQL则负责专注于数据存储和查询优化

2. 连接层

2.1 网络端口和连接管理线程

网络端口

MySQL本质上是网络服务,IP地址和端口号可以找到特定的进程,该进程上运行的就是MySQL服务

配置网络端口(通过配置文件生效也可以自己手动配置)

[mysqld]
port=3306
bind-address=0.0.0.0
//bind-address参数设置MySQL监听的IP地址,0.0.0.0表示允许所有IP访问
//限制特定IP访问时则可指定具体IP

连接管理线程

类似于主从Reactor模式中的主Reactor专门管理连接

  • MySQL连接管理类似于主从Reactor模式,主Reactor负责接收客户端的连接请求,然后分发给专门的连接线程处理。这样可以分担连接压力,提高响应效率

多线程的管理

  • 通过MySQL的多线程架构,主线程将连接分配给多个工作线程,提升并发处理能力。例如在InnoDB存储引擎中,后台线程池管理大量连接和事务

2.2 客户端连接线程管理

主从Reactor模式中,子Reactor在线程池中专门负责处理新连接任务,线程池实现了线程的复用,从而减少性能开销,提高其整体性能。 

在主从Reactor架构下,子Reactor线程池专门用于处理新的连接任务。线程池的复用和独立处理可减少主线程的性能开销,并在高并发场景下保持高效

2.3 连接量管理

最大连接数设置

  • 注意不要超过服务器的内存和CPU的承载能力,避免系统崩溃
SET GLOBAL max_connections = 200;

连接超时管理

  • 对于不活跃的连接,设置较短的超时时间,从而确保及时释放资源
SET GLOBAL wait_timeout = 28800;
SET GLOBAL interactive_timeout = 28800;

连接缓存

  • thread_cache_size控制连线程的缓存数量,较大的缓存可以减少线程频繁的创建和销毁

SSL/TLS加密管理

  • 服务端,开启并配置
//服务端 生成证书配置MySQL
[mysqld]
require_secure_transport=ON
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem//客户端配置
mysql --ssl-ca=/path/to/ca.pem -h host -u user -p

3. 服务层

3.1 服务管理与公共组件

  • Backup & Recovery(备份与恢复)

    • 提供数据备份和恢复功能,用于在发生数据丢失或损坏时恢复数据,保障数据的持久性和完整性。
    • 通常包括逻辑备份(如mysqldump工具)和物理备份(如MySQL Enterprise Backup工具)
  • Security(安全)

    • 涉及MySQL的安全性管理,包括用户权限、身份验证、数据加密等方面
    • 通过用户管理、权限控制和SSL/TLS加密来保证数据库的安全访问
  • Replication(主从复制)

    • 支持主从复制(Master-Slave Replication)功能,将数据从一个主数据库同步到一个或多个从数据库,实现数据冗余和负载均衡
    • 适用于数据同步、读写分离和灾备等场景
  • Cluster(集群)

    • MySQL Cluster是一种高可用、分布式的数据库解决方案,支持无共享架构,适合需要高性能和高可用性的场景
    • 在多节点之间分布数据和负载,提供容错能力
  • Partitioning(表分区)

    • 支持表分区功能,将一张大表按某种分区规则(如范围、列表、哈希等)划分为多个分区,提升查询和管理的效率
    • 有助于管理大型数据集,优化查询性能
  • Instance Manager(实例管理)

    • 管理MySQL实例的启动、停止、配置等操作,支持多实例运行,便于资源隔离和管理
    • 通过命令行或图形化界面来控制和监控数据库实例
  • Administrator(管理员工具)

    • 提供MySQL的管理功能,包括用户管理、权限分配、配置修改、性能监控等
    • 可以通过MySQL Workbench等图形化工具或命令行工具实现,简化数据库管理流程
  • Migration Toolkit(迁移工具)

    • 用于将其他数据库系统(如Oracle、SQL Server)中的数据迁移到MySQL,支持数据和架构的迁移
    • 便于在不同数据库系统之间进行数据转换和整合

3.2 NoSQL接口与SQL接口

该接口的目的就是简化客户端和数据库的交互过程,从而确保SQL语句的高效执行和结果传递

  • 接收客户端请求
    • 接收客户端发送过来的SQL语句以及命令请求,该接口可以识别不同的请求
  • SQL转发与执行
    • 接收到SQL语句后,接口将其转发至MySQL的查询处理器或存储引擎等其他模块进行处理。
    • 根据请求类型,可能会交由不同的引擎(如InnoDB、MyISAM等)来执行
  • 结果返回
    • 执行完SQL语句后,接口将处理结果(如查询结果或操作状态)返回给客户端。
    • 这一过程确保客户端能够获得SQL命令执行的反馈,完成与数据库的交互

3.3 Parser-语法分析器

主要作用就是将客户端发送的SQL语句进行解析和转换

  • 词法分析
    • 解析器首先对SQL语句中的关键词(例如select)进行词法分析,将这些关键词与自定义字段提取出来
    • 词法分析将SQL语句分解成一个个基本单元,便于后续的语法分析
  • 语法分析
    • 在词法分析后,解析器会检查SQL语句的语法结构,判断其是否符合SQL标准语法
    • 如果语法正确,解析器会将SQL语句转换为解析树(Parse Tree),为执行引擎提供结构化的信息。如果语法不正确,则会返回错误
  • 生成解析树
    • 解析树是SQL语句的结构化表示,包含语句的操作类型(如SELECT)以及操作对象(如表和字段)
    • 解析树为后续的查询优化和执行提供了基础

3.4 Optimizer-查询优化器

查询优化器的目的就是在多种执行方案中寻找最佳方案,从而使得SQL查询的执行更加高效,其内部通过索引选择、连接优化、条件过滤和查询重写等手段实现该目标。目的就是提高其搜索性能

优化后的SQL语句在条件查询的时候可能与自己写的查询条件过滤顺序不同

3.5 Buffer-缓存

缓存机制可以显著提高查询性能,但在高写入频率的场景中会导致缓存失效频繁,反而影响效率。因此MySQL从5.6版本开始默认关闭查询缓存,并在8.0版本中完全移除。在现代应用中,推荐使用外部缓存来实现对高频查询的优化

缓存作用分析

当服务器接收到SELECT查询时,会先检查缓存中是否已存有该查询的结果。若缓存中存在相同的查询(使用键值对形式存储,key为查询SQL语句,value为结果集),则直接返回缓存的结果,从而省去查询执行过程

缓存中没有相应记录,则进入正常的查询流程,由查询优化器和执行引擎处理

缓存失效

总结:频繁的数据修改可能会导致缓存失效

缓存的数据在表数据更新(如插入、更新、删除)后会失效,因为数据的一致性要求缓存的结果必须反映最新的数据状态

尤其是在写操作频繁的应用场景下,缓存的有效性受限。频繁的数据修改会导致缓存失效,从而增大缓存维护成本

传统缓存的替代方案

 使用分布式缓存系统(如Redis、Memcached)来缓存常用查询结果,减少数据库的直接访问,提升系统整体性能

3.6 SQL语句执行流程分析

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux服务器或Linux计算机设置不记录历史命令

1.设置环境变量 打开命令终端,编辑.bashrc文件中,修改HISTSIZE和HISTFILESIZE都为0 sudo nano ~/.bashrcfor setting history length see HISTSIZE and HISTFILESIZE in bash(1) HISTSIZE0 HISTFILESIZE0 2.生效 source ~/.bashrc 3.验证 cat ./b…

基于Spring Boot的中小型制造企业质量管理系统设计与实现,LW+源码+讲解

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自…

动手学深度学习65 注意力分数

1. 注意力分数 好处:k q v的长度都可以不一样。 2. 代码 3. QA 1 画出注意力权重,对任何一行query,给每一对key-value多少注意力【哪对key-value更重要】 2 语义上的区别 3 是的。一元版本换成向量版本 4 通常用相似度做注意力分数&…

从新手到专家:7款电脑平面设计软件评测

平面设计在时尚、广告等多个领域扮演着重要角色,而创作出独特且富有创意的设计作品则需要依赖优秀的电脑平面设计软件。市场上的电脑平面设计软件众多,每款软件都有其独到之处。本文将为你推荐几款值得关注的电脑平面设计软件,并分析它们的特…

HTML 块级元素和内联(行内)元素详解

在 HTML 中,元素根据它们在页面中的表现方式分为两类:块级元素 和 内联元素(行内元素)。了解块级元素和内联元素的特性与使用方法,是掌握HTML开发的重要基础。本文将深入探讨这两类元素的特点及其在实际开发中的应用。 文章目录 一、块级元素1.1 块级元素是什么?1.2 块级…

微信支付宝小程序SEO优化的四大策略

在竞争激烈的小程序市场中,高搜索排名意味着更多的曝光机会和潜在用户。SEO即搜索引擎优化,对于小程序而言,主要指的是在微信小程序商店中提高搜索排名,从而增加曝光度和用户访问量。有助于小程序脱颖而出,提升品牌知名…

内存马浅析

之前在jianshu上写了很多博客,但是安全相关的最近很多都被锁了。所以准备陆陆续续转到csdn来。内存马前几年一直是个很热门的漏洞攻击手段,因为相对于落地的木马,无文件攻击的内存马隐蔽性、持久性更强,适用的漏洞场景也更多。 J…

【网络】套接字编程——TCP通信

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:TCP网络服务器简单模拟实现。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自:…

CytoSPACE·空转和单细胞数据的高分辨率比对

1. 准备输入文件,需要四个文件,所有文件都应以制表符分隔的表格输入格式 (.txt) 提供。 a. scRNA-seq 基因表达文件 矩阵必须是基因(行)乘以细胞(列)。 第一行必须包含单个细胞 ID,第一列必须…

模型 定位地图

系列文章 分享 模型,了解更多👉 模型_思维模型目录。心智导航现实的空间图。 1 定位地图模型的应用 1.1 小玉的职业定位与发展规划 小玉,24岁,市场营销专业本科毕业生,有半年汽车销售实习经历。毕业后,她…

规划误差降低27%,碰撞率降低33%Senna: 大规模视觉-语言模型与端到端自动驾驶相结合

Abstract 端到端自动驾驶在大规模数据中展示了强大的规划能力,但在复杂、罕见的场景中仍然因常识有限而表现不佳。相比之下,大型视觉语言模型(LVLMs)在场景理解和推理方面表现出色。前进的方向在于融合两者的优势。以往利用LVLMs…

深入浅出 | 谈谈MNN GPU性能优化策略

MNN(Mobile Neural Network)是一个高性能、通用的深度学习框架,支持在移动端、PC端、服务端、嵌入式等各种设备上高效运行。MNN利用设备的GPU能力,全面充分“榨干”设备的GPU资源,来进行深度学习的高性能部署与训练。 概述 MNN自开源以来&a…

UE 引入 IOS framework库的坑

一、我明明已经把framework库进行签名的却在 上传到开发者后台时一直报错 90034 签章遗失 或者 未签 这个问题我最近遇到 极其坑爹 我是这个情况 这是我的framework库的目录 关键就在这了 多出了这个文件 就影响了 上传到开发者后台 就报错 90034 将其删除就好 &…

Rust 力扣 - 3090. 每个字符最多出现两次的最长子字符串

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 本题使用滑动窗口进行求解,使用左指针和右指针分别表示窗口的左边界和窗口的右边界,使用哈希表记录窗口内的字符及其对应数量 我们首先向右移动右指针,将字符加入到哈希表中进…

Spring Boot框架下的信息学科平台系统开发实战

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于保密信息学科平台系统的开发全过程。通过分析基于保密信息学科平台系统管理的不足,创建了一个计算机管理基于保密信息学科平台系统的方案。文章介…

利用EasyExcel实现简易Excel导出

目标 通过注解形式完成对一个方法返回值的通用导出功能 工程搭建 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…

练习LabVIEW第三十二题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第三十二题&#xff1a; 利用labview elapsed time(已用时间)定时设计输出一个方波 开始编写&#xff1a; 前面板放置一…

桑基图在医学数据分析中的更复杂应用示例

桑基图&#xff08;Sankey Diagram&#xff09;能够有效地展示复杂的流动关系&#xff0c;特别适合用于医学数据分析中的多种转归和治疗路径的可视化。接下来&#xff0c;我们将构建一个稍微复杂的示例&#xff0c;展示不同疾病患者在治疗过程中的流动&#xff0c;以及他们的治…

Java毕业设计-基于微信小程序的校园二手物品交易系统的实现(V2.0)

博主介绍&#xff1a;✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

聊一聊:ChatGPT搜索引擎会取代谷歌和百度吗?

当地时间 10 月 31 日&#xff0c;OpenAI 正式推出了 ChatGPT 搜索功能&#xff0c;能实时、快速获取附带相关网页来源链接的答案。这一重大升级标志着其正式向谷歌的搜索引擎霸主地位发起挑战。 本周五我们聊一聊&#xff1a; 欢迎在评论区畅所欲言&#xff0c;分享你的观点~ …