Mycat实战案例(二)

                                      Mycat实战案例(二)


目录

                                      Mycat实战案例(二)

一.高可用的故障转移

1.准备一个schema.xml配置文件,单分片表格的双机热备结构(两个数据库没有主从)​

2.Mycat读写都在一个表中

3.在Mycat中写数据

4.宕机对应的数据库

5.报错,转移

二.全局表的配置

1.全局表:mycat不是所有的sql语句格式都能支持的

2.全局表:解决分片表格与数据量不大的变化稳定的非分片表的关联查询设计的表格结构.

3.全局表特点:

4.修改商品表格的字段(多个分片的数据库中同时修改添加c_id)

5.数据库中创建新的表格category

6.shema.xml配置一个分片表格,一个非分片表格

7.进入数据库查看数据

8.category添加数据信息(非分片)

9.product数据清空,添加数据(分片)

1.添加数据在第一分片中

2.添加数据在第二分片中

10.在mycat客户端执行关联查询

11.实现schema.xml对category的全局表格配置(多分片复制)

12.总结全局表格:

三.ER表

1.ER分片表

2.创建需要的表格

3.schema.xml配置t_order和t_order_item的er分片表格关系

4.mycat运行

1.运行报错,说明配置不正确,根据错误信息取修改对应的标签

2.标签写错了childTable

5.mycat测试ER分片表的逻辑

1.两张表格各自插入一批数据;

2.新增数据时,

3.在子表中只能一条一条的添加

4.上午把数据玩炸了,重修部署了一下

5.订单数据

6.查询关联操作时

7.不支持删除语句

8.但是支持内嵌的in关键字

9.查询结果

四.hash一致性的分片计算

1.mycat中hash一致性的原理

2.rule.xml中的hash一致性配置

3.schem.xml配置一个hash一致性计算分片的表格

1.数据库新作表格,hashtable(主键char/varchar)​

2.配置模板

3.重新启动

4进入Mycat 新增加数据(什么类型都可以都会映射到hash环上)

5.进行hash计算分片

暂告一段落


一.高可用的故障转移

1.准备一个schema.xml配置文件,单分片表格的双机热备结构(两个数据库没有主从)

Mycat实战案例(二)_第1张图片

2.Mycat读写都在一个表中

Mycat实战案例(二)_第2张图片

3.在Mycat中写数据

Mycat实战案例(二)_第3张图片

4.宕机对应的数据库

Mycat实战案例(二)_第4张图片

5.报错,转移

Mycat实战案例(二)_第5张图片

故障转移是为了临时顶替

二.全局表的配置

1.全局表:mycat不是所有的sql语句格式都能支持的

比如:跨分片的关联查询无法完成

Mycat实战案例(二)_第6张图片

由于一个表格是分片表,一个表格是非分片表格,在底层数据库中关联数据"薯片:1"关联的"1:食品"的类型数据跨分片了,在客户端执行查询时,跨分片的数据库mycat无法使用返回.

2.全局表:解决分片表格与数据量不大的变化稳定的非分片表的关联查询设计的表格结构.

Mycat实战案例(二)_第7张图片

3.全局表特点:

       数据量不大,数据变化不大,稳定,一般都是公司中的工具表,字典表,与业务的关联关系比较多的表格都会在mycat数据库集群中实现全局表的 配置; 比如:页面代码代号 404 500 200......

工具字典表:

  • 代码中使用的是数字数据:1980735799,到工具字典表去查;
  • 198:多省数据
  • 07:上海
  • 357:分波路由器
  • 99:目的地武汉

http编码中看到数字,200,201,404,500

4.修改商品表格的字段(多个分片的数据库中同时修改添加c_id)

Mycat实战案例(二)_第8张图片

5.数据库中创建新的表格category

Mycat实战案例(二)_第9张图片

6.shema.xml配置一个分片表格,一个非分片表格

Mycat实战案例(二)_第10张图片

7.进入数据库查看数据

Mycat实战案例(二)_第11张图片

8.category添加数据信息(非分片)

Mycat实战案例(二)_第12张图片

在Mytest中填写数据

Mycat实战案例(二)_第13张图片

9.product数据清空,添加数据(分片)

Mycat实战案例(二)_第14张图片

1.添加数据在第一分片中

Mycat实战案例(二)_第15张图片

2.添加数据在第二分片中

Mycat实战案例(二)_第16张图片

10.在mycat客户端执行关联查询

select * from product,category where product.c_id=category.id

Mycat实战案例(二)_第17张图片

查不到第二分片的数据,因为上面总结了   跨分片的关联查询无法完成

11.实现schema.xml对category的全局表格配置(多分片复制)

  • 只需要在dataNode中添加 dn2即可,
  • 不设置rule (没分片计算逻辑)就是全局表,而不是分片表,
  • type默认就是global,可写可不写
  • 一定要对应起来,如果你的分片表格,有N个分片,你的全局表必须N个分片

配置好分片表,把对应的表数据同步到其他表中 (复制)global全局复制

Mycat实战案例(二)_第18张图片

category将会由于多个分片的配置,同时没有给定分片规则的xml结构下,直接被定义为一个全局表,

任意插入到当前表格的数据,都会被复制到多个分片中

12.总结全局表格:

当业务逻辑中,业务表格数据庞大需要拆分成分片表个,同时关联查询的非分片表格就不能单独使用非分片配置--引入全局表;

三.ER表

1.ER分片表

mycat不支持跨分片的数据关联查询;分片表余分片表也有可能做关联查询;

Mycat实战案例(二)_第19张图片

  • 每个分片表格都有对应的自己分片计算的,
  • 如果实现多个表格,全部按照一个分片表格定义的分片计算  把相关的数据全部放进一个表格
  • mycat首创ER分片表切分逻辑的中间件(没有ER之前的中间件是必须解决跨分片操作操作的问题的)

2.创建需要的表格

Mycat  无法创建表结构,无法区分,非分片表,分片表....

t_order(id,name),t_order_item(id,title,o_id)

Mycat实战案例(二)_第20张图片

Mycat实战案例(二)_第21张图片

两个分片的数据库中将需要的操作的表格创建处理

3.schema.xml配置t_order和t_order_item的er分片表格关系

Mycat实战案例(二)_第22张图片

这个是错误的案例, ER表不能按照之前的配置来处理

在上一个测试案例中添加数据库准备好的两个表格对应的逻辑ER分片表,测试的分片规则auto-sharding-long

childtable标签:(之前博客有介绍)

  • 表示一个table标签的子标签,定义的是一个逻辑库的子库,实现的内容是ER分片表;
  • name:表格的名称, 
  • primaryKey:主键
  • joinKey:外键字段名称
  • parentKey:外键字段在主表中的字段名称

Mycat实战案例(二)_第23张图片

可配置多个

4.mycat运行

Mycat实战案例(二)_第24张图片

1.运行报错,说明配置不正确,根据错误信息取修改对应的标签

Mycat实战案例(二)_第25张图片

2.标签写错了childTable

Mycat实战案例(二)_第26张图片

成功运行

5.mycat测试ER分片表的逻辑

Mycat实战案例(二)_第27张图片

1.两张表格各自插入一批数据;

2.新增数据时,

子表不支持insert into () values(),(),()批量插入,但是支持同时执行多个insert语句;以后版本应该会可以

mysql> insert into t_order (id,name) values('1','订单1');

Query OK, 1 row affected (0.09 sec)

mysql> insert into t_order (id,name) values('300001','订单2');

Query OK, 1 row affected (0.00 sec)

Mycat实战案例(二)_第28张图片

3.在子表中只能一条一条的添加

Mycat实战案例(二)_第29张图片

4.上午把数据玩炸了,重修部署了一下

Mycat实战案例(二)_第30张图片

第一分片

Mycat实战案例(二)_第31张图片
第二分片

Mycat实战案例(二)_第32张图片

5.订单数据

Mycat实战案例(二)_第33张图片

 

6.查询关联操作时

可以使用别名;select * from t_order a,t_order_item b where a.id=b.o_id 老版本不可以

Mycat实战案例(二)_第34张图片

7.不支持删除语句

delete a,b from t_order a,t_order_item b where a.id=b.o_id and a.id=1

8.但是支持内嵌的in关键字

delete from t_order_item where t_order_item.o_id

in (select id from t_order where t_order.id=1);

delete from t_order where id=1

Mycat实战案例(二)_第35张图片

9.查询结果

Mycat实战案例(二)_第36张图片

四.hash一致性的分片计算

之前的分片计算都是整数范围划分,

对应主键分片计算字段是int,long类型,不适用string类型,时间,

hash一致性对数据的类型有没有要求

1.mycat中hash一致性的原理

对比redis的hash一致性

概念

redis

mycat

节点信息

10.9.9.9:6379

dn1,dn2,dn3

虚拟节点

10.9.9.9:6379#1

10.9.9.9:6379#2

dn1#1,dn1#2

dn2#1,dn2#2

数据

key值

字段值(id,order_id,haha_id)

Mycat实战案例(二)_第37张图片

2.rule.xml中的hash一致性配置

Mycat实战案例(二)_第38张图片

0

2

160

weightMapFile(0=权重整数值,1=权重整数值)

3.schem.xml配置一个hash一致性计算分片的表格

1.数据库新作表格,hashtable(主键char/varchar)Mycat实战案例(二)_第39张图片

2.配置模板

rule="sharding-by-murmur"/>

3.重新启动

Mycat实战案例(二)_第40张图片

4进入Mycat 新增加数据(什么类型都可以都会映射到hash环上)

Mycat实战案例(二)_第41张图片

  • insert into hashtable (id) values('df05c14c-679e-414d-b10a-958a48793382');
  • insert into hashtable (id) values('ecaf1f41-bc7b-4d2d-a237-3731caa11d86');
  • insert into hashtable (id) values('58fbc094-a940-4025-8fcb-e517c8d683b2');

5.进行hash计算分片

Mycat实战案例(二)_第42张图片

第一分片

Mycat实战案例(二)_第43张图片
第二分片

暂告一段落

你可能感兴趣的:(Mycat)