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

这篇具有很好参考价值的文章主要介绍了图文结合带你搞懂GreatSQL体系架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

往期系列回顾

  • 图文结合系列之带你搞懂MySQL日志系列

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

首先来回顾一张经典的体系架构图:

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

图1_GreatSQL5.7 版本体系架构图

由此可以发现,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 -p
ERROR 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 语句:

SELECT * FROM tb1 JOIN tb2 USING(ID) WHERE tb1.a=1 and tb2.a=2;

那就有两种方法可以选择:

  • 第一种,先取表 tb1 里 a=1 的记录的ID值,再根据 ID 关联表 tb2 ,然后再判断 tb2 里面 a 的值是否等于 2
  • 第二种,先取表 tb2 里面的 a=2 记录的 ID 值,在根据 ID 值关联 tb1 ,再判断 tb1 里面 a 的值是否等于 10

执行的结果肯定是一致的,但是效率就大不相同了,所以我们要选择用小的数据集去驱动大的数据集,也就是小表驱动大表

Ⅳ.Caches & Buffers:查询缓存组件

GreatSQL 内部维持着一些 CacheBuffer,比如 Query Cache 用来缓存一条 SELECT 语句的执行结果,如果能够在其中找到对应的查询结果,那么就不必再进行查询解析、优化和执行的整个过程了,直接将结果反馈给客户端。

但是在 GreatSQL 8.0 版本及以上中删除了查询缓存功能,因为查询缓存必须要两条SQL语句完全一模一样,否则是不能触发查询缓存,非常的鸡肋~

三、引擎层(Storage Engines)

Ⅰ.存储引擎层

真正的负责了 GreatSQL 中数据的存储和提取,对物理服务器级别维护的底层数据执行操作,服务器通过API与存储引擎进行通信。

存储引擎的优势在于,各式各样的存储引擎都具备独特的特性,从而能够针对特定的应用需求建立不同存储引擎表。

GreatSQL 支持的存储引擎如下:

greatsql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine 引擎名称 | Support 支持情况 | Comment 引擎的说明                          | Transactions 事务支持 | XA 分布式事务支持  | Savepoints 保存点 |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                             | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)             | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

得益于 GreatSQL 数据库的开源特性,用户得以依据存储引擎接口自行编写个性化的存储引擎。当对某一种存储引擎的性能或功能存有疑虑时,可通过优化代码实现所需特性,这正展示了开源所赋予我们的便捷与力量。

Ⅱ.存储层

所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在 文件系统上,以文件的方式存在的,并完成与存储引擎的交互。当然有些存储引擎比如InnoDB,也支持不使用文件系统直接管理裸设备,但现代文件系统的实现使得这样做没有必要了。在文件系统之下,可以使用本地磁盘,可以使用DAS、NAS、SAN等各种存储系统。

总结

所以可以把 GreatSQL 的架构图简化如下:

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

要把架构图牢牢记住,对于以后深入理解 GreatSQL 数据库会有极大帮助!


Enjoy GreatSQL 😃

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

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

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群

图文结合带你搞懂GreatSQL体系架构文章来源地址https://www.toymoban.com/news/detail-504049.html

到了这里,关于图文结合带你搞懂GreatSQL体系架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图文结合丨Prometheus+Grafana+GreatSQL性能监控系统搭建指南(上)

    本文环境,以及本文所采用数据库为 GreatSQL 8.0.32-24 Prometheus Server : 用于收集和存储时间序列数据。 Client Library : 客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当Prometheus server 来 pull 时,直接返回实时状态的 metrics。 Push Gateway : 主要用于短期的 jobs。

    2024年02月08日
    浏览(42)
  • 图文结合丨带你轻松玩转MySQL Shell for GreatSQL

    MySQL Shell 是 MySQL 的一个高级客户端和代码编辑器,是第二代 MySQL 客户端。第一代 MySQL 客户端即我们常用的 MySQL 。除了提供类似于 MySQL 的 SQL 功能外,MySQL Shell 还提供 JavaScript 和 Python 脚本功能,并包括与 MySQL 一起使用的 API 。MySQL Shell 除了可以对数据库里的数据进行操作,

    2024年02月12日
    浏览(41)
  • 一文带你搞懂二叉树

    目录 一、什么是二叉树 二、创建二叉树 1)二叉树的结构: 2)创建二叉树: 三、二叉树的遍历方式 1)前序遍历: 2)中序遍历: 3)后序遍历: 4)还原二叉树 : 5)层序遍历:  四、二叉树的基本操作: 1)二叉树节点个数: 2)二叉树叶子节点个数: 3)二叉树第K层节点

    2024年02月08日
    浏览(40)
  • 帮你搞懂什么是Session

    目录 1. 什么是Session? 2. 什么时间考虑使用Session? 3. 怎么使用Session? 4. Session的详解: 5. HttpSession与Cookie的比较  6. Session有什么缺点? 我们所说的Session其实是HttpSession接口的实现类。只不过HttpSession接口的实现类是由Tomcat服务器帮我们实现的,不用我们自己实现。下面我们

    2024年02月14日
    浏览(51)
  • 一文让你搞懂javascript如何实现继承

    一、本文想给你聊的东西包含一下几个方面:(仅限于es6之前的语法哈,因为es6里面class这用上了。。) 1.原型是啥?原型链是啥? 2.继承的通用概念。 3.Javascript实现继承的方式有哪些?   二、原型是啥?原型链是啥? 1.原型是函数本身的prototype属性。 首先js和java不

    2024年02月04日
    浏览(52)
  • 一文带你搞懂sklearn.metrics混淆矩阵

    一般的二分类任务需要的评价指标有4个 accuracy precision recall f1-score 四个指标的计算公式如下   计算这些指标要涉及到下面这四个概念,而它们又构成了混淆矩阵 TP (True Positive) FP (False Positive) TN (True Negative) FN (False Negative) 混淆矩阵 预测值 0 1 实际值 0 TN FP 1 FN TP 这里我给出的

    2024年02月06日
    浏览(37)
  • Nginx配置详解,一文带你搞懂Nginx

    1 基本概念 1.1 Nginx简介 Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支

    2024年01月16日
    浏览(47)
  • 一篇文章让你搞懂内存函数

    库函数memcmp介绍 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数在遇到 ‘\\0’ 的时候并不会停下来。 如果source和destination有任何的重叠,复制的结果都是未定义的。 库函数memcmp的代码形式 看代码 memcmp将arr1中的内容拷贝到arr2中,总共

    2024年02月17日
    浏览(42)
  • 手把手带你搞懂AMS启动原理

    彻底搞懂AMS即ActivityManagerService,看这一篇就够了 最近那么多教学视频(特别是搞车载的)都在讲AMS,可能这也跟要快速启动一个app(甚至是提高安卓系统启动速度有关),毕竟作为安卓系统的核心系统服务之一,AMS以及PMS都是很重要的,而我之前在 应用的开端–PackageManag

    2024年02月12日
    浏览(104)
  • 一篇文章带你搞懂前端Cookie

    浏览器Cookie相信各位点进这篇文章的小伙伴应该不陌生了,它是前端领域中一个非常重要的内容,当然也是面试的一个考点,不知道各位小伙伴是否真正掌握了Cookie呢?当然没有掌握也是没有关系的,可以跟着小编的脚步一起来学习一下前端Cookie,没有熟练掌握的小伙伴看完这

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包