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

摘要: Spider是为MySQL/MariaDB开发的一个特殊引擎,具备内嵌分片功能。如今它已经被集成到MariaDB10.0及以上版本中,做为MariaDB的一个新的主要特性。Spider的主要功能是将数据分散到多个后端节点,它的做用相似于一个代理。编程

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

 

本文主要分红四个部分来介绍Spider:缓存

 

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

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

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

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

 

1、表连接  指针

 

Spider的表连接的技术参考ISO/IEC 9075-9:2008 SQL/MED标准。利用Spider的这个特性,你能够像操做本地MariaDB实例的表同样来操做远程MariaDB实例上的表,也能够像操做本地MariaDB实例的表同样来操做分布在多个MariaDB实例上的表。code

 

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

 

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, code VARHCAR(10), 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所示。

 

20170503093701236.jpg

图1. Spider表连接

 

2、事务  

 

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

相关文章
相关标签/搜索