mysql er分片_mycat ER分片

有一类业务,例如订单(ORDER)跟订单明细表(ORDER_DETAIL),明细表会依赖于订单,就是该会存在表的主从关系,

这类似业务的切分可以抽象出合适的切分规则,比如根据用户ID切分,其它相关的表都依赖于用户ID,再或者根据订单ID进行切分,

总之部分业务总会可以抽象出父子关系的表。这类表适用于ER分片表,子表的记录与所关联的父表记录存放在同一个数据分片上,

避免数据Join跨库操作,以order与order_detail例子为例,schema.xml中定义合适的分片配置,order,order_detail 根据order_id

迕行数据切分,保证相同order_id的数据分到同一个分片上,在进行数据插入操作时,Mycat会获取order所在的分片,

然后将order_detail也插入到order所在的分片

# vi /usr/local/mycat/conf/schema.xml

在db1,db2,db3上分别运行建表语句

CREATE TABLE `order` (

`id` int(11) NOT NULL,

`sn` varchar(64) CHARACTER SET latin1 NOT NULL,

`create_time` datetime NOT NULL,

KEY `id` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `order_detail` (

`id` int(11) NOT NULL,

`order_id` int(11) NOT NULL,

`address` varchar(128) NOT NULL,

`create_time` datetime NOT NULL,

KEY `fk_ordid` (`order_id`),

CONSTRAINT `fk_ordid` FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

通过8066端口执行插入SQL

INSERT INTO `order` (id,sn,create_time) VALUES (1, 'BJ0001', NOW());

INSERT INTO order_detail(id,order_id,address,create_time) VALUES (1,1,'test data of ORDER1(ID=1,BJ001) ',NOW());

INSERT INTO `order` (id,sn,create_time) VALUES (2, 'BJ0002', NOW());

INSERT INTO order_detail(id,order_id,address,create_time) VALUES (2,2,'test data of ORDER1(ID=1,BJ002) ',NOW());

INSERT INTO order_detail(id,order_id,address,create_time) VALUES (3,2,'test data of ORDER1(ID=1,BJ002) ',NOW());

INSERT INTO `order` (id,sn,create_time) VALUES (3, 'BJ0003', NOW());

INSERT INTO order_detail(id,order_id,address,create_time) VALUES (4,3,'test data of ORDER1(ID=1,BJ003) ',NOW());

INSERT INTO order_detail(id,order_id,address,create_time) VALUES (5,3,'test data of ORDER1(ID=1,BJ003) ',NOW());

INSERT INTO `order` (id,sn,create_time) VALUES (4, 'BJ0004',NOW());

INSERT INTO order_detail(id,order_id,address,create_time) VALUES (6,4,'test data of ORDER1(ID=1,BJ004) ',NOW());

根据mod-long按照节点数目取模的结果

echo 1%3;

echo '
';

echo 2%3;

echo '
';

echo 3%3;

echo '
';

echo 4%3;

结果:

1

2

0

1

就是id为3的所有记录都会在dn1(第0个节点),id为1和4的记录都会在dn2(第1个节点),id为2的会在dn3(第2个节点)

查看dn1的记录

3779c70e9c69822008bb05facf464249.png

查看dn2的记录

4a84ac0c62dad148eb1590aad8d962ec.png

查看dn3的数据

262b2291491567ec0d683008dd588171.png

实验结果:全部符合预期,字表完全符合关联规则。

68f724bad5a33d9a9f6bd2ca7369ecb7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值