【MySQL高级】——逻辑架构

news2024/11/17 21:39:33

一、服务器处理请求流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 连接层:客户端和服务器端建立连接,客户端发送 SQL 至服务器端;
  2. SQL 层(服务层):对 SQL 语句进行查询处理;与数据库文件的存储方式无关;
  3. 存储引擎层:与数据库文件打交道,负责数据的存储和读取。

二、Connectors层

  客户端连接工具,如JDBC等

三、连接层

  系统(客户端)访问 MySQL 服务器前,做的第一件事就是建立 TCP 连接。
  经过三次握手建立连接成功后, MySQL 服务器对 TCP 传输过来的账号密码做身份认证、权限获取。
  用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行
  用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依 赖于此时读到的权限
TCP 连接收到请求后,必须要分配给一个线程专门与这个客户端的交互。所  以还会有个线程池,去走后 面的流程。每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。

四、服务层

  1. SQL Interface: SQL接口
      接收用户的SQL命令,并且返回用户需要查询的结果。比如SELECT … FROM就是调用SQL Interface
    MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定 义函数等多种SQL语言接口
  2. Parser: 解析器
      在解析器中对 SQL 语句进行语法分析、语义分析。将SQL语句分解成数据结构,并将这个结构 传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。如果在分解构成中遇到错 误,那么就说明这个SQL语句是不合理的。 在SQL命令传递到解析器的时候会被解析器验证和解析,并为其创建 语法树 ,并根据数据字 典丰富查询语法树,会 验证该客户端是否具有执行该查询的权限 。创建好语法树后,MySQL还 会对SQl查询进行语法上的优化,进行查询重写。
  3. Optimizer: 查询优化器
      SQL语句在语法解析之后、查询之前会使用查询优化器确定 SQL 语句的执行路径,生成一个 执行计划 。 这个执行计划表明应该 使用哪些索引 进行查询(全表检索还是使用索引检索),表之间的连 接顺序如何,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将 查询结果返回给用户。
      它使用“ 选取-投影-连接 ”策略进行查询。例如: 这个SELECT查询先根据WHERE语句进行 选取 ,而不是将表全部查询出来以后再进行gender过滤。 这个SELECT查询先根据id和name进行属性 投影 ,而不是将属性全部取出以后再进行过滤,将这两个查询条件 连接 起来生成最终查询结果。
  4. Caches & Buffers:
      查询缓存组件 MySQL内部维持着一些Cache和Buffer,比如Query Cache用来缓存一条SELECT语句的执行结 果,如果能够在其中找到对应的查询结果,那么就不必再进行查询解析、优化和执行的整个过 程了,直接将结果反馈给客户端。 这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等 。 这个查询缓存可以在 不同客户端之间共享 。 从MySQL 5.7.20开始,不推荐使用查询缓存,并在 MySQL 8.0中删除

五、引擎层

  插件式存储引擎层( Storage Engines),真正的负责了MySQL中数据的存储和提取,对物理服务器级别 维护的底层数据执行操作,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样 我们可以根据自己的实际需要进行选取。

六、存储层

  所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在 文件系统 上,以 文件 的方式存 在的,并完成与存储引擎的交互。当然有些存储引擎比如InnoDB,也支持不使用文件系统直接管理裸设备,但现代文件系统的实现使得这样做没有必要了。在文件系统之下,可以使用本地磁盘,可以使用 DAS、NAS、SAN等各种存储系统。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes为何需要默认的serviceaccount?

文章目录 什么是k8s的serviceAccount?为什么每一个ns下都有默认的sa?default sa yaml 默认的sa下都会挂一个secret,这个secret是从哪里来的?一道关于RBAC的CKA考题1、创建一个新的 ServiceAccount2、创建一个新的 Role3、创建一个…

ChatGPT测试-吴彦祖帅不帅

GPT3.5 我是一个xxx职业,女性,平常喜欢xxxx,喜欢类似 xxx,肖战,王一博,一类的男明星,对于我这种女生来说的话,这种审美方向,吴彦祖帅不帅,请给我具体回答&…

免费ChatGPT接入网站-网站加入CHATGPT自动生成关键词文章排名

网站怎么接入chatGPT 要将ChatGPT集成到您的网站中,需要进行以下步骤: 注册一个OpenAI账户:访问OpenAI网站并创建一个账户。这将提供访问API密钥所需的身份验证凭据。 获取API密钥:在您的OpenAI控制台中,您可以找到您…

国赛超强自学素材!飞桨系列国赛课程集锦发布

自2023年3月以来,飞桨在“中国软件杯”大学生软件设计大赛和全国大学生智能汽车竞赛两大赛事中,陆续发布了六项赛题。我们整理了一份当前阶段的竞赛培训课程合集,为同学们的学习和备赛保驾护航!出发的号角已然吹响,欢迎…

AODV路由算法在无线传感器网络中的设计与仿真(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 此代码用于MATLAB GUI,其中为WSN实现了AODV路由协议。源节点每次都会随着数据包的数量而变化。GUI的快照已附加。它…

Qt5下Qxlsx模块安装及使用

Qt5下Qxlsx模块安装及使用 1. 未安装Qxlsx的程序效果2. 安装Perl(编译Qxlsx源码用)2.1 下载 ActivePerl 5.282.2 安装 ActivePerl 5.28 3. 下载并编译Qxlsx源码3.1 下载Qxlsx源码3.2 编译Qxlsx源码 4. 将编译好的文件复制到Qt路径下4.1 bin 路径文件复制…

git报错处理:ssh:connect to host github.com port 22: Connection timed out

一、背景 git 在上传、下载 文件的时候,报错。 报错信息: ssh:connect to host github.com port 22: Connection timed out 提示这个域名github.com port 的22 端口,链接超时。 我直接访问github.com 这个域名是可以访问的,pi…

python+vue 风俗文化管理系统

管理员可以根据系统给定的账号进行登录,登录后可以进入风俗文化管理系统对风俗文化管理所有模块进行管理。包括查看和修改自己的个人信息以及登录密码,用户信息等。 用户通过注册账号的登录可以在系统中查看风俗文化管理信息及对个人信息进行修改等功能。…

华为OD机试(JAVA)真题 2023(汽水瓶\随机数\进制转换)

系列文章目录 文章目录 系列文章目录前言一、 1.汽水瓶二 明明的随机数 前言 一、 1.汽水瓶 某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。 小张手上有n个空汽水瓶,她想知道自己最多…

git版本本地远程分支管理测试

只为搞清楚一些基本的git的本地提交、分支,远程分支的概念。 创建git库。 在本地首次建立一个001文件,首次提交到本地master,不提交(push)到远程master(gitee)。 add 增加001文件到库。 Git-co…

【UML建模】状态图(State Machine Diagram)

文章目录 1.概述2. 状态图的使用2.1.状态图中的元素2.2.状态图的使用案例2.3.组合状态及其使用案例 3.总结 1.概述 状态图,又称为状态机图,是一种用于描述对象的生命周期和状态转换的UML图示,它是一种行为图,用于描述对象的状态和…

Django 4.2发布,主要变化小结!

2023年4月,Django 4.2正式发布,此版本已被指定为长期支持 (LTS) 版本,发布3年后都会收到安全更新,将成为未来3年的主流版本。今天就来一起看看新版本有哪些变化吧? Python 兼容性 Django 4.2 支持 Python 3.8、3.9、3.…

Golang Gin 局部、全局 中间件使用

中间件 中间件是放在客户端和服务端的中间。 当你的客户端对某个接口发起一个请求,但是在到达接口2之前,这里是有一层中间件的处理。 一般常用的就是处理跨域,比如处理登入的验证token,接口返回的信息比较敏感,说白…

Sample语言上下文无关文法

<表达式>: <表达式>-<算术表达式>|<关系表达式>|<布尔表达式>|<赋值表达式> <算术表达式> <算术表达式> -> <算术表达式> <项> | <算术表达式> - <项>|<项> <项> -> <项>* …

为什么企业要做大规模敏捷?

背景 软件工程里一个重要的指标就是“可用的软件”&#xff0c;敏捷宣言里也同样告诉我们“工作的软件高于详尽的文档”&#xff0c;那“可用的软件”、“工作的软件”意味着什么呢&#xff1f;在我的理解里&#xff0c;可以经历用户 “千锤百炼”的软件就是一个“可用的软件”…

Linux 共享库 静态库 动态库

一、 静态库(后缀.a)&#xff1a;程序执行前&#xff08;编译&#xff09;就加入到目标程序中去了 优点&#xff1a;运行速度快&#xff0c;发布程序无需提供静态库&#xff0c;因为已经在编译到目标程序中&#xff0c;运行的时候可以直接运行&#xff0c;移植方便 缺点&…

【Java】Eclipse的安装和JDK的安装与配置教程

Java是能够跨越多平台的、可移植性高的一种面向对象的编程语言&#xff0c;其简单易学、功能强大&#xff0c;越来越多的程序员喜欢加入Java的阵营之中。 一、前言 Java具有以下功能特点&#xff1a; 跨平台性&#xff1a;Java程序可以在任何支持Java虚拟机&#xff08;JVM&am…

C. Increasing by Modulo(贪心 + 二分)

Problem - C - Codeforces Toad Zitz有一个整数数组&#xff0c;每个整数都在0到m-1的范围内。这些整数是a1,a2...an。 在一次操作中,,iz可以选择一个整数k和k个萦引1..k&#xff0c;使得1si i2. ..fiksn。然后他应该将每个选定的整数a刘j 更改为(aj 1lmodm)。整数m对于所有操作…

初识STL

长久以来&#xff0c;软件界一直希望建立一种可重复利用的东西&#xff0c;以及一种得以制造出”可重复运用的东西”的方法&#xff0c;从函数(functions)&#xff0c;类别(classes),函数库(function libraries),类别库(class libraries)、各种组件&#xff0c;从模块化设计&am…

(C语言版)力扣(LeetCode)27.移除元素三种解法分析

移除元素 题目第一种解法&#xff1a;有效值前移第二种解法&#xff1a;双指针第三种解法&#xff1a;双指针优化结语 题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空…