设计一个关系型数据库学习 MySQL 的整体架构之前,我们先了解一下如何设计一个关系型数据;我们设计数据库的时候,主要需要考虑两个核心内容,第一个是数据的存储位置【磁盘或固态硬盘等】,第二个是提供程序实例,操作相应的数据
其中最重要的是如何设计操作数据的程序,具体设计如下图
MySQL 整体架构分为三层,分别是【客户端层】、【服务层】、【存储引擎层】;下面将分别介绍各个层级的作用
MySQL 体系结构客户端层
任何系统都要提供对外服务的接口,MySQL 也不例外;这一层代表了各种可以通过 MySQL 连接协议连接到 MySQL 的客户端。
这一层主要完成的是连接的处理、授权认证、安全等功能。【验证账户、密码、HostName】
每个连接到 MySQL 的客户端都会在服务器的进程中拥有一个线程,这个连接的查询只会在这个登陆的线程中执行。
我们常用的客户端有 Java 、PHP、JDBC、ODBC等
1)连接处理
当一个客户端向服务端发送连接请求后,MySQL 服务器 会从线程池中分配一个线程来和客户端进行连接,以后该客户端的请求都会被分配到该线程上。MySQL Server为了提高性能,提供了线程池,减少了创建线程和释放线程所花费的时间。
2)用户鉴权
当客户端向MySQL服务端发起连接请求后,MySQL server会对发起连接的用户进行鉴权处理,MySQL鉴权依据是: 用户名,客户端主机地址和用户密码
3)安全
当客户连接到MySQL server后,MySQL server会检测用户有哪些可执行的权限
服务层
大多数的MySQL 核心服务都在这一层,包含有连接管理组件、查询缓存组件、查询解析器组件、查询优化器组件、SQL 接口定义组件、系统管理组件。系统所有的跨存储引擎层的功能都是在这一层实现的,因为这一层被称为 MySQL 服务器,这一层实现了所有与存储引擎无关的特性;
所谓与存储引擎无关的特性是指:诸如我们的SELECT
语句,他对于所有的存储引擎来说,都是获取数据,并依据我们的条件语句过滤数据,并显示给用户,这个SELECT
的接口定义是在我们的服务层,但是具体如何从文件中获取数据,完全取决于存储引擎层的实现
1)查询缓存
缓存查询的数据
2)查询解析器
通过检查SQL查询中的每个字符来检查SQL语法,并为每个SQL查询生成SQL_ID,如果语句语法有错误,则返回相应的错误信息。语法检查通过后,解析器会查询缓存,如果缓存中有对应的语句,就直接返回结果不进行接下来的优化执行操作。
3)查询优化器
根据存储引擎创建有效的查询执行计划。它将重写一个查询。例如:InnoDB共享缓冲区,优化器将从它得到预缓存的数据。使用表统计信息优化器将为SQL查询生成执行计划。它的作用主要是对查询语句进行优化,包括选择合适的索引,数据的读取方式。
4)SQL接口组件
接收 SQL 进行处理,得到用户所需要的结果,通过包含DDL、DML、存储过程【不用】、触发器等
5)系统管理组件
提供【数据库备份和恢复】、【数据库安全管理,如用户及权限管理】、【数据库复制管理】、【数据库集群管理】、【数据库分区,分库,分表管理】
存储引擎
存储引擎的主要功能是存储数据、为存储的数据建立插入、删除、修改、查询的功能
后续会单独分析 MySQL 常用的存储引擎 MyISM、Inndb
网友评论