图文结合带你搞懂GreatSQL体系架构

很多小伙伴使用了GreatSQL , 但是对GreatSQL的底层原理还不是很了解 , 今天就带大家一起揭开GreatSQL体系架构的神秘面纱!
首先来回顾一张经典的体系架构图:

图文结合带你搞懂GreatSQL体系架构

文章插图
图片
图1_GreatSQL5.7 版本体系架构图
【图文结合带你搞懂GreatSQL体系架构】由此可以发现 , GreatSQL5.7 由以下几部分组成
  • 连接池组件
  • 系统管理和控制工具
  • SQL接口组件
  • 查询解析器
  • 查询优化器
  • 缓存组件
  • 可插拔存储引擎
  • 系统和日志文件
GreatSQL数据库区别于其他数据库的一个特点就是其可插拔的表存储引擎 , 特别需要注意的是 , 存储引擎是基于表的 , 而不是数据库 。
然而 , 经典同时也意味着这幅图已经相当陈旧了 。在GreatSQL8.0 及更高版本中 , 查询缓存这一功能已经被移除 。
图文结合带你搞懂GreatSQL体系架构

文章插图
图片
图2_GreatSQL8.0 版本体系架构图
总体来说 , GreatSQL8.0 可以分为连接层、服务层、存储引擎层 。
一、连接层(Client Connectors)连接层又名为客户端连接器(Client Connectors)作用是提供与GreatSQL服务器建立的支持 。
客户端通过TCP/IP协议与GreatSQL服务器建立连接 , 每个连接对应一个线程 。连接管理还包括了连接池技术 , 以复用已经建立好的连接 , 减少重复建立连接的开销 。
而且几乎支持所有主流的服务端编程技术 , 主要完成一些类似于连接处理、授权认证、及相关的安全方案 。
会对从 TCP 传输过来的账号密码做身份认证、权限获取
  • 用户名或密码不对 , 会收到Access denied for user错误 , 客户端程序结束执行
例如:
$ MySQL -uroot -pERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
  • 用户名密码认证通过 , 会从权限表查出账号拥有的权限与连接关联 , 之后的权限判断逻辑 , 都将依赖于此时读到的权限
二、服务层(GreatSQL Server)服务层是GreatSQL Server的核心 , 主要包含连接器、分析器、优化器、执行器等 , 涵盖 GreatSQL 的大多数核心服务功能 , 以及所有的内置函数(如日期、时间、数学和加密函数等) , 所有跨存储引擎的功能都在这一层实现 , 比如存储过程、触发器、视图等 。
Ⅰ.SQL Interface: SQL接口接收用户的SQL命令 , 并且返回用户需要查询的结果 。比如SELECT … FROM就是调用SQL Interface , GreatSQL支持DML、DDL、存储过程、视图、触发器、自定义函数等多种SQL语言接口
同时还支持NoSQL , NoSQL泛指非关系型数据库和数据存储 。随着互联网平台的规模飞速发展 , 传统的关系型数据库已经越来越不能满足需求 。从5.6版本开始 , GreatSQL就开始支持简单的NoSQL存储功能 。GreatSQL8.0 版本对这一功能做了优化 , 以更灵活的方式实现NoSQL功能 , 不再依赖模式(schema) 。
Ⅱ.Parser: 解析器在解析器中对 SQL 语句进行语法分析、语义分析 。将 SQL 语句分解成数据结构 , 并将这个结构传递到后续步骤 , 以后 SQL 语句的传递和处理就是基于这个结构的 , 并且判断你输入的这个 SQL 语句是否满足 GreatSQL 语法 。
Ⅲ.Optimizer: 查询优化器在开始执行之前 , 还要先经过优化器的处理 。
SQL语句在语法解析之后、查询之前会使用查询优化器确定 SQL 语句的执行路径 , 生成一个执行计划 , 可以使用EXPLAIN命令查看执行计划 。
这个执行计划表明应该使用哪些索引进行查询(全表检索还是使用索引检索) , 表之间的连接顺序如何 , 最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询 , 并将查询结果返回给用户 。
例如下面的 JOIN 语句:


推荐阅读