1 应用场景
这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片。类似于订单主表与订单详情表间的分片存储规则。
本文所说的er分片分为两种:
a. 依据主键进行数据分片,验证发现主表数据保存在第1个datanode中,子表数据根据分片规则存储。
b. 依据分片关键字段进行分片,验证发现主表与子表根据分片规则存储,且保存在相同的分片内。
接下来,可以下实际配置与数据验证
2 环境说明
3 参数配置
3.1 server.xml 配置
同上参考
3.2 schema.xml 配置
3.3 rule.xml 配置
sharding_long
func2
4
256
4 数据验证
4.1 方案a的验证
CREATE TABLE `t_er_parent_1` (
`pid` INT NOT NULL,
`pname` VARCHAR(45) NULL,
PRIMARY KEY (`pid`));
CREATE TABLE `t_er_child_1` (
`cid` INT NOT NULL,
`pid` INT NOT NULL,
`cname` VARCHAR(45) NULL,
PRIMARY KEY (`cid`));
insert into t_er_parent_1 (pid,pname) values (1,'parent 255');
insert into t_er_child_1(cid,pid,cname) values (1,255,'child 255');
insert into t_er_parent_1 (pid,pname) values (2,'parent 256');
insert into t_er_child_1(cid,pid,cname) values (2,256,'child 256');
insert into t_er_parent_1 (pid,pname) values (3,'parent 512');
insert into t_er_child_1(cid,pid,cname) values (3,512,'child 512');
insert into t_er_parent_1 (pid,pname) values (4,'parent 768');
insert into t_er_child_1(cid,pid,cname) values (4,768,'child 768');
mysql> select * from t_er_parent_1;
+-----+------------+
| pid | pname |
+-----+------------+
| 1 | parent 255 |
| 2 | parent 256 |
| 3 | parent 512 |
| 4 | parent 768 |
+-----+------------+
4 rows in set (0.01 sec)
mysql> select * from t_er_child_1;
+-----+-----+-----------+
| cid | pid | cname |
+-----+-----+-----------+
| 1 | 255 | child 255 |
| 4 | 768 | child 768 |
| 2 | 256 | child 256 |
| 3 | 512 | child 512 |
+-----+-----+-----------+
4 rows in set (0.01 sec)
看下方案a的日志 ,所有主表数据都进入了第1个数据结点dn4,不过子表数据进入dn7
01/28 21:44:25.559 DEBUG [$_NIOREACTOR-0-RW] (ServerQueryHandler.java:56) -ServerConnection [id=2, schema=R