美文网首页
Mysql高级(一) 系统架构与存储引擎

Mysql高级(一) 系统架构与存储引擎

作者: 卡戎li | 来源:发表于2020-05-02 17:27 被阅读0次

一、MySQL的逻辑架构

图片.png

MySQL架构总共三层,在上图中以虚线作为划分。
  首先,最上层的服务并不是MySQL独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如:连接处理、授权认证、安全等。
  第二层的架构包括大多数的MySQL的核心服务。包括:查询解析、分析、优化、缓存以及所有的内置函数(例如:日期、时间、数学和加密函数)。同时,所有的跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
  第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。服务器通过API和存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明化。存储引擎API包含十几个底层函数,用于执行“开始一个事务”等操作。但存储引擎一般不会去解析SQL(InnoDB会解析外键定义,因为其本身没有实现该功能),不同存储引擎之间也不会相互通信,而只是简单的响应上层的服务器请求。

二、Mysql 系统架构图

图片.png

首先,我们对该图中的各个模块做一简单介绍:
1、Connectors
  指的是不同语言中与SQL的交互。
  
2、Connection Pool
  管理缓冲用户连接,线程处理等需要缓存的需求。负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信,接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。

3、 Management Serveices & Utilities
  系统管理和控制工具。

4、 SQL Interface
  接受用户的SQL命令,并且返回用户需要查询的结果。
  
5、 Parser
  SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。在 MySQL中我们习惯将所有 Client 端发送给 Server 端的命令都称为 query ,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后,会直接将该 query 传递给专门负责将各种 Query 进行分类然后转发给各个对应的处理模块。
主要功能:
  a 、 将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的;
  b、 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的。

6、 Optimizer
  查询优化器:SQL语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端请求query,根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果。
  使用的是“选取-投影-联接”策略进行查询:
用一个例子就可以理解: select uid,name from user where gender = 1;
这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤;然后根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤。最后将这两个查询条件联接起来生成最终查询结果。

7 、Cache和Buffer
  查询缓存:主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做一个对应。该 query 所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。
  如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等。

8 、存储引擎接口
  MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。
注意:存储引擎是基于表的,而不是数据库。

三、Mysql存储引擎

show engines


图片.png

show variables like "%storage_engine%"


图片.png

3.1 InnoDB

Supports transactions, row-level locking, and foreign keys
mysql5.5以后默认的存储引擎。

  • 特性:
    是一种事务性存储引擎。完全支持事务的ACID特性。执行行级锁,并发程度高。Redo Log和Undo Log。

  • 适用场景:
    大多数的OLTP(联机事务处理)应用。

3.2 MyISAM

MyISAM storage engine
mysql5.5之前默认的存储引擎。

  • 特性
    a、并发性与锁级别-表解锁
    b、支持全文索引
    c、支持数据压缩 命令:进入到mysql的bin文件夹, .\myisampack.exe -b -f "需要压缩的test.MYI地址" (此命令实在Windows运行)。
    d、运行完以后,会出现一个以OLD结尾的文件,删除OLD可能会出现问题。需要恢复 CHECK table 表名,REPAIR table 表名

  • 适用场景:
    a、非事务的类型
    b、只读类应用,读取数据的速度快
    c、空间类型(坐标,空间函数)

3.3 InnoDB VS MyISAM

对比项 MyISAM InnoDB
外键 不支持 支持
事务 不支持 支持
表锁(不适合高并发) 行锁(适合高并发)
关注点 性能 事务
表空间
缓存 缓存索引,不缓存真实数据 缓存索引和真实数据,对内存要求较高

四、其它Mysql分支

淘宝目前使用的是Percona 5.5.18](http://mysql.taobao.org/index.php?title=Patch_source_code),而Google\Wikipedia则站在了MariaDB这边。

图片.png

相关文章

网友评论

      本文标题:Mysql高级(一) 系统架构与存储引擎

      本文链接:https://www.haomeiwen.com/subject/yuskghtx.html