【MySQL数据库】四、MySQL服务端架构及工作流程、存储引擎简介

一、MySQL架构及工作流程

(一)架构

开始时我们就说过 MySQL的是C/S架构,即客户端/服务器。使用数据库前,我们需要:

  • 打开服务器,等待客户端连接。
  • 客户端可以使用用户名和密码进行登录。
  • 可以多个客户端同时连接服务器。

那么MySQL服务器的内部是如何处理客户端请求的呢,服务器的架构如下:

在这里插入图片描述

  • 服务器管理模块:管理和控制其他模块。
  • 连接池:处理客户端的请求。
  • SQL API:处理SQL语句。
  • SQL解析器:将SQL语言进行语法,词法分析,编译处理生成二进制语言。
  • SQL优化器:对SQL语句执行指向计划,有N个计划,选择最优的进行执行。
  • 缓存区:为了平衡磁盘和内存的速度,将部分数据放在缓冲区中。每次现在缓冲区中查看数据,没有就利用存储引擎去底层磁盘查找,找到后会将数据网缓存区存放一份,因为局部性原理(系统会经常访问一定范围的数据)。
  • 存储引擎:对底层文件的存储控制,即对底层数据文件的操作方式,对硬盘数据的操作方式;有多种存储引擎,选择哪种,就用怎样的操作方式操作底层数据。
  • file set:磁盘硬件驱动,对磁盘数据进行存取控制。
  • 日志:记录每一步的执行过程,保证事务的一致性,安全性。

(二)工作流程

当客户端连接服务器后,服务器中的处理流程:

  1. 连接池模块,唤醒连接池里连接的模块,处理客户端连接
  2. 服务管理模块,从mysql库中查询是否有对应客户端名称和密码,有,客户端连接成功,没有登录失败
  3. 连接成功后,服务器阻塞等待客户端发送请求。
  4. 假如客户端发送查询语句,连接池接收到数据,进行处理
  5. 进入SQL API,结构化查询语句接口模块,核心处理DDL,DML语句。此时不会进行查询处理,因为机器只识别0,1码,所以进入下一个模块
  6. SQL解析器模块,类似于编译的过程,进行词法分析,语法分析。如果出错,给客户端显示结果,没出错就进入下一个模块
  7. SQL优化器:针对SQL语句进行优化,产生执行计划,即执行流程,可能一条SQL语句产生多条执行计划,最后选择最合适的执行。
  8. 执行SQL语句后,进入缓冲区查找数据,找到直接给客户端。找不到去磁盘中去找。
  9. 当缓冲区找不到时,将查询语句交给某一个存储引擎,存储引擎根据自身对底层文件的操作,在磁盘文件上查找数据,找到后,进行日志记录,将数据给缓冲区放一份,沿着连接结果给客户端。

我们画出流程图,如下:
在这里插入图片描述

二、存储引擎简介

存储引擎:对底层数据的读写操作,基于表。

MySQL是插入式存储引擎的数据库,即存在存储引擎接口,选择不同的存储引擎,对底层数据的操作(读写方式)不同,通过选择使用不同的存储引擎提高MySQL的效率。

(一)常见的四种存储引擎概述

1. MyISAM

Linux版本5.5版本前默认MyISAM存储引擎,以后默认为InnoDB;对在线分析处理操作速度快

  1. 支持全文索引:即支持给vachar,text字段建立索引,不支持外键
  2. 支持表锁:加锁会给一张表加锁,加锁之后,其他行也不能被操作。读锁称为共享读锁,写锁称为独占写锁。
  3. 执行SQL语句时,底层系统自动加锁:select加读锁;insert,delete,update加写锁。
  4. 不支持事务,即不支持回滚操作,当发生错误时,需要程序进行回滚,系统不会自己处理。
  5. 默认B+树索引,将数据和索引分开存储,实现了索引和数据分离,只需要在索引结点存储数据地址就可以找到数据,所以数据可以随机或者离散的分布,将这种称为非聚集索引。
2. InnoDB

Windows默认InnoDB存储引擎,面向在线事务处理方面的应用。

  1. 不支持全文索引,即不能给text,varchar字段加索引。

  2. 支持外键

  3. 默认行锁:给一行数据加锁,不影响其他行,粒度小,支持表锁;读锁:共享锁,写锁:排他锁。

  4. select不加锁,因为SQL语句是一个事务,可以通过事务的隔离性和一致性保证事务并发执行。insert,delete,update操作加写锁。存在超时机制,如果阻塞操作超时,就自动取消此次操作。

  5. 支持事务:一条SQL语句当作一个事务,那么当一个事务执行完成后即遇到SQL语句的分号时,将所有的资源,锁都释放,提供了提交、回滚、崩溃恢复能力的事务安全。

  6. 支持数据缓存。

  7. 默认B+树索引,索引当作数据的一部分,数据存储在索引上,也就是说要存储数据,必须要有索引的存在,没有主键,没有唯一键,为每一行生产一个6字节的行id,作为主键。索引结构决定了数据范围,将此称为 聚集索引

3. MEMORY

内存存储引擎,数据在内存中存储,不支持存储大数据。

  1. 数据不安全,断电数据丢失
  2. 把varchar当作char类型处理,浪费内存,但是速度快了
  3. 不支持text(大文本字段),BLOB(图片字段),太大了
  4. 用来 存储临时表,作为临时使用,如果临时表中存在text字段,那么系统会将text字段用MyISAM存储引擎在磁盘中存储,其他字段MEMORY存储引擎处理。这样还需要建立内存和磁盘的关系,所以尽量不要使用text字段。
  5. 默认哈希索引,可以使用B+索引

RAM(random access memory)即随机存储内存,这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使zhi用的程序。ROM(Read-Only Memory)即只读内存,是一种只能读出事先所存数据的固态半导体存储器。RAM和ROM分别对应电脑的内存和硬盘,所以 MEMORY存储器类似于RAM随机存储内存。

4. ARCHIVE

归档/压缩存储引擎,以1:10的比例进行压缩那么查询时需要解压,耗费时间长,适用于数据量大,查询少的数据,如日志数据(记录程序的每一步执行流程,结果等)

  1. 只支持insert,select操作,不支持update,delete,因为耗费时间太大了。
  2. 主要提供插入和压缩功能

(二)四种存储引擎的对比

一张表对四种存储引擎进行总结:

功能MyISAMMemoryInnoDBArchive
存储限制(一张表)256TBRAM64TBNone
支持事务
支持全文索引
支持数(树)索引
支持哈希索引
支持数据缓存不相关N/A
支持外键
  • MyISAM一般管理非事务表;数据文件和索引文件存放位置不同,具有全文搜索的能力,可以提供高速存储和检索,插入和查询速度快。
  • InnoDB用于事务处理表,支持ACID事务,提高乐具有提交,回滚和崩溃恢复能力的事务安全;和MyISAM存储引擎队医,效率差一点,需要占用更多的磁盘空间来保存数据和索引。
  • Memory数据存放在内存中,数据量小,速度快。一般用于存储临时数据,即中间结果。
  • Archive支持高并发的插入操作,只支持插入,查询操作,具有压缩机制,所以非常适合存储数据量大,查询小的数据,如日志。

(三)存储引擎的操作

【1. 查看存储引擎:】

show engines;

在这里插入图片描述

Support列的含义: YES表示支持,NO表示不支持,DEFAULT表示当前数据库版本默认的存储引擎。

【2. 建表时设置存储引擎:】

create table test (name char(10),age int) engine = myisam;

在这里插入图片描述

【3. 修改一个表的存储引擎:】

alter table test engine = innodb;

在这里插入图片描述

加油哦!🍚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值