1  配置下面两种ER分片,并结合日志分析子表插入过程中的不同

(1).父表按照主键ID分片,子表的分片字段与主表ID关联,配置为ER分片

(2).父表的分片字段为其他字段,子表的分片字段与主表ID关联,配置为ER分片

答:(1)第一种分片:父表按照主键ID分片

表设计:父表student,子表selectcourse

student(id,stu_id);

selectcourse(id,stu_id,cou_id);

在schema.xml中增加父表、子表定义:

<table name="student" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="mod-long">

<childTable name="selectcourse" primaryKey="ID"  joinKey="stu_id"  parentKey="id" />

</table>

在mysql客户端中执行创建表的语句:

create table student(id bigint not null primary key,stu_id bigint not null);

create table selectcourse(id bigint not null primary key,stu_id bigint not null,cou_id bigint not null);

插入父表记录

insert into student(id,stu_id) values(1,3001);//

insert into student(id,stu_id) values(2,3002);

插入子表记录

insert into selectcourse(id,stu_id,cou_id) values(1,1,1); //同时观察日志

总结:直接使用父表的分片规则(id字段mod算法)来查找节点。

2)第二种分片:父表的分片字段为其他字段

表设计:父表book,子表sail

book(id,book_id);

sail(id,book_id,custo_id);

在rule.xml中增加“mod-long-book”分片方法:分片字段为book_id

<tableRule name="mod-long-book">

<rule>

<columns>book_id</columns>

<algorithm>mod-long</algorithm>

</rule>

</tableRule>

在schema.xml中增加父表、子表定义:父表用"mod-long-book"方法分片,

<table name="book" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="mod-long-book">

<childTable name="sail" primaryKey="ID"  joinKey="book_id"  parentKey="id" />

</table>

在mysql客户端中执行创建表的语句:

create table book(id bigint not null primary key,book_id bigint not null);

create table sail(id bigint not null primary key,book_id bigint not null,customer_id bigint not null);

插入父表记录:

insert into book(id,book_id) values(1,3001);

insert into book(id,book_id) values(2,3002);

插入子表记录

insert into sail(id,book_id,customer_id) values(1,2,2001);//同时观察日志

总结:先通过父表的id字段查询分片,再往相应的分片中插入数据。

比第一种方法多了一个“查找分片”的步骤。

2 选则连续分片规则中的2种,对配置和路由过程做完整的分析

(1)自定义数字范围分片分片方法为“rang-long”

首先,在rule.xml中配置分片方法“price-rang-long”,算法为“rang-long”;

再在schema.xml中配置表信息,包括表名、主键、节点、分片方法等;

然后,在客户端执行创建表的命令(mygoods);

最后,往mygoods表中插入记录;

日志信息:

路由描述:

mygoods表依据rang-long算法进行分割,rang-long又依据autopartition-long.txt(如下图所示)文件中的值进行分片(制定数据节点dh),本题中的price为300,

属于0-500M的范围,所以本记录应该路由到第0个节点上(下标从0开始,第0个节点就是dn1)执行,正如上图中所示。

(2)自然月分片分片方法为“partbymonth”

首先,在rule.xml中配置分片方法“sharding-by-month”,算法为“partbymonth”;

再在schema.xml中配置表信息,包括表名、主键、节点、分片方法等;

然后,在客户端执行创建表的命令(myrecords);

最后,往myrecords表中插入记录;

日志信息:

路由描述:

Myrecords表依据partbymonth算法进行分割,partbymonth的以自然月为依据,每个月一个分片,从2015-01-01开始(如下图所示:rule.xml中partbymonth分片方法),

即2015年1月份数据在第0节点,2015年2月份数据在第1节点,以此类推。本题中的create_time=2015-03-01对应的数据应该在第2个节点(下标从0开始,第2个节点

就是dn3)执行,所以,本记录路由到第2个节点上(dn3)执行,正如上图中所示。

3 选择离散分片规则的2种,对配置和路由过程做完整的分析

(1)十进制求模分片:分片方法为“mod-long”

首先,在rule.xml中配置分片方法;

再在schema.xml中配置表信息,包括表名、主键、节点、分片方法等;

然后,在客户端执行创建表的命令(student);

create table student(id bigint not null primary key,stu_id bigint not null);

最后,往student表中插入记录;

日志信息:

路由描述:

student表依据mod-log算法进行分割,本题中记录值为4除3的模为1,对应的数据应该在第1个节点(下标从0开始,第1个节点就是dn2)上;所以,本记录路由到第1个节点上(dn2)执行,正如上图中所示。

(2)哈希分片:分片方法为“hash-int”

首先,在rule.xml中配置分片方法;

再在schema.xml中配置表信息,包括表名、主键、节点、分片方法等;

然后,在客户端执行创建表的命令(employee);

create table employee (id int not null primary key,name varchar(100),sharding_id int not null);

最后,往myrecords表中插入记录;

日志信息:

路由描述:

employee 表依据sharding-by-intfile算法进行分割,sharding-by-intfile算法又依据partition-hash-int.txt文件(如下图所示)中的范围进行分片,本题中记录值10010=1,

对应的数据应该在第1个节点(下标从0开始,第1个节点就是dn2)上;所以,本记录路由到第1个节点上(dn2)执行,正如上图中所示。

mycat 分片的更多相关文章

  1. Mysql系列八:Mycat和Sharding-jdbc的区别、Mycat分片join、Mycat分页中的坑、Mycat注解、Catlet使用

    一.Mycat和Sharding-jdbc的区别 1)mycat是一个中间件的第三方应用,sharding-jdbc是一个jar包 2)使用mycat时不需要改代码,而使用sharding-jdbc时 ...

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

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

  3. mycat分片操作

    mycat位于应用与数据库的中间层,可以灵活解耦应用与数据库,后端数据库可以位于不同的主机上.在mycat中将表分为两大类:对于数据量小且不需要做数据切片的表,称之为分片表:对于数据量大到单库性能,容 ...

  4. mycat分片规则之分片枚举(sharding-by-intinfile)

    mycat分片规则之分片枚举(sharding-by-intinfile) http://blog.51cto.com/goome/2058959 mycat安装及分片初体验 https://blog ...

  5. mycat分片及主从(二)

    一.mycat分片规则 经过上一篇幅讲解,应该很清楚分片规则配置文件rule.xml位于$MYCAT_HOME/conf目录,它定义了所有拆分表的规则.在使用过程中可以灵活使用不同的分片算法,或者对同 ...

  6. Mycat 分片规则详解--一致性hash分片

    实现方式:基于hash算法的分片中,算法内部是把记录分片到一种叫做"bucket"(hash桶)的内部算法结构中的,然后hash桶与实际的分片节点一一对应,从此实现了分片.路由的功 ...

  7. Mycat 分片规则详解--数据迁移及节点扩容

    使用的是 Mycat 提供的 dataMigrate 脚本进行对数据进行迁移和节点扩容,目前支持的 Mycat 是1.6 版本,由于 Mycat 是由 Java 编写的因此在做数据迁移及节点扩容时需要 ...

  8. Mycat 分片规则详解--日期范围 hash 分片

    实现方式:其思想和范围取模分片一样,由于日期取模会出现数据热点问题,所以先根据日期分组,再根据时间 hash 使得短期数据分布跟均匀. 优点:避免扩容时的数据迁移,可以在一定程度上避免范围分片的热点问 ...

  9. Mycat 分片规则详解--单月小时分片

    实现方式:单月内按照小时拆分,最小粒度是小时,一天最多可以有24个分片,最少1个分片,下个月从头开始循环 优点:使数据按照小时来进行分时存储,颗粒度比日期(天)分片要小,适用于数据采集类存储分片 缺点 ...

  10. Mycat 分片规则详解--日期(天)分片

    实现方式:按照日期来分片 优点:使数据按照日期来进行分时存储 缺点:由于数据是连续的,所以该方案不能有效的利用资源 配置示例: <tableRule name="sharding-by ...

随机推荐

  1. 多校hdu5738 寻找

    这道题前面给了两个公式,其实仔细分析一下,就会发现其实是给了你一堆点的坐标,然后让你求这些点有多少种组合可以形成共线的情况当两个点在一个坐标上时这两个点可以看做是不同的两个点,也就是说如果两个点在一个 ...

  2. springmvc中url-url-pattern /和/*的区别

    在使用springmvc时,都会在web.xml中配置一个dispatchservlet,如下: <listener> <listener-class> org.springf ...

  3. Mybatis单个参数的if判断(针对异常:There is no getter for property..)------mybatis的内置对象

    这里有一个删除方法: int deleteByPrimaryKey(Integer id); 然后对应的sql的xml如下: <delete id="deleteByPrimaryKe ...

  4. POJ 1635 Subway tree systems (树的最小表示法)

    题意:一串01序列,从一个点开始,0表示去下一个点,1表示回到上一个点,最后回到起点,遍历这棵树时每条边当且仅当走2次(来回) 给出两串序列,判断是否是同一棵树的不同遍历方式 题解:我们把每一个节点下 ...

  5. CodeForces 266E More Queries to Array...(线段树+式子展开)

    开始觉得是规律题的,自以为是的推了一个规律,结果测试数据都没过....看了love神的博客才发现只是把式子展开就找到规律了.不过挺6的是我虽然想错了,但是维护的的东西没有错,只是改改(改了进两个小时好 ...

  6. nova rebuild

    nova rebuild¶ usage: nova rebuild [--rebuild-password <rebuild-password>] [--poll] [--minimal] ...

  7. C++的转换函数

    听侯捷老师的讲课笔记: 所谓转换函数指的是类型之间的转换,比如把自定义的类类型转换成内建类型(比如double),后者向相反的方向转. 直接上代码: 头文件conversion_function.h: ...

  8. jspxcms笔记三

    首页 index.html site :站点对象栏目 cover.html list.html node :栏目对象, text :正文详细 info.html node :栏目对象, info :文 ...

  9. 定义类+类实例化+属性+构造函数+匿名类型var+堆与栈+GC回收机制+值类型与引用类型

    为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机会. 面向对象编程也叫做OOP编程 简单来说 ...

  10. 分享知识-快乐自己:HttpClient 访问 WebService 开放接口

    HttpClient: 场景需求如下: 1.项目中需要与一个基于HTTP协议的第三方的接口进行对接 2.项目中需要动态的调用WebService服务(不生成本地源码) 3.项目中需要利用其它网站的相关 ...