Mysql之基本架构

news2024/10/5 16:25:05

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: 不支持事务;仅支持表级锁;不支持外键

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

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

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

相关文章

axios案例应用

1、Spring概述 Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层。Spring JDBC 以及业务层事务管理等众多…

C++进阶:C++11(列表初始化、右值引用与移动构造移动赋值、可变参数模版...Args、lambda表达式、function包装器)

C进阶:C11(列表初始化、右值引用与移动构造移动赋值、可变参数模版…Args、lambda表达式、function包装器) 今天接着进行语法方面知识点的讲解 文章目录 1.统一的列表初始化1.1{}初始化1.2 initializer_listpair的补充 2.声明相关关键字2.1a…

STM32——DAC篇(基于f103)

技术笔记! 一、DAC简介(了解) 1.1 DAC概念 传感器信号采集改变电信号,通过ADC转换成单片机可以处理的数字信号,处理后,通过DAC转换成电信号,进而实现对系统的控制。 1.2 DAC的特性参数 1.3…

amis-editor 低代码可视化编辑器开发 和 使用说明

1.amis-editor可视化编辑器 React版本(推荐): GitHub - aisuda/amis-editor-demo: amis 可视化编辑器示例 https://aisuda.github.io/amis-editor-demo 建议使用react版本,好维护,升级版本更新package.json中对应版本…

Property xxx does not exist on type ‘Window typeof globalThis‘ 解决方法

问题现象 出现以上typescript警告,是因为代码使用了window的非标准属性,即原生 window 对象上不存在该属性。 解决办法 在项目 根目录 或者 src目录 下新建 xxx.d.ts 文件,然后进行对该 属性 进行声明即可。 注意:假如xxx.d.ts文…

【vue】封装的天气展示卡片,在线获取天气信息

源码 <template><div class"sen_weather_wrapper"><div class"sen_top_box"><div class"sen_left_box"><div class"sen_top"><div class"sen_city">山东</div><qctc-time cl…

【Text2SQL 经典模型】X-SQL

论文&#xff1a;X-SQL: reinforce schema representation with context ⭐⭐⭐⭐ Microsoft, arXiv:1908.08113 X-SQL 与 SQLova 类似&#xff0c;使用 BERT style 的 PLM 来获得 representation&#xff0c;只是融合 NL question 和 table schema 的信息的方式不太一样&#…

Keil MDK map文件学习笔记

Keil MDK map文件学习笔记 map文件组成1.Section Cross References段交叉引用2.Removing Unused input sections from the image移除无用的段3.Image Symbol Table镜像符号表局部符号表全局符号表 4.Memory Map of the image镜像存储器映射ROM区执行域RAM区执行域 5. Image com…

C#学习指南:重要内容与实用技巧

学习C#编程是一段充满挑战但又非常充实的旅程。以下是我在学习过程中积累的一些经验&#xff0c;希望能对大家有所帮助。 一、掌握基础概念 类及其成员 C#中的类是编程的基础模块。理解类的结构、属性、方法和构造函数是至关重要的。每个类都有其特定的功能&#xff0c;学会如…

Milvus 使用过程中的常见问题集锦

引言 在使用Milvus的过程中&#xff0c;可能会遇到一些常见问题。这些问题可能涉及到配置、查询、数据同步等方面。 常见问题 以下是一些可能遇到的常见问题及其解决方法&#xff1a; 查询结果不正确&#xff1a; 可能原因&#xff1a;Milvus内部缓存与数据不一致&#xff0…

【数据结构】哈夫曼树和哈夫曼编码

一、哈夫曼树 1.1 哈夫曼树的概念 给定一个序列&#xff0c;将序列中的所有元素作为叶子节点构建一棵二叉树&#xff0c;并使这棵树的带权路径长度最小&#xff0c;那么我们就得到了一棵哈夫曼树&#xff08;又称最优二叉树&#xff09; 接下来是名词解释&#xff1a; 权&a…

APISIX-简单使用

APISIX-简单使用 这个工具还是很不错的&#xff0c;可视化的配置很清晰 &#xff0c; 想用NGINX的配置模式也是可以的&#xff0c;就是要去修改配置文件了。 APISIX&#xff0c;一个很不错的可视化工具&#xff0c;用来代替Nginx相当不错&#xff0c;可作为Nginx的平替方案&…

Leecode热题100---45:跳跃游戏②

题目&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。 返回到达 nums[n - 1] 的最小跳跃次数。 思路&#xff1a; 如果某一个作为 起跳点 的格子可以跳跃的距离是 3&#xff0c;那么表示后面…

解耦:哪些方法可以用来解耦代码

目录 1.引用 2.为何解耦如此重要 3.如何判断代码是否需要解耦 4.如何给代码解耦 5.思考题 1.引用 前面我们曾经讲到&#xff0c;重构可以分为大型重构和小型重构。小型重构的主要目的是提高代码的可读性&#xff0c;大型重构的主要目的是解耦。本节讲解如何对代码进行解耦…

用python为目录下的文件生成索引

好久没写文章了。 有一个需求&#xff1a; 我的一个目录下有很多的.html文件&#xff0c; 每个html会包含一些image &#xff0c;但都在各自的目录中。 .html特别多&#xff0c;有好几百个&#xff0c;我需要一个index.hmtl把这些html全部索引起来&#xff0c;使得我一个点击&a…

计算机如何将输入文字显示出来的?渲染Image rendering

1.文字渲染的简单理解 渲染图像&#xff0c;可以理解为用cpu/gpu构造出原本不存在的图像。比如输入计算机的英文字符都是ASCII码&#xff0c;而我们在屏幕上看到显示的字符对应的应该是RGB/YUV的像素。计算机把ASCII字符转化成像素的过程就是文字渲染。又比如我们GPU用多个2D图…

全同态加密生态项目盘点:FHE技术的崛起以及应用

撰文&#xff1a;Chris&#xff0c;Techub News 在当今数字化的时代&#xff0c;隐私保护已成为一个全球性的焦点话题&#xff0c;特别是在加密货币和区块链技术快速发展的背景下。虽然当前的隐私技术在保护数据安全方面多有欠缺&#xff0c;引发了广泛的关注和批评&#xff0c…

如何彻底搞懂装饰器(Decorator)设计模式?

对于任何一个软件系统而言&#xff0c;往现有对象中添加新功能是一种不可避免的实现场景&#xff0c;但这一实现过程对现有系统的影响可大可小。从架构设计上讲&#xff0c;我们也知道存在一个开闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;&#xff0…

中文信息期刊投稿邮箱

《中文信息》杂志是国家新闻出版总署批准的国家级刊物&#xff08;月刊&#xff09;&#xff0c;国内外公开发行&#xff0c;大十六开印刷。本刊主要反映我国中文信息处理的学术水平&#xff0c;重点刊登科技、经济、教育等领域的基础理论、科研与应用技术的学术论文&#xff0…

使用Coding部署项目

coding概述&#xff1a;提供一站式开发协作工具&#xff0c;帮助研发团队快速落地敏捷开发与 DevOps 开发方式&#xff0c;实现研发效能升级 一、创建项目 省略 详细文档&#xff1a;https://g-mnbk6665.coding.net/quickstart 二、SSH连接 关于ssh相关命令 重启SSH服务 s…