前言

在我们日常开发中使用的最多的还是mysql,毕竟是开源的,在对于一个高工来说,需要了解或掌握数据库的基本架构才能更好的发挥数据库的特长,以便于在外面对数据库的开发过程中,少踩坑,将数据库的性能发挥到最优,废话不多说,直接上图。

架构图

mysql 集群结构 mysql集群架构图_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

上文中提到的索引,都会建立索引文件,从而加快数据库的检索速度