MySQL探秘之旅:总体架构介绍

欢迎关注微信公众号:互联网全栈架构

自从《吃透Redis系列》阅读量屡创新高之后,更加坚定了创作技术系列文章的决心,从而让朋友们获得更加体系化的知识。当然,这是一件非常不容易的事情,让每篇文章都能单独成篇且质量上乘,同时,把它们连起来以后又能构成一个体系,着实困难。但不管如何,我觉得这样的方向和做法没有问题,应该会受到大家的欢迎,那就迎难而上。

上次做了一个统计,相对来说,大家对于MySQL的文章比较期待,具体投票情况参见:承蒙厚爱,继续努力。而且,MySQL的重要性非常高,不管是大型公司还是小型企业,不论是互联网还是传统软件公司,几乎都会使用MySQL来存储关键的数据信息,即使不是MySQL而是其他的关系型数据库,掌握MySQL的知识也会非常有帮助,因为很多数据库的技术都是相通的,甚至有些数据库的设计和使用都与MySQL高度相似。

基于此,接下来我就开始写一写MySQL的系列文章。然而,MySQL的知识点非常多,其中有很多还比较复杂,写出来需要耗费大量的时间和精力,所以请朋友们多多支持,多多转发、点点在看、点点赞。

在体系化学习一门技术以前,我们需要对它的架构有一定的了解,从而有一个宏观的总体性把控。作为世界上最流行的开源数据库,有很多原因促成了MySQL在全世界的普及,但其中一个主要原因就是它的架构:

MySQL探秘之旅:总体架构介绍_第1张图片

从上图可以看出,MySQL的逻辑架构主要分以下四层:

      • 连接层

      • 核心服务层

      • 存储引擎层

      • 数据存储层

一、连接层

该层位于MySQL架构的最上层;可以在很多客户端-服务器的架构中看到同样的这一层。这层包括对于大多数据客户端-服务器应用都通用的服务,比如:连接处理,认证,安全。

连接处理:

当一个客户端连接服务器的时候,服务器会为其分配一个连接处理线程。来自这个客户端的所有查询都在特定的线程里进行处理。此线程被服务器缓存,所以不需要对每一个新连接都进行创建和销毁的操作。

认证:

每当一个客户端连接MySQL服务器的时候,服务器都会执行认证。认证基于主机、用户、密码。比如:

root@localhost: 客户端用户名

localhost:主机名,请求从这里发起

安全:

客户端连上MySQL服务器以后,服务器会检查客户端是否有权限发起特定的请求。比如:

mysql> show privileges \G
*************************** 1. row ***************************
  Privilege: Alter
  Context: Tables
  Comment: To alter the table
*************************** 2. row ***************************
  Privilege: Alter routine
  Context: Functions,Procedures
  Comment: To alter or drop stored functions/procedures

二、核心服务层

该层处理MySQL关系型数据库管理系统的所有逻辑功能。MySQL服务器的大脑就位于这一层。MySQL的逻辑层分成多个子部件,包括:MySQL服务和工具,SQL接口,SQL解析器,优化器,缓存。

MySQL服务和工具:

MySQL提供了广泛的服务和工具。这是MySQL盛行的主要原因之一。该层提供了MySQL系统管理和维护的服务与工具。比如:备份&恢复,安全,复制,集群,分片,工作台。

SQL接口:

结构化查询语言(SQL)是一种查询语言,主要用于数据库查询和程序设计,它是一种MySQL用户和服务器交互的工具。SQL接口中一些组件:数据操纵语言(DML),数据定义语言(DDL),存储过程,视图,触发器。

解析器:

MySQL解析查询以便创建一个内部结构(解析树)。MySQL解析器是一种单通道的编译器。按照《MySQL内幕》所描述,解析器的结构如下:

    • 词法分析(从一个字符流中生成词语或者标记),当解析常规语句的时候,它是在第一阶段实现的。

    • 语法分析(生成句子),语义分析(确保这些句子都讲得通),以及代码生成(为编译准备),所有这些都是在代码阶段一次性完成的。

优化器:

创建了内部解析树之后,MySQL运用了多种优化技术。这些技术可能包括,查询重写,扫描表的顺序以及选择合适的索引。实际上你可以询问服务器来解释优化的多个方面。比如:

EXPLAIN SELECT * FROM world.city;

缓存:

MySQL缓存(查询缓存)保存了SELECT语句的完整结果集。在解析查询之前,MySQL服务器先找查询缓存。如果客户端发起的查询与缓存中的完全一致,服务器就简单地跳过解析、优化甚至执行,它直接就从缓存中把输出显示出来。

三、存储引擎层

可插拔式存储引擎的特点让MySQL很独特,也让它变成了大多数开发者的首选。存储引擎负责数据的抽取和存储,服务器通过接口与存储引擎进行通信。不同的存储引擎提供不同的锁机制、事务、索引等功能,它们都有各自的优缺点和相应的适用场景。InnoDB是默认的也应用最广泛的存储引擎。MySQL支持的存储引擎主要有:MyISAM, InnoDB, Federated, CSV, Memory等。

最后一层是数据存储层,它是存储数据的文件系统,包括数据文件、日志文件等。

四、总结

本文通过一张图来讲解MySQL的整体架构,从高屋建瓴的视觉来洞察MySQL各个重要组成部分,从而建立一个整体性的认识。

同时,MySQL的架构也是面试中常见的一个问题,特别是一些资深开发的职位。因为MySQL的重要性和流行度是如此的高,如果对它的架构没有一个全局性的认识显然是不够的。

另外,有时候也会看到一些言论,就是觉得MySQL这样的数据库过时了,然后张口闭口都是NoSQL、分布式、高并发,而MySQL已经出现这么多年,应该淘汰了,看到类似这样的说法,只能让人贻笑大方,专业的人士是不可能说出这样的话的,MySQL或者类似的关系型数据库,它们的重要性怎么强调都不为过。

创作不易,烦请点个在看、点个赞。

有任何问题,也欢迎留言讨论。

参考文章:

https://dev.mysql.com/doc/refman/5.7/en/

推荐阅读:

吃透Redis系列:常见面试题及解析

吃透Redis系列:分布式锁

你可能感兴趣的:(mysql,架构,数据库)