【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语句执行流程分析

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4款专业音频在线剪辑工具帮你开启创意之路。

音频在线剪辑工具能够为我们提供很大的便利,对于不管是专业的音乐制作人还是音频创作爱好者来说,都能借助一些音频编辑工具来充分发挥自己的创意。所以这一次,我要给大家介绍几个专业方便的音频剪辑工具。 1、福昕音频在线 直达链接&#x…

【热门主题】000015 大数据治理:开启数据价值新纪元

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…

后端Java学习:springboot之文件上传(阿里云OSS存储)

一、什么是阿里云存储? 阿里云对象存储OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。 二、阿里云…

HarmonyOS应用开发者基础认证——初级闯关习题参考答案大全

相关文章 HarmonyOS应用开发者中级认证——中级闯关习题参考答案大全 HarmonyOS应用开发者高级认证——高级闯关习题参考答案大全 文章目录 HarmonyOS第一课 HarmonyOS介绍判断题单选题多选题 HarmonyOS第一课 DevEco Studio的使用判断题单选题多选题 HarmonyOS第一课 ArkTS语法…

blender 小车建模 建模 学习笔记

一、学习blender视频教程链接 案例4:狂奔的小车_建模_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt4y1E7qn?p14&spm_id_from333.788.videopod.episodes&vd_sourced0ea58f1127eed138a4ba5421c577eb1 二、开始建模 (1)创…

ros使用rviz加载雷达扫描数据

roslaunch wpr_simulation wpb_simple.launch使用rviz打开rviz rviz

小米开放式耳机值得买吗?小米、南卡、倍思开放式耳机横评对比!

​最近双十一活动已经开始了,大家挑好自己想买的开放式耳机了吗?不知不觉现在用开放式耳机的人越来越多了,这类耳机以高佩戴舒适度为优势,比入耳式耳机更加适配运动场景,作为一个数码博主,同时我最近也开始…

QT中使用图表之QChart绘制X轴为日期时间轴的折线图

显然X轴是日期时间轴的话,那么我们使用的轴类就得是QDateTimeAxis QChart中日期时间轴的精度是毫秒 因此图表里面的数据的x值需要是一个毫秒数,才能显示出来 --------------------------------------------------------------------------------------…

Chrome浏览器控制台替换接口返回内容

1.打开Chrome DevTools: 使用快捷键F12或右键点击页面并选择“检查”来打开Chrome DevTools。 2.导航到Network面板: 在DevTools的顶部菜单中,选择“Network”(网络)面板以监视网络请求。 3.发起目标请求: …

5G NR NARFCN计算SSB中心频率MATLAB实现

本期给大家带来5G NR中已知绝对射频信道号NARFCN如何计算SSB的中心频率,用MATLAB实现,参考3GPP 38.104 下图是NARFCN与SSB中心频率换算关系,其中NREF就是NARFCN。 函数输出频率的单位是MHZ,输入是NARFCN。 有不清楚的地方欢迎来…

Docker搭建DVWA靶场以及刷题记录

Docker搭建DVWA靶场以及刷题记录 Docker搭建DVWA靶场以及刷题记录靶场搭建 刷题记录SQL InjectionLowMediumHighImpossible SQL Injection(Blind)LowMediumHigh XSS (Reflected)LowMediumHigh XSS (Stored)LowMediumHigh File UploadLowMediumHigh Docker搭建DVWA靶场以及刷题记…

跨平台开发支付组件,实现支付宝支付

效果图: custom-payment : 在生成预付订单之后页面中需要弹出一个弹层,弹层中展示的内容为支付方式(渠道),由用户选择一种支付方式进行支付。 该弹层组件是以扩展组件 uni-popup 为核心的,关于…

python debug作业

任务类型任务内容预计耗时闯关任务Leetcode 383(笔记中提交代码与leetcode提交通过截图)20mins闯关任务Vscode连接InternStudio debug笔记10mins可选任务pip安装到指定目录10mins leetcode题目解析: 解题思路 字符统计:使用 Python 的 Counter 类统计 ra…

【PyCharm配置Conda的虚拟环境】

conda create了一个新的虚拟环境,想在PyCharm里面使用这个环境,但是怎么都添加不上。 解决办法,把conda executable选择为conda安装目录下的condabin下的conda.bat文件,成功!

加载视频显示 - python 实现

#-*-coding:utf-8-*- # date:2021-03-21 # Author: DataBall - Xian # Function: 加载视频并显示import cv2 if __name__ "__main__":#加载视频cap cv2.VideoCapture(./video/1.mp4)while True:ret, img cap.read()# 获取相机图像if ret True:# 如果 ret 返回值为…

【大数据学习 | kafka】kafka的整体框架与数据结构

1. kafka的整体框架 首先kafka启动以后所有的broker都会向zookeeper进行注册,在/brokers/ids中以列表的形式展示所有的节点,在/controller节点中使用独享锁实现broker的选举,其中一个机器为主节点。其他的为从节点,选举的根本原则…

磁盘的分区

硬盘管理 硬盘的概念 硬盘是一种计算机的存储设备,通常是由一个或多个磁性盘片组成。硬盘既可以安装在计算机的内部,也可以外接计算机 硬盘主要是用来保存数据的 数据包括:操作系统,应用程序,文档多媒体文件等等 计算…

鸿蒙网络编程系列40-TLS数字证书查看及验签示例

1. TLS数字证书验签简介 数字证书的验签是网络编程中一个重要的功能,它保证了数字证书的真实性,在此基础上,我们才可以信任该证书,从而信任基于该证书建立的安全通道,所以说,数字证书的验签是通讯安全的基…

(一)VB 2010 开发环境

VB 2010 开发环境使用VB2010. VB2010界面如图所示起始页:访问项目,团队项目,MSDN帮助资源(MSDN(Microsoft Developer Network)帮助资源是微软公司为开发者提供的一个综合性资源平台)新建项目&am…

2小时,我搭建了一整套车间生产看板

大家可能一提到生产看板搭建,要么想到的是高价购买专业软件,要么是觉得搭建过程复杂。其实,真没大家想象的那么难。我自己也不是一名专业的技术开发人员,就是一名普普通通小员工。现在信息社会,只要大家找对路子&#…