前言
在我们日常开发中使用的最多的还是mysql,毕竟是开源的,在对于一个高工来说,需要了解或掌握数据库的基本架构才能更好的发挥数据库的特长,以便于在外面对数据库的开发过程中,少踩坑,将数据库的性能发挥到最优,废话不多说,直接上图。
架构图
各个组件详解
Client Connectors
在这个组件中,定义了一组mysql服务器对客户端的支持,可以理解为各种语言的支持
Service Utilities
mysql服务器自带的一些工具,可以用来做备份,安全,做集群,做分区等
Connection Pool
连接池中包含了连接处理,权限分离,安全
Execute Flow
对于sql语句的执行流程分为如下几个步骤
SQL Interface
对接Client提供统一的sql api,客户端送入服务器的sql语句并不是可以直接拿来给mysql运行的
Parser
将从客户端接收到的sql语句进行语义分析, 并进行拆解,形成可以运行的sql
Optimizer
在解析好的sql中,可能会存在一些需要优化的地方,这就需要Optimizer组件来对sql进行优化,和执行计划息息相关,以达到更好的性能,可以快速的相应客户端的请求
Caches
mysql的缓存模块,对于已经执行过的sql语句,在下一次还执行相同语句的时候,可以直接返回上一次的结果,如果对于数据的一致性不是很强烈的前提下。
Index
mysql索引模块,常用的Myisam,和InnoDB
Myisam
在不需要事务的情况下,可以使用,存在表锁,粒度大,并发度低
InnoDB
支持行级锁,并发度高,支持事务,和事务的隔离级配合使用,可以使得数据库的并发性能大大增强
参考数据库的隔离级别
File System
mysql数据库的文件系统,主要存储一些日志文件和数据文件,我们熟知的Binlog(用于)
binlog
二进制日志文件,在上篇中有提到过,主要用于数据库的备份,触发事件
error
会记录有错误的sql操作
slow
主要会记录一些慢查询------- 耗时时间比较长但是不正常的sql
redo
在对数据库操作的时候所记录的一个日志,包括更改前后的信息
undo
主要是记录数据的备份用的,在发生一次异常的时候,会使用redo/undo进行原始数据的回滚
data
数据库持久化数据的文件,用于存储真实的数据
index
上文中提到的索引,都会建立索引文件,从而加快数据库的检索速度