MySQL-逻辑架构

1、MySQL服务器处理客户端请求

  • MySQL是典型的C/S架构,服务端程序使用 mysqld。
  • 实现效果:客户端进程像服务端发送(SQL语句),服务器进程处理后再像客户端进程发送 处理结果。
    在这里插入图片描述

2、connectors

  • 指不同语言中与SQL的交互
  • MySQL是一个网络程序,再TCP上定义了自己的应用层协议,编写相关代码与MySQL server建立TCP连接
  • 通过调用SDK(本质是再TCP连接上通过MySQL协议进行交互),即不同语言的MySQL Connector,或者ODBC

3、连接层

客户端访问MySQL服务器之前,会先建立TCP连接,经过三次握手连接成功后,MySQL服务器对TCP传输过来的信息做身份认证及权限获取

  • 用户或密码不正确,会收到 Access denied for user 错误,客户端程序结束执行
  • 认证通过,会从权限表获取账号拥有的权限与连接关联,之后的权限判断逻辑都依赖与此时读取到的相关权限
  • MySQL服务器有专门的 TCP连接池 限制连接数,采用 长连接模式 复用TCP连接

4、服务层

在该层服务器会 解析查询 并创建相应的内部 解析树,并完成相应的 优化,如确定查询顺序,是否使用索引等。如果是select语句,会 查询内部缓存

  • SQL Interface:SQL接口
    ①接受用户SQL命令并返回用户需要查询的结果。
    ②支持DML,DDL、存储过程、视图、触发器、自定义函数等SQL语言接口
  • Parser:解析器
    ①在解析器中对SQL语句进行语法分析、语义分析,并将SQL语句分解成 数据结构,将该数据结构传递到后续步骤,后续的传递和处理都基于该 数据结构
    ②SQL语句传递到解析器的时候会被解析器验证和解析,并创建 语法树,然后更具数据字典丰富查询语法树,会 验证该客户端是否具有执行的权限。
    ③创建语法树后,MySQL会对SQL查询进行语法上的优化,进行查询重写
  • Optimizer:查询优化器
    ①SQL语句在语法解析后查询之前会使用查询优化器确定SQL语句的执行路径并生成 执行计划
    ②该执行计划须表明 使用那些索引 进行查询(全表检索或索引检索),相关表之间的连接顺序是什么,并按照执行计划中的步骤调用存储引擎提供的方法去执行SQL语句,最后将执行结果返回给用户。
    ③会使用 选取-投影-连接 策略进行处理。
  • Caches & Buffers :查询缓存组件
    ①MySQL服务器维持着一些查询相关缓存组件,在进行查询语句时如果在缓存中读取到对应的查询结果,就不必进行解析、优化、执行的整个过程,会直接将结果返回给用户
    ②缓存机制是由一系列小缓存组成的,比如 表缓存,key缓存,权限缓存等
    ③该缓存可在 不同客户端之间共享
    MySQL 8.0中删除

5、引擎层

  • 插件式存储引擎 架构将查询处理和其它的系统任务及数据的存储提取相分离
  • 允许开发者 设置存储引擎
  • 正真负责MySQL服务器中数据的存储和提取,对物理服务器级别维护的底层数据执行操作
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.24 sec)

6、存储层

  • 所有的数据、数据库、表的定义及相关数据,索引都是存在文件系统上,以文件的形式存在,并完成与存储引擎的交互。
  • 在文件系统下,可以使用本地磁盘,使用DAS、NAS、SAN等各种存储系统

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

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

相关文章

Vue3+ts(day05:ref、props、生命周期、hook)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学,可以点心心支持一下哈(笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】,记录一下学习笔记,用于自己复盘,有需要学…

OpenMLDB v0.9.0 发布:SQL 能力大升级覆盖特征上线全流程

发布日期 25 April 2024 Release note https://github.com/4paradigm/OpenMLDB/releases/tag/v0.9.0 亮点特性 增加最新版 SQLAlchemy 2 的支持,无缝集成 Pandas 和 Numpy 等常用 Python 框架。支持更多数据后端,融合 TiDB 的分布式文件存储能力以及…

【Redis】Redis安装、配置、卸载使用可视化工具连接Redis

文章目录 1.前置条件2.安装Redis2.1下载Redis安装包并解压2.2在redis目录下执行make命令2.3修改Redis配置文件2.4启动Redis服务2.5连接redis服务 3.Redis卸载4.使用可视化工具连接Redis 1.前置条件 Linux操作系统需要要是64位.如果不清楚自己Linux上是多少位的,可以使用以下命…

详解 Go 程序的启动流程,你知道 g0,m0 是什么吗?

自古应用程序均从 Hello World 开始,你我所写的 Go 语言亦然: import "fmt"func main() {fmt.Println("hello world.") }这段程序的输出结果为 hello world.,就是这么的简单又直接。但这时候又不禁思考了起来&#xff0…

vue3 ——笔记 (表单输入,监听器)

表单输入 在Vue 3中,v-model指令的用法稍有不同于Vue 2。在Vue 3中,v-model指令实际上是一个语法糖,它会自动将value属性和input事件绑定到组件或元素上,以实现双向数据绑定。 在自定义组件中使用v-model时,需要在组…

SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作,今天这篇文章就来实操SQL注入。 阅读本文前可以先看一下基本操作,有助于更好理解本文。。。 https://blog.csdn.net/weixin_60885144/article/details/138356410?spm1001.2014.3001.5502 what SQL---结构化查询语言---S…

Codeforces Round 943 (Div. 3) (A-G1) C++题解

目录 比赛链接 : A. Maximize? B. Prefiquence C. Assembly via Remainders D. Permutation Game E. Cells Arrangement F. Equal XOR Segments G1. Division LCP (easy version) G2. Division LCP (hard version) 比赛链接 : Dashboard - Codeforces Round 943 (…

用vim或gvim编辑程序

vim其实不难使用&#xff0c;学习一下就好了。简单功能很快学会。它有三种模式&#xff1a;命令模式&#xff0c;编辑模式&#xff0c;视模式。打开时在命令模式。在命令模式下按 i 进入编辑模式&#xff0c;在编辑模式下按<Esc>键退出编辑模式。在命令模式按 :wq 保存文…

Python-100-Days: Day08 Object-oriented programming(OOP) basics

OOP definition 把一组数据结构和处理它们的方法组成对象&#xff08;object&#xff09;&#xff0c;把相同行为的对象归纳为类&#xff08;class&#xff09;&#xff0c;通过类的封装&#xff08;encapsulation&#xff09;隐藏内部细节&#xff0c;通过继承&#xff08;in…

C/C++开发环境配置

配置C/C开发环境 1.下载和配置MinGW-w64 编译器套件 下载地址&#xff1a;https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ 下载后解压并放至你容易管理的路径下&#xff08;我是将其放在了D盘的一个software的文件中管理&#xff09; 2.…

古典密码学简介

目录 C. D. Shannon: 一、置换密码 二、单表代替密码 ① 加法密码 ② 乘法密码 ③密钥词组代替密码 三、多表代替密码 代数密码 四、古典密码的穷举分析 1、单表代替密码分析 五、古典密码的统计分析 1、密钥词组单表代替密码的统计分析 2、英语的统计规…

魔方阵(C语言)

一、魔方阵规律&#xff1b; 8 1 6 3 5 7 4 9 2 魔方阵中各数的排列规律如下&#xff1a; (1)将1放在第1行中间一列。 (2)从2开始直到nn止&#xff0c;各数依次按此规则存放&#xff1a;每一个数存放的行比前一个数的行数减1&#xff0c;列数加1(例如上…

QT5带UI的常用控件

目录 新建工程&#xff0c;Qmainwindow带UI UI设计器 常用控件区 Buttons 按钮 containers 容器 控件属性区域 对象监视区 布局工具区 信号与槽区 简单例子1 放置一个按钮控件&#xff0c;改文本为发送&#xff0c;该按键为Button1&#xff1b; 按钮关联信号和…

点云三角化---------PCL

贪婪三角化 pcl::PolygonMesh PclTool::projectionTriangulation(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud) {// 正态估计pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n; // 法线估计对象pcl::PointCloud<pcl::N…

刷代码随想录有感(53):合并二叉树

题干&#xff1a; 代码&#xff08;递归实现&#xff09;&#xff1a; TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {//前序好理解&#xff0c;直接将树覆盖到另一个上面if(root1 NULL)return root2;//当前遍历节点为空的话就让另一个的值覆盖过来if(root2 NUL…

k8s环境部署gpu以及CUDA兼容性分析

本文记录和学习在实用gpu搭建k8s支持上层应用时的功能实践和遇到的问题。 1. 基础概念 CUDA本质上就是NVIDIA专为通用高性能并行计算设计的一套计算平台和编程模型&#xff0c;换句话使用GPU并行编程的规范方法&#xff0c;所以CUDA在软件层面包含了众多库&#xff0c; 那这里…

【Vulhub靶场】Nginx 漏洞复现

Nginx 漏洞复现 一、Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09;1、影响版本2、漏洞原理3、漏洞复现 二、Nginx 解析漏洞1、版本信息&#xff1a;2、漏洞详情3、漏洞复现 一、Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09; 1、影响版本 Nginx …

python中的self是什么

你对Python编程中的self真的了解吗? 当我们在Python编程的时候,尤其是写一个方法的时候,会自动补齐括号中的self,那么我们对它真的了解吗? Self 是什么?有什么作用? self指的是调用该函数的对象&#xff08;是一个实例&#xff09;,首先明确的是self只有在类中的方法中才…

基于SpringBoot+Vue的旅游网站系统

初衷 在后台收到很多私信是咨询毕业设计怎么做的&#xff1f;有没有好的毕业设计参考?能感觉到现在的毕业生和当时的我有着同样的问题&#xff0c;但是当时的我没有被骗&#xff0c;因为现在很多人是被骗的&#xff0c;还没有出学校还是社会经验少&#xff0c;容易相信别人。…

使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境

文章目录 概述安装Android Studio编译源码使用Android Studio打开源码制作ipr文件直接编译成功后自动打开Android Studio 修改SystemUI验证开发环境 概述 我们都知道Android的系统源码量非常之大&#xff0c;大致有frameworka层源码&#xff0c;硬件层(HAL)源码&#xff0c;内…