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

Mysql之基本架构

1.Mysql简介

mysql是一种关系型数据库,由表结构来存储数据与数据之间的关系,同时为sql(结构化查询语句)来进行数据操作。

sql语句进行操作又分为几个重要的操作类型

DQL: Data Query Language 数据查询语句

DML: Data Manipulation Language 添加、删除、修改语句

DDL: Data definition Language 数据库结构操作

DCL:权限控制语句

TCL: 事务相关 比如commit/savepoint、rollback

对应关系数据库,就会有一个非关系型数据库,像redis这种key、value结构数据这种文档存储等等。redis可见博客Redis的数据类型及使用场景-CSDN博客

那么关系型数据库相比非关系型数据有什么区别呢?

a. 关系型数据都是用表来进行维护的,所以格式一致,可以统一用sql语言来进行操作

b.关系型数据都是表结构,所以灵活度不够,操作复杂的海量数据性能比较差,所以我们才会有表结构、索引以及索引优化

c.虽然性能可能会比较慢,但是能做复杂的关联查询操作,比如一对一、一对多、多对一等

思考:Mysql属于关系型数据库的一种,为什么都喜欢用Mysql呢?说句很实在的话,因为开源(不要钱)。那么我们来看看官网是什么吹的What Is MySQL? | Oracle

相比于其它的关系型数据库,Mysql主要由以下几个优势:(跟其它主流的基本上都差不多)

大话来说就是,好用,易上手,稳定可靠,性能好,可扩展高可用,又安全又灵活

易用性: 开发者可以在几分钟内安装好 MySQL ,数据库易于管理。
可靠性: MySQL 是最成熟、使用最广泛的数据库之一。超过 25 年,它已经在各种场景中进行了测试,其中包括许多世界上最大的公司。由于MySQL 的可靠性,组织依赖 MySQL 来运行关键业务应用程序。
可扩展性: MySQL 可扩展以满足最常访问的应用程序的需求。 MySQL 的本机复制架构使 Facebook 等组织能够扩展应用程序以支持数十亿用户。
性能: MySQL HeatWave 比其他数据库服务更快且成本更低,多项标准行业基准测试证明了这一点,包括 TPC-H TPC-DS CH-benCHmark
高可用性: MySQL 为高可用性和灾难恢复提供了一套完整的本机、完全集成的复制技术。对于关键业务应用程序,并满足服务级别协议承诺,客户可以实现 零数据丢失以及秒级的故障转移恢复。
安全性: 数据安全需要保护和遵守行业和政府法规,包括欧盟通用数据保护条例、支付卡行业数据安全标准、健康保险可移植性和责任法案以及国防信息系统局的安全技术实施指南。MySQL 企业版提供高级安全功能,包括身份验证/ 授权、透明数据加密、审计、数据屏蔽和数据库防火墙。
灵活性: MySQL 文档存储为用户开发传统 SQL NoSQL 无模式数据库应用程序提供了最大的灵活性。开发人员可以在同一个数据库和应用程序中混合和匹配关系数据和 JSON 文档。

2.Mysql架构

我们知道,我们写的一条sql语句是从客户端发起,到服务端处理,再由服务端返回数据,那么它经历了哪些模块或流程呢?

在Mysql架构中,主要分为2大模块,一个是服务层,一个是存储引擎层。服务层就是Mysql这个数据库服务提供的一些功能,比如跟客户端连接,分析sql语句等等;而存储引擎层更多的是Mysql一个插件,来负责数据的存储和查询方式

2.1 服务层

Mysql服务层负责从客户端接收sql语句,然后对sql语句进行解析,看sql语句是否正确,是否有权限操作。然后分析出来怎么去查看更好,知道怎么查询了后就去调用存储引擎相关的接口实现,返回数据。服务层主要分为以下几个模块:

2.1.1连接器

首先,我们得连接客户端,那么Mysql里面就有一个连接层,我们来看下连接层相关的变量:

show status like 'Max_used_connections%'

max_used_connections:自服务启动以来最大的连接数

max_used_connections_time 达到这个峰值的时间

-- 最大的连接数,超过该值不允许建立连接,默认151,最小1 最大100000
select @@max_connections;
-- 查询超时时间,毫秒为单位
select @@max_execution_time;
set @@GLOBAL.max_connections=5; -- 设置最大线程数
set @@GLOBAL.max_execution_time=1000; -- 更改会话的查询超时时间为1S 更改后 对新起的会话生效
select * from t_work_order; -- 查询超过1s的数据会报错

连接器的参数有助于我们排查生产问题,比如我们的CPU超高,系统卡了,那么我们就可以查看一下当前用户正在运行的线程:

show full processlist;

字段解析:

user: 操作的用户名

host: 地址

db: 操作的db

command: 当前连接执行的命令 休眠 查询  sleep为空闲连接

time: 这个状态持续的时间;单位是s

state: 状态

info: 线程正在执行的语句,如果线程没有执行语句,则为NULL

如果遇到查询很慢,甚至由于IO阻塞导致了CPU消耗过高怎么解决?

-- 1.查看当前线程
show processlist;
-- 2. 关闭查询query
KILL query 2280; -- 终止上面查询时间过长的id
-- 3. 杀死连接 connection
KILL 2280;


2.1.2 解析器

当成功建立连接后,就开始解析sql语句,会把一条sql语句解析成一颗语法树,看是否符合我们的sql语法,主要分为词法解析和语法解析

词法解析:将 sql 语句打碎,转化成一个一个关键单词,然后交给语法解析器去构建语法树,判断语法是否正确
语法解析: 语法解析已经知道每个 sql 语句的单词了,那么在语法解析的时候,会去检 查语法是否正确,比如, where 是不是写出 where1,from 写成from1.表名、列名是否存在、用户是否有操作权限等等
下面为一个示例:

2.1.3 预处理

什么是预处理,预处理是对解析后的sql进行一定的前置处理,进行提效的。预处理主要有以下两个好处。

1.每次执行语句时解析语句的开销更少。通常,数据库应用程序处理大量几乎相同的语句,仅更改WHERE 查询和删除、 SET 更新和 VALUES 插入等子句中的文字或变量值。
2.防止 SQL 注入攻击。参数值可以包含未转义的 SQL 引号和定界符。

2.1.4 优化器

根据上面的处理,我们已经知道了要执行一个什么样的语句,但是具体怎么执行也会有很多的方式,比如走哪个索引,语句是不是可以优化,做哪种优化,那种执行方式、路径更快呢?

Mysql提供了一些优化器可供选择,通过全局变量optimizer_switch来决定

select @@GLOBAL.optimizer_switch

优化器说明官网:MySQL :: MySQL 8.0 Reference Manual :: 10.9.3 Optimizer Hints

优化方式、优化器实践官网: MySQL :: MySQL 8.0 Reference Manual :: 10 Optimization

优化器会生成一个最终的执行计划,所以这个语句到底怎么走,优化器来决定。

2.1.5    执行器

根据相应的执行计划,去调用数据存储的地方,也就是来到了我们的存储层。执行器会去根据表设置的存储引擎,调用不同存储引擎的API接口获取数据。

至于这个数据怎么存的,这个数据有哪些优化(比如内存去缓存等),就是每个存储引擎自己去做的事情了。并且存储引擎和mysql是解耦的。

执行器的主要职责就是去查询数据,并且把查询结果组装返回,是Mysql与存储引擎的交互方。比如没有索引,就会去扫描全表的数据,一条一条判断是否满足条件。如果有索引,就会走索引树,减少扫描数量。

2.2 存储引擎层

存储层是数据真正存储的地方。Mysql支持不同的存储引擎,这些存储引擎决定了我们数据的存储方式,以及数据的可靠性、一致性、持久性、原子性。也就是我们经常讲的ACID。

有些存储引擎支持ACID,有些存储引擎不支持ACID,有些存储引擎为了性能,有些存储引擎是为了数据的一致性。

那么官网提供了哪些存储引擎: MySQL :: MySQL 8.0 Reference Manual :: 18 Alternative Storage Engines

如何查询当前服务器支持哪些存储引擎呢?

那么存储引擎之间有什么区别呢? 我们根据查出来的信息谈谈InnoDB与MyIASM的区别:

Innodb: 支持事务 ;行级锁 ;支持外键

Myiasm: 不支持事务;仅支持表级锁;不支持外键

有关索引的差异我们后面会提到

相关文章:

Mysql之基本架构

1.Mysql简介 mysql是一种关系型数据库,由表结构来存储数据与数据之间的关系,同时为sql(结构化查询语句)来进行数据操作。 sql语句进行操作又分为几个重要的操作类型 DQL: Data Query Language 数据查询语句 DML: Data Manipulation Language 添加、删…...

Python学习---基于正则表达式的简单爬取电影下载信息案例

一、定义函数获取列表页的内容页地址 get_movie_links() 1、定义列表的地址 2、打开url地址,获取数据 3、解码获取到的数据 4、使用正则得到所有的影片内容也地址 4.1 遍历,取出内容页地址 4.2 拼接内容页地址 4.3 打开内容页地址 4.4 获…...

.DS_store文件

感觉mac里的这个.DS_store文件烦人,老是莫名其妙的出现,然后造成困扰 处理方式如下: import os pic_list os.listdir("./mask_pic/") print(len(pic_list)) # 从文件夹中删掉 if(".DS_Store" in pic_list):print(&quo…...

【webrtc】内置opus解码器的移植

m98 ,不知道是什么版本的opus,之前的交叉编译构建: 【mia】ffmpeg + opus 交叉编译 【mia】ubuntu22.04 : mingw:编译ffmpeg支持opus编解码 看起来是opus是1.3.1 只需要移植libopus和opus的webrtc解码部分即可。 linux构建的windows可运行的opus库 G:\NDDEV\aliply-0.4\C…...

Java注解:讲解Java注解(Annotations)的概念,使用,并展示如何自定义注解,甚至框架级别的使用说明

1. 注解的概念 1.1 介绍Annotation的基础概念 Java注解(Annotation)是Java 5.0及更高版本中引入的一种元数据(meta-data),即数据的数据。它以一种形式附着在代码中,但是对代码的运行不产生直接效果。注解可以用于创建文档、追踪代码依赖性、甚至执行编译期版错误检查等…...

二维矩阵乘法案例

二维矩阵相乘计算原理:第一个矩阵的每一行分别与第二个矩阵的每一列做向量点乘,将所得结果填入新矩阵相应的位置。 例如,给定矩阵 A [ [1, 2 ], [3, 4] ]和 B [ [5, 6 ], [7, 8] ],它们的乘积AB分别为: AB[ 0 ] [ 0…...

selenium安装出错

selenium安装步骤(法1): 安装失败法1 第一次实验,失败 又试了一次,失败 安装法2-失败: ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。: c:\\programdata\\a…...

前端中 dayjs 时间的插件使用(在vue 项目中)

Day.js中文网 这是dayjs的中文文档 里面包括了使用方法 下面我来详细介绍一下这个插件的使用 Day.js 可以运行在浏览器和 Node.js 中。 一般咱直接是 npm 安装 npm install dayjs 目前应该使用的是Es6 的语法 import dayjs from dayjs 当前时间 直接调用 dayjs() 将返回…...

tp5问题集记录 一

tp5问题集记录 一 前言车祸现场 前言 在写tp5接口的时候,发现model里面的参数查询出来之后,怎么改都不生效,也是自己不熟悉钻牛角尖了。 车祸现场 例如下面的代码使用model处理预处理 // SPUpublic function getSpuAttr($value, $data){$…...

AGI技术与原理浅析:曙光还是迷失?

前言:回顾以往博客文章,最近一次更新在2020-07,内容以机器学习、深度学习、CV、Slam为主,顺带夹杂个人感悟。笔者并非算法科班出身,本科学制药、研究生学金融,最原始的算法积累都来源于网络,当时…...

探秘机器学习经典:K-近邻算法(KNN)全解析

在浩瀚的机器学习宇宙中,K-近邻算法(K-Nearest Neighbors,简称KNN)如同一颗璀璨的明星,以其简洁直观的原理和广泛的应用范围,赢得了众多数据科学家的喜爱。今天,让我们一起揭开KNN的神秘面纱,深入探讨它的运作机制、优缺点、应用场景,以及如何在实际项目中灵活运用。 …...

数据可视化每周挑战——全国星巴克门店数据可视化

这是我国星巴克门店的位置,营业时间等数据。 1.导入需要用的库,同时设置绘图时用到的字体,同时防止绘图时负号无法正常显示的情况。 import pandas as pd from pyecharts.charts import Bar,Map,Line,Pie,Geo from pyecharts import option…...

【前端】js通过元素属性获取元素

【前端】js通过元素属性获取元素 <div for"hc_opportunity_config">aaaaa</div>//通过属性获取元素document.querySelector([for"hc_opportunity_config"]) document.querySelector([属性"属性值"])...

申请轻纺行业工程设计资乙级对企业有什么要求

注册资金&#xff1a;企业的注册资金应至少达到三百万&#xff0c;这是衡量企业经济实力和承担风险能力的重要指标。独立法人资格&#xff1a;企业应具备独立的法人资格&#xff0c;能够独立承担民事责任&#xff0c;并具备相应的经营自主权。专业技术人员配备&#xff1a;企业…...

基于单片机电梯控制系统设计与实现

摘 要: 介绍了电梯控制系统架构 &#xff0c; 指出了该系统的硬件设计和控制系统的软件设计以及系统调试 &#xff0c; 使系统可根据按键 要求完成载客任务&#xff0c;为电梯控制系统的优化提供了参考 。 关键词 : 电梯控制 ; 单片机 ; 系统设计 0 引言 在高层建筑中发挥…...

嵌入式单片机笔试题

DC-DC 和 LDO两者有何区别&#xff1f; DC-DC转换器&#xff08;直流-直流转换器&#xff09;和LDO&#xff08;低压差线性稳压器&#xff09;都是用于电源管理的设备&#xff0c;但它们在原理和特性上有一些显著的区别&#xff1a; 原理&#xff1a; DC-DC转换器通过改变输…...

生活小区火灾预警新篇章:泵吸式可燃气体报警器的检定与运用

在现代化的生活小区中&#xff0c;燃气设备广泛应用于居民的日常生活之中&#xff0c;但同时也带来了潜在的火灾风险。 可燃气体报警器作为一种安全监测设备&#xff0c;能够及时检测到燃气泄漏等安全隐患&#xff0c;并在达到预设的阈值时发出警报&#xff0c;提醒居民采取相…...

263 基于matlab得到的频分复用(FDM,Frequency Division Multiplexing)实现

基于matlab得到的频分复用(FDM&#xff0c;Frequency Division Multiplexing)实现&#xff0c;仿真时录入三路声音信号进行处理&#xff0c;将用于传输信道的总带宽划分成三个子频带&#xff0c;经过复用以后再将录入的声音信号恢复出来。程序已调通&#xff0c;可直接运行。 2…...

使用v-model完成数据的双向绑定

创作灵感 面试问道了&#xff0c;没答出来&#xff0c;呜呜呜~ v-model实现双向绑定的原理 首先我们要知道&#xff0c;v-model实现的双向绑定其实只是props与emit的简化版本。其中&#xff0c;props负责父组件向子组件传递值&#xff0c;emit负责子组件向父组件传递值。 在…...

如何使用Android NDK将头像变成“遗像”

看完本文的标题&#xff0c;可能有人要打我。你说黑白的老照片不好吗&#xff1f;非要说什么遗像&#xff0c;我现在就把你变成遗像&#xff01;好了&#xff0c;言归正传。我想大部分人都用过美颜相机或者剪映等软件吧&#xff0c;它们的滤镜功能是如何实现的&#xff0c;有人…...

中山大学美团港科大提出首个音频驱动多人对话视频生成MultiTalk,输入一个音频和提示,即可生成对应唇部、音频交互视频。

由中山大学、美团、香港科技大学联合提出的MultiTalk是一个用于音频驱动的多人对话视频生成的新框架。给定一个多流音频输入和一个提示&#xff0c;MultiTalk 会生成一个包含提示所对应的交互的视频&#xff0c;其唇部动作与音频保持一致。 相关链接 论文&#xff1a;https://a…...

Maven的配置与运行

maven配置国内镜像 <!-- # %MAVEN_HOME%\conf\settings.xml # 找到 <mirrors> 标签&#xff0c;添加&#xff1a; --> <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>htt…...

Three.js怎么工作的?

Three.js 是怎么工作的&#xff1f; Three.js 的核心工作是&#xff1a; 构建一个虚拟的 3D 世界&#xff08;Scene&#xff09; 模拟摄像机视角&#xff08;Camera&#xff09; 用 WebGL 把这个场景“渲染成一张图片” 把这张图片画在 canvas 上 &#x1f449; 所以 Three…...

链表题解——环形链表【LeetCode】

141. 环形链表 方法一 核心思想&#xff1a; 使用一个集合 seen 来记录已经访问过的节点。遍历链表&#xff0c;如果当前节点已经存在于集合中&#xff0c;说明链表存在环&#xff1b;否则&#xff0c;将当前节点添加到集合中&#xff0c;继续遍历。如果遍历结束&#xff08;h…...

php执行系统命令的四个常用函数

php执行系统命令有四个常用函数&#xff1a;1.exec()执行命令并返回最后一行输出&#xff0c;可传数组获取全部结果&#xff1b;2.shell_exec()返回完整输出结果&#xff0c;适合一次性获取&#xff1b;3.system()直接输出命令结果&#xff0c;可接收状态码&#xff1b;4.权限控…...

yolov11与双目测距结合,实现目标的识别和定位测距(onnx版本)

一、yolov11双目测距基本流程 yolov11 双目测距的大致流程就是&#xff1a; 双目标定 --> 立体校正&#xff08;含消除畸变&#xff09; --> 立体匹配 --> 视差计算 --> 深度计算(3D坐标)计算 --> 目标检测 --> 目标距离计算及可视化 下面将分别阐述每…...

AI编程提示词

你是 IDE 的 AI 编程助手&#xff0c;遵循核心工作流&#xff08;研究 -> 构思 -> 计划 -> 执行 -> 评审&#xff09;用中文协助用户&#xff0c;面向专业程序员&#xff0c;交互应简洁专业&#xff0c;避免不必要解释。[沟通守则] 1. 响应以模式标签 [模式&#…...

九、【ESP32开发全栈指南: UDP通信服务端】

一、TCP与UDP核心差异 特性TCPUDP连接方式面向连接 (需三次握手)无连接可靠性可靠传输 (重传/排序/校验)尽力交付 (不保证可靠性)实时性延迟较高低延迟&#xff0c;实时性强传输效率协议开销大头部开销小 (仅8字节)连接类型点对点支持广播/多播资源占用高 (需维护连接状态)极低…...

从 Revit 到 3DTiles:GISBox RVT 切片器如何让建筑图元在 Web 端展示

在GIS&#xff08;地理信息系统&#xff09;行业蓬勃发展的当下&#xff0c;数据处理与展示的效率和精准度成为关键。GISBox作为一款功能强大的一站式三维GIS数据编辑、转换、发布平台&#xff0c;凭借其独特的“RVT切片器”功能&#xff0c;在RVT图元处理方面也有着不俗的表现…...

Harmony核心:动态方法修补与.NET游戏Mod开发

一、Harmony的核心定位与设计哲学 Harmony是一个运行时动态方法修补库&#xff0c;专为修改已编译的.NET/Mono应用程序而设计&#xff0c;尤其适用于游戏Mod开发。其核心创新在于&#xff1a; 非破坏性修改&#xff1a;保留原始方法完整性&#xff0c;避免直接替换或覆盖。多…...