有一类业务,例如订单(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
<table name="order" dataNode="dn1,dn2,dn3" rule="auto-sharding-long">
<childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="id" />
</table>
在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按照节点数目取模的结果
<?php
echo 1%3;
echo '<br>';
echo 2%3;
echo '<br>';
echo 3%3;
echo '<br>';
echo 4%3;
结果:
1
2
0
1
就是id为3的所有记录都会在dn1(第0个节点),id为1和4的记录都会在dn2(第1个节点),id为2的会在dn3(第2个节点)
查看dn1的记录

查看dn2的记录

查看dn3的数据

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

mycat ER分片的更多相关文章

  1. MyCAT ER分片的验证

    在这里,构造了两张表,熟悉Oracle的童鞋都知道,dept(部门表)和emp(员工表),其中dept中的deptno是emp表中dept_no的外键. 两表的建表语句如下: create table ...

  2. mycat ER 分片表

    <table name="order" dataNode="dn$1-32" rule="mod-long"> <chil ...

  3. MyCat 学习笔记 第十篇.数据分片 之 ER分片

    1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键 ...

  4. mycat读写分离+垂直切分+水平切分+er分片+全局表 测试

    原文http://blog.163.com/bigoceanwu@126/blog/static/172718064201683031639683/ 读写分离:利用最基础的mysql主从复制,事务性的 ...

  5. MyCat 枚举分片设计思考,查询命中条件

    Mycat多租户实现的两种方式 MyCat,各种分片规则,仅保证插入的时候分片.表关联,join,查询怎么命中分片条件,还是需要设计. 今天稍微测了一下. ER 分片,此方式,插入的时候能分片,但是查 ...

  6. Mycat跨分片Join

    1 前言 Mycat目前版本支持跨分片的join,主要实现的方式有四种. 全局表 ER分片 HBT(参考MyCAT人工智能解决跨分片SQL.docx) ShareJoin ShareJoin在开发版中 ...

  7. Mysql系列六:(Mycat分片路由原理、Mycat常用分片规则及对应源码介绍)

    一.Mycat分片路由原理 我们先来看下面的一个SQL在Mycat里面是如何执行的: , ); 有3个分片dn1,dn2,dn3, id=5000001这条数据在dn2上,id=10000001这条数 ...

  8. JAVAEE——宜立方商城13:Mycat数据库分片、主从复制、读写分离、100%Linux中成功安装Mysql的方法

    1 海量数据的存储问题 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL ...

  9. JAVAEE——宜立方商城13:订单系统实现、订单生成、Mycat数据库分片

    1. 学习计划 1.订单系统实现 2.订单生成 3.Mycat数据库分片 2. 订单系统 2.1. 功能分析 1.在购物车页面点击“去结算”按钮,跳转到订单确认页面 a) 必须要求用户登录 b) 使用 ...

随机推荐

  1. 分享一个后端专用login模板

    给大家啊分享一个后端专用login模板 Java工程师再也不用这样啦---> html源码 <html lang="en"> <head> <m ...

  2. js reduce

    数组对象求和 let books = [ { id: 100, name: '红楼梦', price: 100 }, { id: 101, name: '西游记', price: 150 }, { i ...

  3. Linux服务器被入侵后的处理过程

    突然,频繁收到一组服务器 ping 监控不可达邮件,赶紧登陆 zabbix 监控系统查看流量状况. 可见流量已经达到了 800M 左右,这肯定不正常了,马上尝试 SSH 登陆系统,不幸的事,由于网络堵 ...

  4. Apache报错:无法使用可靠的服务器域名

    Apache 安装和启动时报错:无法使用可靠的服务器域名,打开Apache配置文件httpd.conf,去除 ServerName 前面的注释即可 1. 报错信息:无法使用可靠的服务器域名 AH005 ...

  5. html基础:DOM操作

    DOM(Document Object Model 文档对象模型) 一个web页面被封装成一个dom对象,通过dom中的js对页面的标签进行操作 一.获取对象 浏览器页面上右键--检查--consol ...

  6. day52:django:ORM单表/多表操作

    目录 1.ORM 2.ORM单表增删改查 13个必知必会的查询接口 filter基于双下划线的模糊查询 3.ORM多表增删改查 ORM 什么是ORM? ORM(object relational ma ...

  7. docker 搭建私有云仓库

    docker搭建私有仓库   registry私有仓库 下载docker-distribution软件包 yum install epel-release yum install docker-dis ...

  8. Mybatis是如何将Mapper接口注册到Spring IoC的

    1. 前言 有时候我们需要自行定义一些注解来标记某些特定功能的类并将它们注入Spring IoC容器.比较有代表性的就是Mybatis的Mapper接口.假如有一个新的需求让你也实现类似的功能你该如何 ...

  9. Java 中 static 的作用

    static 关键字的作用 在 Java 中 static 关键字有4种使用场景,下面分别进行介绍: 1.static 成员变量 public class Student { // 静态成员变量 pr ...

  10. 微信小程序问题汇总

    一.消息推送配置 1.解析失败.请检查信息是否填写正确 服务器地址中不能使用其他的端口号,把端口号去掉,默认就是走80或443端口,另外这个地址需要外网访问,我使用了nat123映射了80端口,这个工 ...