Mysql逻辑架构

本人最近在系统学习Mysql,决定写成博客记录下学习过程。内容多摘自书籍再加上自己的理解,希望可以对各位有所帮助,也能使自己加深印象。如果博客内容有错,希望各位大神指出。

Mysql与其他数据库有点与众不同,他的架构可以在很多不同场景中发挥不同的作用,但同时也会带来选择上的困难。Mysql并不完美,但是却很灵活,能够适应高要求的应用环境,比如高并发的Web应用环境。Mysql既可以嵌入到应用程序中,也可以止支持数据仓库、内容索引和部署软件、高可用冗余系统、在线事物处理系统(OLTP)等各种应用类型。

Mysql最总要、最与众不同的特性是他的存储引擎架构,这种架构的设计将查询处理及其他系统任务和数据存储/提取相分离。这种处理与存储分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式。

Mysql逻辑架构

屏幕快照 2015-05-03 上午11.20.101、第一层不是Mysql特有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。比如连接管理、授权认证、安全。

2、第二层是Mysql独有的部分,大多数Mysql的核心服务功能都在这一层,包括查询解析、分析、优化、缓存及所有内置函数(比如日期、时间、数学和加密),所有的跨存储引擎的功能都在这一层(比如存储过程、触发器、视图等)。

3、第三层包含了存储引擎,负责Mysql的存储与提取。服务器通过Api与存储引擎进行通信,这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。存储引擎包含几十个底层函数,用于执行诸如  ‘开始一个事物’ 或者 ‘根据主键提取一行数据’等操作。但存储引擎不会解析SQL,不同的存储引擎也不会互相通信,而只是简单的响应上层的请求。

注:InnoDB会解析外键定义,因为Mysql服务器本身没有提供这个功能。

Mysql链接管理与安全性

每个客户端都会在服务器进程中拥有一个进程,这个连接的查询只会在只个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。服务器会缓存线程,因此不必为每一个连接新建或者销毁线程。

当客户端连接到服务器时,服务器需要对其进行认证。认证其基于用户名、原始主机信息、密码。如果使用了安全套接字(SSL)链接,还可以使用X.509证书认证。一旦客户端链接成功,服务器会继续验证该客户端是否具有执行某个特定查询的权限。

优化与执行

Mysql会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询、决定表的读写顺序,以及选择合适的索引。用户通过特殊的关键字提示优化器,影响他的决策过程。也可以请求优化器解释优化过程的各个因素,使用户知道服务器是如何进行优化决策的,并提供一个基准,便于用户重构查询和schema、修改相关配置,使其尽可能高效运行。

优化器并不关心数据表使用的什么存储引擎,旦存储引擎对于优化查询是有影响的。优化器会请求存储引擎提供容量或者某个操作的具体开销信息,以及表数据的统计信息。

对于SELECT语句,在解析查询之前,服务器会先检查查询缓存,如果命中缓存,服务器就不会进行查询解析、优化和执行的整个过程,而是直接返回查询缓存中的内容。


JackSun

JackSun

I'm a coder.

You may also like...

Leave a Reply

Your email address will not be published.