分层的思想无处不在
数据库产品的架构一般可以分为应用层、逻辑层和物理层,对于MySQL,同样可以理解为如下三层:
-
应用层
负责和客户端、用户进行交互,需要和不同的客户端和中间服务器进行交互,建立连接,记住连接的状态,响应他们的请求,返回数据和控制信息(错误信息、状态码等)
-
逻辑层
负责具体的查询处理、事物管理、存储管理、恢复管理以及其他的附加功能。查询处理器负责查询的解析、执行。当接收到客户端的查询时,数据库就会分配一个线程来处理它。先由查询处理器(优化器)生成执行计划,然后交友计划执行器来执行,执行器有时需要访问更底层的事物管理器、存储管理器来操作数据,事务管理器、存储管理器主要负责事物管理、并发控制、存储管理。这其中,将由事物管理器俩确保“ACID”特性,通过锁管理器来控制并发,由日志管理器来确保数据持久化,存储管理器一般还包括一个缓冲管理器,由他来确定磁盘和内存缓冲之间的数据传输。
ACID:
原子性(Atomicity),事物是一个不可分给的单位,要么都成功,要么都失败;
一致性(Consistency),事物前后数据的完整性必须保持一致;
隔离性(Isolation),多个并发事物之间要相互隔离;
持久性(Durability),事物一旦被提交,对数据库中数据的改变就是永久性的
-
物理层
实际物理磁盘(存储)上的数据库文件,比如,数据文件、日志文件等。
图1-1是MySQL官方文档的一个基础架构图,
其中Connectors可以理解为各种客户端、应用服务;
ConnectionPool可以理解为应用层,负责连接、验证等功能;
ManagementService&Utilities、SQL Interface、Parser、Optimizer、Caches&Buffers、Pluggable Storage Engines可以理解为数据库的大脑——逻辑层;
最下方的Files&Logs可以理解为物理层。