背景

近期笔者在做技术分享交流时,聊到 SequoiaDB 数据库提供了多种数据类型的实例服务,支持结构化 SQL 实例,包括:MySQL 实例、PostgreSQL 实例、SparkSQL 实例;还支持非结构化实例,如:S3对象存储,Posix文件系统以及 JSON 对象实例。而且根据官方的介绍,100% 兼容 MySQL、PostgreSQL、SparkSQL 语法和协议。这让笔者十分感兴趣,想探一探其庐山真面目。

MySQL 逻辑架构

SequoiaDB 提供的 MySQL 实例能够实现 100% 兼容 MySQL 语法和协议,其背后的原理,还需要从MySQL 的逻辑架构中找,MySQL 逻辑架构如下图所示。

SequoiaDB为何能100%兼容MySQL语法和协议

MySQL 逻辑架构整体上可简单地抽象为三层:通信服务层、核心服务层、存储引擎层层。

最上层的通信服务层,是大多数的数据库或基于网络的客户端/服务器的服务所具备的类似的架构,主要负责请求连接处理、授权认证、安全等等。

第二层是 MySQL 的核心服务层。绝大多数 MySQL 核心服务功能都在这一层,包括:查询解析、分析、优化、缓存、所有的内置函数等。所有跨存储引擎的功能也都在这一层,存储过程、触发器、视图等。

第三层是存储引擎层,主要负责 MySQL 数据的存储和读取。存储引擎层提供一系列的 底层 API,用于执行如“开启一个事务”、“保存一行记录”或者“根据主键读取一行记录”等操作。上层的核心服务通过 底层API 与存储引擎进行通信。同时这些底层 API 也屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程完全透明。存储引擎不需要去关注如何解析 SQL,也不需要关注如何与其他存储引擎进行通信,只需要简单地响应上层核心服务的请求即可。

讲完 MySQL 的逻辑架构,相信大多数读者大致清楚 SequoiaDB 提供的 MySQL 实例能够实现 100% 兼容 MySQL 协议和语法的庐山真面目了。SequoiaDB 数据库提供 MySQL 实例并没有对原生 MySQL 的通信服务层、核心服务层做任何的代码修改,只是利用存储引擎层提供底层 API 与 MySQL 进行对接,实现上层 MySQL 核心服务从 SequoiaDB 存储引擎中读取和存储数据。

总结

MySQL 自身采用了分层的架构,上层的核心服务层通过底层 API 与存储引擎进行通信,使得 MySQL 天然支持多种存储引擎。SequoiaDB 利用 MySQL 提供的底层 API 实现与 MySQL 核心服务进行对接,成为 MySQL 众多存储引擎中的一员。同时对于原生 MySQL 的通信服务层、核心服务层,SequoiaDB 没有做任何的代码修改,100%兼容 MySQL 协议与语法,运行在原生 MySQL 的应用服务可以无缝地迁移至 SequoiaDB 。

相关文章:

  • 2022-12-23
  • 2021-07-14
  • 2021-05-21
  • 2021-08-25
  • 2022-02-11
  • 2021-11-29
  • 2021-07-23
  • 2021-10-08
猜你喜欢
  • 2021-11-22
  • 2021-06-01
  • 2022-12-23
  • 2021-11-08
  • 2021-07-08
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案