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


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 内部维持着一些 Cache 和 Buffer , 比如 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 数据库会有极大帮助!




推荐阅读