上图(图是百度找的)
mysql逻辑架构:连接层、服务层、引擎层、存储层,四层。
Connectors
连接,指不同语言与数据库的交互,比如:java里的JDBC
Management Serveices & Utilities
系统管理和控制工具
Connection Pool
连接池,管理缓冲用户连接,线程处理等需要缓存的需求。负责监听对MySQL Server的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上MySQL Server的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责MySQL Server与客户端的通信,接收客户端的命令请求,传递Server端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的cache等。
SQL Interface
SQL接口,接受用户的SQL命令,并且返回用户需要查询的结果。
Parser
解析器,SQL命令传递到解析器的时候会被解析器验证和解析。可以理解为过滤器,对不同的Query进行分类、筛选,比如:insert、selcet、del等将SQL语句进行语义和语法的分析,分解成数据结构,按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤。SQL语句的传递和处理就是基于这个结构。
Optimizer
查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化。及优化客户端请求的query(sql语句),根据客户端请求的query语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何去得这个query语句的结果。
他使用的是“选取-投影-联接”策略进行查询。
select uid,name from user where gender = 1;
其查询过程,先将where的筛选条件提出 (gender = 1),然后将表中的需要查询的数据提出(uid,name)组成新的映射表,最后通过筛选条件筛选映射表生成最后结果。
Cache和Buffer
查询缓存,主要功能将客户端提交给MySQL的Select 类 query 请求的返回结果集缓存到内存中,与该query的一个hash值做一个对应。如果该query的基表发生了数据变化,MySQL就会自动使该query的cache失效,并重新生成。
优点:提高性能;缺点:内存消耗大。
Pluggable Storage Engines
mysql中存储引擎是可插拔的,及插件式管理。存储引擎是基于表的,而不是数据库。此模块实际上是一个抽象类,但正因为它成功地将各种数据处理高度抽象化,才成就今天MySQL可插拔存储引擎的特色。
mysql有十几种存储引擎,常用的有:Innodb、Myisam等。不同的存储引擎抽象数据的算法也不尽相同。比如:Innodb底层使用的B+树,而Myisam则使用的B-树等。
只有了解mysql的系统架构,才能更好的去了解深入的原理、算法等。比如:如果mysql性能下降,到底是什么导致的呢?是那一层的问题?是哪一个组件的问题?确定了位置,我们才好去确定具体的解决方案和措施。
阅读文章:
https://www.cnblogs.com/andy6/p/5789254.html
https://juejin.im/post/59ec528bf265da43333d8bb0#heading-1