图文结合带你搞懂GreatSQL体系架构
首先,我们来看一张经典的GreatSQL体系架构图,以便对GreatSQL的整体结构有一个初步的认识。
GreatSQL5.7 版本体系架构主要由以下几部分组成:
- 连接池组件:管理客户端与服务器之间的连接,提高连接复用率,减少连接开销。
- 系统管理和控制工具:提供对GreatSQL服务器的管理和控制功能。
- SQL接口组件:接收并处理客户端的SQL请求。
- 查询解析器:对SQL语句进行语法和语义分析,生成可执行的查询计划。
- 查询优化器:根据查询计划选择最优的执行路径,提高查询效率。
- 缓存组件:缓存查询结果,减少重复查询的开销(注意:在GreatSQL8.0及更高版本中,查询缓存功能已被移除)。
- 可插拔存储引擎:支持多种存储引擎,满足不同的应用场景和需求。
- 系统和日志文件:记录系统和数据库的运行状态,便于故障排查和性能优化。
接下来,我们重点介绍GreatSQL8.0及更高版本的体系架构,它主要分为连接层、服务层、存储引擎层。
一、连接层(Client Connectors)
连接层,又名客户端连接器,提供与GreatSQL服务器建立连接的支持。客户端通过TCP/IP协议与服务器建立连接,每个连接对应一个线程。连接管理还包括连接池技术,复用已建立的连接,减少开销。它支持几乎所有主流的服务端编程技术,并完成连接处理、授权认证及相关安全方案。
- 授权认证:对从TCP传输过来的账号密码进行身份认证和权限获取。如果用户名或密码不对,会收到“Access denied for user”错误,客户端程序结束执行。
- 权限管理:用户名密码认证通过后,从权限表查出账号拥有的权限,并与连接关联。之后的权限判断逻辑都依赖于此时读到的权限。
二、服务层(GreatSQL Server)
服务层是GreatSQL Server的核心,包含连接器、分析器、优化器、执行器等组件,涵盖大多数核心服务功能及内置函数。所有跨存储引擎的功能都在这一层实现,如存储过程、触发器、视图等。
- SQL Interface(SQL接口):接收用户的SQL命令,返回查询结果。支持DML、DDL、存储过程、视图、触发器、自定义函数等多种SQL语言接口,以及NoSQL功能。
- Parser(解析器):对SQL语句进行语法和语义分析,分解成数据结构,并传递到后续步骤。同时判断输入的SQL语句是否满足GreatSQL语法。
- Optimizer(查询优化器):在SQL语句语法解析之后、查询之前,使用查询优化器确定SQL语句的执行路径,生成执行计划。可以使用EXPLAIN命令查看执行计划。优化器会选择最优的索引和表连接顺序,提高查询效率。
- Caches & Buffers(查询缓存组件):在GreatSQL8.0及更高版本中,已删除查询缓存功能。因为查询缓存要求两条SQL语句完全一模一样才能触发,非常局限。
三、引擎层(Storage Engines)
引擎层真正负责GreatSQL中数据的存储和提取,对物理服务器级别维护的底层数据执行操作。服务器通过API与存储引擎进行通信。
- 存储引擎的优势:各式各样的存储引擎都具备独特的特性,能够针对特定的应用需求建立不同存储引擎表。
- GreatSQL支持的存储引擎:包括InnoDB(默认,支持事务、行级锁定和外键)、MEMORY(基于哈希,存储在内存中,适用于临时表)、MyISAM(MyISAM存储引擎)、MRG_MYISAM(相同MyISAM表的集合)等。用户还可以根据存储引擎接口自行编写个性化的存储引擎。
- 存储层:所有数据、数据库和表的定义、表的每一行内容、索引都存储在文件系统上,以文件的方式存在。当然,有些存储引擎如InnoDB也支持不使用文件系统直接管理裸设备,但现代文件系统的实现使得这样做没有必要。在文件系统之下,可以使用本地磁盘、DAS、NAS、SAN等各种存储系统。
最后,我们可以把GreatSQL的架构图简化为以下形式:
记住这个架构图对于深入理解GreatSQL数据库会有极大帮助。GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。
希望这篇文章能帮助你更好地了解GreatSQL的体系架构!如果有任何疑问或独到见解,欢迎前往GreatSQL社区提出或分享。