加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

MySQL存储引擎之Spider内核深度解析

发布时间:2021-01-15 13:39:16 所属栏目:安全 来源:网络整理
导读:《MySQL存储引擎之Spider内核深度解析》要点: 本文介绍了MySQL存储引擎之Spider内核深度解析,希望对您有用。如果有疑问,可以联系我们。 作者介绍 朱阅岸 ,中国人民大学博士,现供职于腾讯云数据库团队.研究方向主要为数据库系统理论与实现、新硬件平台下的
副标题[/!--empirenews.page--]

《MySQL存储引擎之Spider内核深度解析》要点:
本文介绍了MySQL存储引擎之Spider内核深度解析,希望对您有用。如果有疑问,可以联系我们。

作者介绍

朱阅岸,中国人民大学博士,现供职于腾讯云数据库团队.研究方向主要为数据库系统理论与实现、新硬件平台下的数据库系统以及TP+AP型混合系统.

Spider是为MySQL/MariaDB开发的一个特殊引擎,具有内嵌分片功能.现在它已经被集成到MariaDB10.0及以上版本中,作为MariaDB的一个新的主要特性.Spider的主要功能是将数据分散到多个后端节点,它的作用类似于一个代理.

本文主要分成四个部分来介绍Spider:

1.表链接:利用Spider,多个后端节点的表看起来就像存在于单一实例上一样.

2.事务:Spider实现了XA事务/单机事务接口,支持XA事务,以便在多个数据节点之间同步或者更新数据.

3.插拔式引擎:Spider作为MySQL/MariaDB的一个插拔式引擎,实现handler类定义的表访问方法.

4.读写流程:受MySQL Server层驱动,执行访问数据的动作.

一、表链接

Spider的表链接的技术参考ISO/IEC 9075-9:2008 SQL/MED标准.利用Spider的这个特性,你可以像操作本地MariaDB实例的表一样来操作远程MariaDB实例上的表,也可以像操作本地MariaDB实例的表一样来操作分布在多个MariaDB实例上的表.

当创建一个Spider存储引擎的表时,该表指向远程服务器上对应的一张表或者多个实例上的表,就像UNIX/Linux中的软链接一样.远程服务器上的表可以是任何存储引擎的表.在执行CREATE TABLE命令创建Spider引擎的表时,需要添加COMMENT或CONNECTION语法来指定远程服务器的地址等信息.例如,在远程服务器(该服务器是数据节点,假设IP为192.168.0.1)上创建了如下一张表:

CREATE TABLE s(id INT NOT NULL AUTO_INCREMENT,code VARHCAR(10),PRIMARY KEY(id));

在Spider节点创建一张表指向该表:

CREATE TABLE s(id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(id)) ENGINE=SPIDER COMMENT ‘host “192.168.0.1”,user “user1”,password “pwd1”,port “3307”’

在Spider节点,表字段定义可以忽略.Spider第一次访问表的时候,如果发现没有表字段定义,会从后端节点拉取相关元数据,然后缓存在本地.

Spider的系统表spider_tables记录了各个数据分片的位置信息,类似于编程语言中指针作用.该系统表可以便利Spider跨节点的join操作:访问数据所在的机器,然后把数据拉取到本地进行join操作;如果进行join操作字段不是分片字段,那么需要广播SQL语句将数据拉取到Spider节点进行join操作.

Spider_tables类似图1所示.

图1. Spider表链接

二、事务

Spider分别针对单机事务与XA事务实现了相应的操作事务的方法.图2列出了部分实现的方法.

图2. Spider部分实现的事务接口

上述方法的主要实现是向后端节点发送消息,有些阶段同时需要执行记录系统表的行为.Spider依赖后端数据节点保证事务的持久性以及隔离性.它只负责开启事务,以及在适当的时机发送提交或者回滚事务的命令.如果单机事务涉及多个数据节点,Spider需要将相应的连接保存在队列中.在事务提交或者回滚的时候,逐个发送相应的命令.

Spider参照分布式事务DTP/XA模型实现了分布式XA事务(见图3).在这个模型中,存在RM(Resource Manager,资源管理器)、TM(Transaction Manager,事务管理器)以及AP(Application,应用程序)三种角色.AP通过RM API来操作和管理资源,通过TM接口开启/终止/结束事务.RM与TM之间需要实现XA接口.XA接口定义了两阶段提交的必要步骤,以及RM与TM之间需要进行的交互.Spider扮演的是TM角色,而后端的数据节点扮演的是RM的角色.

图3. 分布式DTP/XA模型

为了使用分布式XA事务,业界定义的XA命令如下:

XA START ‘trx-id’;????????? //开启XA事务

do actual work;???????????? //实际的查询执行语句

XA END ‘trx-id’;?????????? //XA事务结束

XA PREPARE ‘trx-id’;????? //预提交

XA COMMIT ‘trx-id’;?????? //提交

Spider会在系统表spider_xa中记录XA事务的状态,同时在另外一张系统表spider_xa_members中记录参与该XA事务的节点,以便进行操作.

在Spider中,XA事务分别有四种状态,如图4所示,对应于NOT YET,PREPAED,ROLLBACK以及COMMITTED.Spider在开始PREPARE阶段之际会在系统表spider_xa中标记该XA事务的状态为NOT YET.在所有数据节点都接收到PREPARE消息以后,该XA事务的状态进入到PREPARED阶段.假如在PREPARE阶段,某一个数据节点发生故障,那么Spider会回滚该事务.相应地,事务的状态变成ROLLBACK.

最后,如果所有参与事务的节点都返回PREPARE OK,该事务进入提交阶段.图5给出了对应上述命令的每一个步骤,Spider向后端节点发送的消息.

图4. Spider XA事务状态转换

图5. 执行XA事务,Spider与两个后端节点的交互

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!