摘要: Spider是爲MySQL/MariaDB開發的一個特殊引擎,具備內嵌分片功能。如今它已經被集成到MariaDB10.0及以上版本中,做爲MariaDB的一個新的主要特性。Spider的主要功能是將數據分散到多個後端節點,它的做用相似於一個代理。編程
Spider是爲MySQL/MariaDB開發的一個特殊引擎,具備內嵌分片功能。如今它已經被集成到MariaDB10.0及以上版本中,做爲MariaDB的一個新的主要特性。Spider的主要功能是將數據分散到多個後端節點,它的做用相似於一個代理。後端
本文主要分紅四個部分來介紹Spider:緩存
-
表連接:利用Spider,多個後端節點的表看起來就像存在於單一實例上同樣。服務器
-
事務:Spider實現了XA事務/單機事務接口,支持XA事務,以便在多個數據節點之間同步或者更新數據。編程語言
-
插拔式引擎:Spider做爲MySQL/MariaDB的一個插拔式引擎,實現handler類定義的表訪問方法。ide
-
讀寫流程:受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所示。
圖1. Spider表連接
2、事務
Spider分別針對單機事務與XA事務實現了相應的操做事務的方法。圖2列出了部分實現的方法。