MySQL的体系架构

news2024/11/15 23:01:53

在这里插入图片描述

文章目录

  • 前言
  • MySQL的Server层
  • MySQL的存储引擎
    • 1)InnoDB 存储引擎
    • 2)MyISAM 存储引擎
    • 3)Memory 存储引擎

前言

在学习一种事务之前,我们需要先了解事物的基本组成结构,清楚了事物的基本组成结构之后,我们才能更深入的了解相关操作,那么今天我将为大家介绍MySQL的体系架构。

在这里插入图片描述
MySQL数据库的服务端主要分为Server层和存储引擎层,接下来我将以这两层为着重点为大家介绍MySQL的体系架构。

MySQL的Server层

MySQL的Server层照顾要有七个组件:

  1. MySQL 向外提供的交互接口(Connectors)
  2. 连接池组件(Connection Pool)
  3. 管理服务组件和工具组件(Management Service & Utilities)
  4. SQL 接口组件(SQL Interface)
  5. 查询分析器组件(Parser)
  6. 优化器组件(Optimizer)
  7. 查询缓存组件(Query Caches & Buffers)

1)MySQL向外提供的交互接口(Connectors)
Connectors 组件是 MySQL 向外提供的交互组件,如Java,.NET,PHP等语言可以通过该组件来操作 MySQL 语句,实现与 MySQL 的交互。建立连接之后,可以通过show processlist 语句来查看已经建立的连接。
在这里插入图片描述
如果客户端一段时间内没有活跃行为,那么连接器在默认的8个小时后会主动断开连接。加果在连接被断开之后,客户端再次发送请求的话,就会收到一个错误提醒:Lost connection to MySQL server during query。

客户端连接到MySQL数据库上时,根据连接时间的长短可以分为:短连接和长连接。短连接比较简单,指每次查询之后会断开,再次查询需要重新建立连接,因此使用短连接的成本较高;长连接指长时间连接到MySOL数据库上并执行数据库操作,因此长连接会导致出现内存溢出的问题从而使MySQL异常重启。

在使用长连接时,可以使用客户端函数mysql_reset_connection()来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

2)连接池组件(Connection Pool)

负责监听客户端向MySQL服务器端的各种请求,接收请求、转发请求到目标模块。每个成功连接MySQL服务器端的客户请求都会被创建或分配一个线程,该线程负责客户端与MySQL服务器端的通信,接收客户端发送的命令,传递服务器端的结果信息等。

3)管理服务组件和工具组件(Management Service &Utilities)

提供对MySOL的集成管理,如备份(Backup)、恢复(Recovery)、安全管理(Security)等。

4)SQL接口组件(SQL Interface)

接收用户SQL命令,如DML、DDL和存储过程等,并将最终结果返回给用户。

5)查询分析器组件(Parser)

系统在执行输入语句之前,必须分析出语句想要干什么。例如:首先通过select关键字得知这是一条查询命令,还包括分析要查询的是哪张表以及查询条件是什么。同时,分析器必须分析输入语句的语法正确性。如果SQL中存在语法的错误,则查询分析器组件将返回提示信息“You have an error in your SQL syntax”。

6)优化器组件(Optimizer)

优化器是MySQL用来对输人语句在执行之前所做的最后一步优化。优化内容包括:是否选择索引、选择哪个索引、多表查询的联合顺序等。每一种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一种方案。

7)查询缓存组件(Query Caches & Buffers)
这个查询缓存是比较容易理解的。在每一次查询时,MySQL 都先去看看是否命中缓存,命中则直接返回,提高了系统的响应速度。但是这个功能有一个相当大的弊病,那就是一旦这个表中数据发生更改,那么这张表对应的所有缓存都会失效。

对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非业务系统就只有一张静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。所以在生产系统中,建议关闭该功能。

在MySQL8.0版本之前,可以通过将参数“query_cachetype”设置成OFF,来关闭查询缓存的功能。但是在MySQL8.0版本之后,直接删掉了这部分的功能。

show variables like '% query_cache% ';

MySQL的存储引擎

MySQL 存储引擎层负责数据的存储和提取,其架构模式是插件式的,支持InnoDB、MyISAM、Memory、Archive、NDB Cluster等多个存储引擎。最常用的是InnoDB,我将为大家详细介绍InnoDb、MyISAM 和 Mymery 存储引擎。

我们可以使用 show create table 表名; 来查看创建表时使用的存储引擎。

 create table test (id int);
 show create table test;

在这里插入图片描述

1)InnoDB 存储引擎

InnoDB是MySQL的默认存储引擎,它支持ACID(原子性、一致性、隔离性和持久性)事务,并提供了行级锁定、外键约束和崩溃恢复等功能。它适用于大多数应用场景,特别是需要事务支持和高并发读写操作的应用。

它具有以下特性:

  1. 事务支持:InnoDB引擎支持事务的ACID属性,确保了数据的原子性、一致性、隔离性和持久性。这意味着可以使用BEGIN、COMMIT和ROLLBACK语句来管理事务,保证数据的完整性和一致性。
  2. 行级锁定:InnoDB使用行级锁来处理并发访问和修改数据,而不是表级锁。这意味着多个事务可以同时访问同一表的不同行,提高了并发性能和并发控制。
  3. 外键约束:InnoDB支持外键约束,可以在数据库层面实现数据的一致性和完整性。它提供了CASCADE、RESTRICT和SET NULL等选项来处理外键关系。
  4. 崩溃恢复:InnoDB具有崩溃恢复的能力,即使在系统崩溃或电源故障的情况下,也可以保证数据的完整性。它通过事务日志(redo log)来恢复未完成的事务和恢复已提交的事务。
  5. 自动增长列:InnoDB支持自动增长列,可以为表中的某一列指定自动递增的整数值,简化了数据插入操作。
  6. 回滚段:InnoDB通过回滚段(Rollback Segment)来存储未提交事务的数据,以便在需要时进行回滚操作。
  7. 可以在线热备份:InnoDB引擎支持在线热备份,可以在不停止MySQL服务器的情况下备份数据库。
  8. 支持MVCC(多版本并发控制):InnoDB使用多版本并发控制来处理并发事务,在读操作的同时允许写操作,并通过行版本来实现数据的隔离性和一致性。
  9. 高性能:InnoDB引擎通过使用缓冲池(Buffer Pool)来缓存热门数据和索引,提高读取数据的性能。

2)MyISAM 存储引擎

MyISAM是MySQL的另一个常见的存储引擎,它不支持事务和行级锁定,但具有良好的性能。MyISAM适用于主要是读取操作的应用,如数据仓库、归档和非事务性的应用。

它具有以下特性:

  1. 快速读取速度:MyISAM存储引擎在读取数据时非常高效,对于主要是读取操作的应用性能表现较好。这是因为MyISAM表以表级锁定的方式处理并发,读操作可以并发执行,不会有行级锁定带来的争用。
  2. 支持全文索引:MyISAM存储引擎对全文索引提供了良好的支持,可以通过创建全文索引提供高效的文本搜索能力。
  3. 节省磁盘空间:相较于InnoDB存储引擎,MyISAM通常在磁盘占用方面更加节省空间,这是因为它不支持事务、行级锁定和崩溃恢复等功能,减少了存储额外的元数据和日志。
  4. 表级锁定:MyISAM存储引擎使用表级锁定,这意味着一个写操作锁定整个表,因此在写操作频繁的情况下可能会导致并发性能下降。
  5. 不支持事务和外键:MyISAM存储引擎不支持事务操作,也不支持外键约束。这意味着在使用MyISAM时,你无法使用BEGIN、COMMIT和ROLLBACK等事务操作,也无法定义外键约束来维护数据的完整性。
  6. 不支持崩溃恢复:MyISAM存储引擎没有崩溃恢复的能力,这意味着如果MySQL服务器在写操作过程中崩溃,可能会导致数据的不一致。
  7. 自动维护索引统计信息:MyISAM存储引擎会自动维护表的索引统计信息,这些统计信息用于优化查询执行计划。
  8. 多用途:MyISAM存储引擎适用于主要是读取操作的应用场景,如报表、日志分析和静态网站等。

我们可以在创建表的时候指定存储引擎。

create table 表名 (     ) engine = 存储引擎名
 create table test1 (id int) engine = myisam;
 show create table test1;

在这里插入图片描述
正是因为 MyISAM 存储引擎的这些特性,它适合于以下场景:

  1. 不需要事务支持的场景
  2. 读多或者写多的单一业务场景,读写频繁的则不合适
  3. 读写并发访问较低的业务
  4. 数据修改相对较少的业务
  5. 以读为主的业务
  6. 对数据的一致性要求不是很高的业务
  7. 服务器硬件资源相对比较差的环境

3)Memory 存储引擎

Memeory 存储引擎将表中的数据存储在内存中,而不是磁盘上,也就是说如果重启MySQL 或者关闭,此时的数据将会丢失。

create table test2 (id int,name varchar(20)) engine = memory;
show create table test2;
insert into test2 values (1,'zhangsan');
select * from test2;

在这里插入图片描述

# 重启MySQL
systemctl restart mysqld
select * from test2;

输出信息

Empty set (0.00 sec)

Memory 存储引擎具有以下特点:

  1. 高速读写:由于数据存储在内存中,Memory 存储引擎提供非常快速的读取和写入性能。相比于其他存储引擎,它可以更快地执行查询和写入操作。
  2. 临时数据和缓存表:由于数据存储在内存中,Memory 存储引擎对于处理临时数据和缓存表非常有效。如果你需要在查询过程中创建一些临时数据,并且它们在查询结束后不再需要,那么 Memory 引擎是一个不错的选择。
  3. 高速缓存索引:Memory 存储引擎对索引查询非常快速,因为索引数据完全存储在内存中,减少了磁盘I/O的开销。
  4. 不持久化:Memory 引擎的数据不会持久化到磁盘上,一旦 MySQL 服务器重启或关闭,存储在 Memory 引擎中的数据就会丢失。因此,Memory 存储引擎适合于处理非持久化的数据,并且可以在服务器重新启动后重新加载数据。
  5. 适用于小规模数据:由于数据存储在内存中,Memory 存储引擎的容量受限于可用的内存大小。它不适合用于处理大规模数据集,因为内存可能会成为限制因素。
  6. 不支持事务和崩溃恢复:Memory 存储引擎不支持事务,也不支持崩溃恢复。因此,在使用 Memory 存储引擎时需要注意数据的一致性和持久性。

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

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

相关文章

QCC51XX---chain是什么?

QCC51XX---系统学习目录_嵌入式学习_force的博客-CSDN博客 高通的DSP对很多人来说还是比较难以理解与操作的,DSP里最基本的是要认识音频的处理链路,也就是平台中的chain。他是由多个模块(operator)连接起来的,连接的方法sink和earbud有些不同,这里会从6.x开始sink的chain…

shell判断程序是否运行

一、需求 服务部署在linux上,要求服务器上的服务可以一直保持正常运行 二、问题 在linux上部署的微服务,不知道什么原因过一段时间就自己停掉了,无法启动。 三、解决办法 添加angle守护进程,通过定时执行脚本来判断程序是否运行…

AI 绘画 - 建筑绘图辅助设计之模型训练

前情提要 2023-06-18 周日 杭州 小雨 小记: 昨天搞的好累,10点左右就想着先躺一会儿,然后就睡过去了,很奇怪,如果进行 AI 绘画,晚上就会做很奇怪的梦,说不上来的那种感觉,就是莫名的不舒服。 …

微信怎么能自动回复?

有些小伙伴可能有多个微信号来进行业务活动,一天收到的信息太多,眼花缭乱,回复不过来,就想在微信可不可以有个自动回复消息,就可以通过自动回复引导用户看到想让他们看到的。这样就可以降低工作量的同时,提…

Hive Metastore 表结构

Hive MetaStore 的ER 图如下。 部分表结构和说明。 CTLGS(CATALOGS) catalogs 可以隔离元数据。默认只有1行。一个 CATALOG 可以有多个数据库。 mysql> DESC CTLGS; -------------------------------------------------------- | Field | Type | Null |…

判断关系属于哪一种范式(期末考试必看)

1NF(第一范式) 属性值是不可分的原子值 2NF(第二范式) R1NF,每个非主属性都完全函数依赖于R的候选键 3NF(第三范式) R1NF,每个非主属性都不传递依赖于 R的候选键 BCNF(BC…

ubuntu修改主机名和用户名

参考文章: https://blog.csdn.net/fkmmmm/article/details/127333212 一、修改主机名 sudo vi /etc/hostname2、 sudo vi /etc/hosts3、 sudo reboot二、修改用户名 1、修改所有原用户名(如果文件内没有原用户名则不用改 sudo vi /etc/sudoers 2、 s…

【C++11】 包装器 | bind

文章目录 1. 包装器概念理解用法成员函数的包装静态成员函数非静态成员函数 2. bind概念理解功能1 调整参数顺序 (用处不大)功能2 调整参数个数 1. 包装器 概念理解 function包装器 也被叫做 适配器 C11中function本质是类模板,也是一个包装器 意义在于 对可调用…

LeetCode-69. x 的平方根

LeetCode-69. x 的平方根 1、题目描述2、解题思路3、代码实现4、解题记录 ) 1、题目描述 题目描述: 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 示例1&a…

【裸机开发】I2C 通信接口(二)—— I2C 寄存器解析

目录 一、硬件原理图分析 二、IO 复用寄存器解析 三、I2C 寄存器解析 3.1 时钟配置 3.2 I2C1_IADR(设置从机地址) 3.3 I2C1_IFDR(设置分频值) 3.4 I2C1_I2CR(I2C使能、中断控制) 3.5 I2C1_I2SR…

不知道校园跑腿项目如何运营?那就先看看这份运营指导方案!

当大学生在校创业,其实并不与课业学习矛盾。相反,大学生可以抓住校园市场,利用校园这一具有自然地理优势的封闭市场,深入培育师生客户的需求,进入校园市场的蓝海,在不耽误学习的情况下有一个良好的收入来源…

AIGC-midjourney系列1-制作自己的证件照,卡通照

1 账号 淘宝购买共享账户 2 新建服务器 3 添加midjourney机器人 4 添加insightface机器人 在服务器聊天框输入并发送 https://discord.com/oauth2/authorize?client_id1090660574196674713&permissions274877945856&scopebot点击链接 5 insightface使用 使用…

cf 比赛 03

2021.04.28 训练地址 B. Bananas in a Microwave 题意:一开始的时候手里的数是0 这个题一开始想复杂了. 其实很简单. 我们想一个性质,我们用背包dp做这个题,从大到小枚举体积 j. 然后状态转移是从前往后推(不是之前的那个找前驱…

记录 windows11 qemu安装 麒麟操作系统的经历

因为本人供职的公司,要求国产化环境很多的软件,同时为了方便docker部署, 所以开启了 qemu虚拟aarch64环境的经历,用的软件如下: 有需要的私信,存在了,阿里云盘,百度云盘没有会员就是…

大厂面试测试岗,你一个很小的错误就能让你被淘汰

背景介绍 前后参加过几家互联网公司的测试开发岗位面试,其中两次百度的面试,一次止步三面,另一次止步于四面。这里就主要总结一下百度的面试经历和心得体会。总体感觉百度的面试官比较注重基础,问题不难但是覆盖范围比较全面。相…

栈,栈帧Stack Frames和函数调用过程Control Flow

栈其实就是计算机系统内存中的一小块。栈是一块特殊的内存区域,栈在内存中的增长方向是向低地址扩展,%rsp寄存器存储栈的最低地址,即栈顶元素的地址。这种栈结构在程序中的应用有助于实现函数调用、局部变量的管理以及递归等功能。 Push和Pop…

Blazor 自定义可重用基础组件之 CheckBox

Blazor 原生提供的基础组件实在是一言难尽&#xff0c;这给许多Blazor UI公司很多机会。可是试用了不少如AntDisgen、BootstrapBlazor等&#xff0c;总会有一些难尽如意的地方。还是自己做丰衣足食吧。 首先是带Label的CheckBox&#xff0c;代码如下&#xff1a; <p><…

HTML5开发工程师岗位的职责说明文(合集)

HTML5开发工程师岗位的职责说明文1 职责&#xff1a; 1、根据产品设计文档和视觉文件&#xff0c;利用HTML5&#xff0c;Javascript相关技术实现web端的界面效果、交互和功能; 2、基于HTML5.0的标准进行页面制作&#xff0c;编写可复用的用户界面组件; 3、负责分析和解决前端…

30多个小程序一键发布——miniprogram-ci

概述 miniprogram-ci 是从微信开发者工具中抽离的关于小程序/小游戏项目代码的编译模块。 开发者可不打开小程序开发者工具&#xff0c;独立使用 miniprogram-ci 进行小程序代码的上传、预览等操作。 miniprogram-ci 从 1.0.28 开始支持第三方平台开发的上传和预览&#xff0…

[DBT-05509] Failed to connect to the specified database (orcl).

同事在arm上测试19c部署时&#xff0c;发截图给我说dbca建库有告警&#xff0c;无法进行&#xff0c; Cause- OS Authentication might be disabled for this database (orcl). Action Specify a valid sysdba user name and password to connect to the database. 查找到的…