MySQL | MySQL存储引擎 | MySQL服务器的体系

目录

一.MySQL存储引擎——插件式存储引擎

1.什么是插件式存储引擎

2.MySQL插件式存储引擎的体系结构

二.MySQL服务器的体系

1.连接池模块

2.SQL API模块->SQL解析器->SQL优化器

3.驱动程序

4.日志

5.存储引擎针对于数据的控制方式

6.MySQL中主要的存储引擎

7.总结


一.MySQL存储引擎——插件式存储引擎

1.什么是插件式存储引擎

在MySQL 5.1中,MySQL AB引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运行的MySQL服务器中。使用MySQL插件式存储引擎体系结构,允许数据库用户为特定的应用需求选择专门的存储引擎,完全不需要管理任何特殊的应用编码要求。不同的存储引擎具有不同的能力,应用程序是与之分离的。

2.MySQL插件式存储引擎的体系结构

二.MySQL服务器的体系

1.连接池模块

当用户链接服务器时,用户端只需一个socket(套接字)就可以主动的链接到服务器端 ,当连接成功后,客户端只需要使用将用户编写的SQL语句发送给服务器端即可(内核上是通过send函数实现的)。所以,在C/S体系中将极大一部分的内容都交给了服务器来处理。因此,如果想要更深的了解MySQL的运转原理,就要对MySQL的服务器有着深刻的了解。

当用户在Linux系统上使用MySQL时通过执行语句 service mysqld start 来开启服务器端,接着通过命令 mysql -u -h -p 来连接到服务端,当服务器接收到链接请求后,首先通过user表来查询要建立链接的用户名是否存在于user表中

  • 如果匹配成功就可以建立连接
  • 如果匹配失败就将这次的链接拒绝掉。

这一步骤是由服务器中的连接池模块来完成的当连接成功后,服务器会请求一个服务管理模块,让服务管理模块从MySQL数据库中拿到用户的数据信息来进行匹配。

2.SQL API模块->SQL解析器->SQL优化器

当用户发送一条SQL语句(例如一条select语句)时,服务器会通过SQL API这个模块来处理,SQL API这个模块主要用来处理DML 和 DCL 语句。当 SQL API拿到这个语句稍作处理后会将这条语句交给下一个模块,即SQL解析器模块。SQL解析器会进行类似于 词法分析和语法分析的过程,如果这条SQL语句没有任何问题,SQL解析器会将这条语句交给下一个模块,即SQL优化器模块。SQL优化器会根据当前的SQL语句进行优化,接着制定N种执行计划,最终选择一个最合适的执行计划,并根据该执行计划来执行。

3.驱动程序

我们知道,此时的服务器存储在内存中,而用户要查询的数据存储在磁盘当中,为了将数据从磁盘加载到内存中且最大程度的避免I/O差异,一般会在内存和磁盘之间加一个缓存,服务器首先在缓存中查找数据,如果缓存中不存在要查找的数据 ,就要在通过驱动程序(针对硬件的操作程序)来在磁盘中查找,这些驱动程序规定了磁盘中存取数据的方式。由多个驱动程序组成的模块被称为存储引擎,多个驱动程序就提供了多个针对底层数据文件的控制方式。 当服务器找到要相关的数据后,会将这些数据再回交给SQL API模块,由SQL API将这些数据通过已经建立的链接返还给客户端。

4.日志

针对于数据的每一次操作都会有记录产生。这些记录的集合就被称为日志。

5.存储引擎针对于数据的控制方式

存储引擎针对于数据的控制方式主要分为以下几点:

  1. 读取
  2. 存储

6.MySQL中主要的存储引擎

1.MyISAM存储引擎(把数据放在磁盘上)

  • 不支持外键
  • 支持全文索引
  • 支持索引(底层为一个B+树)
  • 不支持事务
  • 支持表锁

2.InnoDB存储引擎(把数据放在磁盘上)

  • 支持外键
  • 不支持全文索引
  • 支持索引(底层为一个B+树)
  • 支持事务
  • 行锁

3.MEMORY存储引擎(把数据放在内存上)

存放的是临时数据,将这些临时数据合并到一张临时表上。并且将varchar当成char类型的数句来处理

  • 支持索引(底层为B-树,或哈希,默认为哈希)
  • 不支持text(大文本类型)和BLOB(图片类型)类型的字段,如果存储了该类型的字段,MEMORY存储引擎就会将这类型的字段存放在MyISAM存储引擎。

4.ARCHIVE存储引擎(归档存储引擎)

数据会以10:1的比例进行压缩,压缩后再进行存储。这些数据一般都是日志数据,因为日志的数据量大,访问少。不支持updata和delete操作,因为这两种操作针对与压缩后的数据来说效率太低,他只支持insert和select操作。

7.总结

索引简单的来讲就是一组特定语句的集合。全文索引是索引的一种。

事务简单的来讲就是一组特定语句的集合。

事务具有以下4个属性:

  1. 原子性:一个事务是一个不可分割的工作单位,事务中包括的操作要么都做(某个语句的集合要么全部执行成功),要么都不做(某个语句的集合要么全部执行失败)。如果某一步执行失败了,事务就会回滚到语句执行前的状态。
  2. 一致性:完整性约束,数据完整性约束指的是为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。
  3. 隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  4. 持久性:事务执行的结果在磁盘上永久的保存,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

这四个属性通常称为ACID特性

表锁:当服务器对某张表进行数据查询时,会对这张表添加一个锁(如果此时执行的是select那么加的锁就是读锁),在此期间,其他任何线程都不能访问这张表。如果另一个链接执行的是updata操作,那么他就要加写锁,但此时这张表已经被加上了读锁,因此就不能再加写锁了,直到读锁被释放,updata操作才能被执行。缺点:效率太低。

行锁:只对表中的某一行数据加锁,不影响该表中的其他数据。

发布了88 篇原创文章 · 获赞 40 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ThinPikachu/article/details/105345442