尝试在MariaDB 10.3上使用Spider存储引擎.
MariaDB 服务器 10.3.7 在2018年5月成为GA时,Spider存储引擎也随之成为GA。
https://mariadb.com/kb/zh-cn/library/mariadb-1037-release-notes/
https://mariadb.com/kb/zh-cn/library/spider-storage-engine-overview/
https://mariadb.com/kb/zh-cn/library/spider-installation/
蜘蛛的概述
通过在 Spider 中将包含大量数据的表进行分区划分,并将其分片到多个节点(数据节点)上,可以实现在写入操作写入时进行水平扩展。听说腾讯游戏等公司广泛使用此技术。
考试环境
OS: CentOS 7.5.1804
MariaDB 10.3.9 GA
Spider Node x 1 (ホスト名: spider)
Data Node x 2 (ホスト名: data1/data2)
数据节点的设置。
MariaDB 10.3.9 GA
Spider Node x 1 (ホスト名: spider)
Data Node x 2 (ホスト名: data1/data2)
数据节点与非Spider存储引擎类似地创建表,并创建用于从Spider节点访问的用户。
创建InnoDB表格(目标主机:data1/data2)
创建一个明确的InnoDB表。
CREATE TABLE test.spider (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
) ENGINE=InnoDB;
蜘蛛 用户创建
在每个数据节点上创建用户来将数据存储或查找到先前创建的InnoDB表中,从Spider节点进行分区。
GRANT ALL on *.* to spider@'%' identified by 'password';
FLUSH PRIVILEGES;
Spider Node 的设置(目标主机:spider)
只有使用Spider存储引擎才能作为代理对data node进行操作的Spider节点。
安装蜘蛛引擎。
由于有一个用于安装的SQL文件,请在MariaDB monitor(mysql)中使用SOURCE命令。
SOURCE /usr/share/mysql/install_spider.sql
创建服务器
假设每个数据节点的IP地址分配如下。
数据1:192.168.2.11
数据2:192.168.2.12
在Spider上创建服务器使其可引用为data1和data2。
CREATE SERVER data1 FOREIGN DATA WRAPPER mysql
OPTIONS (
HOST '192.168.2.11',
DATABASE 'test',
USER 'spider',
PASSWORD 'password',
PORT 3306);
CREATE SERVER data2 FOREIGN DATA WRAPPER mysql
OPTIONS (
HOST '192.168.2.12',
DATABASE 'test',
USER 'spider', PASSWORD 'password',
PORT 3306);
FLUSH TABLES;
创建蜘蛛表
在Spider节点上创建一个Spider表,并将其配置为在Data节点上进行InnoDB表的分区设置。
CREATE TABLE test.spider (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
) ENGINE=Spider COMMENT='wrapper "mysql", table "spider"'
PARTITION BY HASH (id)
(
PARTITION p1 COMMENT = 'srv "data1"',
PARTITION p2 COMMENT = 'srv "data2"'
);
在这个例子中,根据id列的值将其分配给每个数据节点。
在中文中確定
SELECT * FROM information_schema.partitions WHERE table_name ='spider' \G
可以。
插入测试数据
为了避免在Spider节点的spider表上,频繁执行以下SQL语句超过2次每秒,请适当间隔地多次执行。
insert into spider (name) values (now());
确认测试数据
当数据1/数据2按照预期进行分区,并在Spider节点上查询时,能够访问到所有数据。
数据1
MariaDB [test]> select * from spider;
+----+---------------------+
| id | name |
+----+---------------------+
| 2 | 2018-09-10 11:54:16 |
| 4 | 2018-09-10 11:54:18 |
| 6 | 2018-09-10 11:54:20 |
+----+---------------------+
数据2 èr)
MariaDB [test]> select * from spider;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | 2018-09-10 11:54:14 |
| 3 | 2018-09-10 11:54:17 |
| 5 | 2018-09-10 11:54:19 |
+----+---------------------+
蜘蛛节点
MariaDB [test]> select * from spider order by id;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | 2018-09-10 11:54:14 |
| 2 | 2018-09-10 11:54:16 |
| 3 | 2018-09-10 11:54:17 |
| 4 | 2018-09-10 11:54:18 |
| 5 | 2018-09-10 11:54:19 |
| 6 | 2018-09-10 11:54:20 |
+----+---------------------+
MariaDB [test]> select * from spider;
+----+---------------------+
| id | name |
+----+---------------------+
| 2 | 2018-09-10 11:54:16 |
| 4 | 2018-09-10 11:54:18 |
| 6 | 2018-09-10 11:54:20 |
+----+---------------------+
MariaDB [test]> select * from spider;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | 2018-09-10 11:54:14 |
| 3 | 2018-09-10 11:54:17 |
| 5 | 2018-09-10 11:54:19 |
+----+---------------------+
蜘蛛节点
MariaDB [test]> select * from spider order by id;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | 2018-09-10 11:54:14 |
| 2 | 2018-09-10 11:54:16 |
| 3 | 2018-09-10 11:54:17 |
| 4 | 2018-09-10 11:54:18 |
| 5 | 2018-09-10 11:54:19 |
| 6 | 2018-09-10 11:54:20 |
+----+---------------------+
MariaDB [test]> select * from spider order by id;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | 2018-09-10 11:54:14 |
| 2 | 2018-09-10 11:54:16 |
| 3 | 2018-09-10 11:54:17 |
| 4 | 2018-09-10 11:54:18 |
| 5 | 2018-09-10 11:54:19 |
| 6 | 2018-09-10 11:54:20 |
+----+---------------------+