MyCat的分片规则(一)

MyCat的分片规则(一)

概述

  什么是 MyCat 的分片规则呢? 使用了 MyCat 之后,我们所有的数据库操作都是针对 MyCat ,增删改查都是针对 MyCat 进行操作,MyCat 会将我们的 SQL 进行分析,分析之后,会根据提前配置好的规则将 SQL 转发到对应的 MySQL 上面去执行。这个提前定义好的规则就就叫做 分片规则。

  在数据切分处理中,特别是水平切分中,中间件最终要的两个处理过程就是数据的切分、数据的聚合。选择合适的切分规则,至关重要,因为它决定了后续数据聚合的难易程度,甚至可以避免跨库的数据聚合处理。前面讲了数据切分中重要的几条原则,其中有几条是数据冗余,表分组(Table Group),这都是业务上规避跨库 join 的很好的方式,但不是所有的业务场景都适合这样的规则,因此本章将讲述如何选择合适的切分规则。

global

  有一些表,数据量不大,也不怎么修改,主要是查询操作,这一类表我们可以使用 global 这种分片规则。global的特点是,该表会在所有的库中都创建,而且每一个库中都保存了该表的完整数据。具体配置方式,就是在 schema.xml 的 table 节点中添加一个 type 属性,其值为 global 。
在这里插入图片描述
配置完成后保存并退出,然后重启 MyCat ,在mycat目录下:

./bin/mycat restart

重启完成后,要删除之前已经创建好的book表,然后重新创建表,创建完成后,向表中插入数据,可以看到 db1、db2、db3 库中都有数据了。
在这里插入图片描述
注意:这里,虽然查询出来的数据记录只有一条,实际上 db1、db2、db3 库中都有该条记录。
总结:global 适合于数据量不大、以查询为主、增删改较少的表。

枚举分片(sharding-by-intfile)

  sharding-by-intfile 这个是枚举分片,就是在数据表中专门设计一个字段,以后根据这个字段的值来决定数据插入到哪个 dataNode 上。
注意:在配置 sharding-by-intfile 规则是,一定要删除 type=“global”,否则配置不会生效,具体配置如下:
在这里插入图片描述
配置完成后,还需要指定枚举的数据。枚举的数据可以在 rule.xml 中查看。
在这里插入图片描述
在 rule.xml 文件中,首先找到 tableRule 的名字为 sharding-by-intfile 的节点,这个节点中定义了两个属性,一个是 columns 表示一会在数据表中定义的枚举列的名字(数据表中一会需要创建一个名为 sharding_id的列,这个列的值决定了该条数据保存在哪个数据库实例中),这个名字可以自定义; 另外一个属性叫做 algorithm ,这是指 sharding-by-intfile 所对应的算法名称。根据这个名称,可以在 rule.xml 文件中找到具体的算法:
在这里插入图片描述
我们找到了 hash-int,class 表示这个算法对应的Java 类的路径。第一个属性 mapFile 表示相关的配置文件,从这个文件名可以看出,这个文件就在conf 目录下。

打开 conf 目录下的partition-hash-int.txt 文件,内容如下:
在这里插入图片描述
其中前面的数字表示枚举的值,后面的数字表示 dataNode 的下标,所以前面的数字可以自定义,后面的数字不能随意定义。
配置完成后,重启 MyCat ,然后进行测试:
在这里插入图片描述
我们看到的结果,其中 sharding_id 对应的值分别为 0、1、2 的记录分别插入到 db1、db2、db3 中。

auto-sharding-long

auto-sharding-long 表示按照既定的范围去存储数据。就是提前规划好某个字段的值在某个范围时,相应的记录存到某个 dataNode 中。
配置方式,首先修改路由规则:
在这里插入图片描述
然后去 rule.xml 中查看对应的算法了规则相关的配置:
在这里插入图片描述
可以看到,默认是按照 id 的范围来划分数据的存储位置的,对应的算法就是 rang-long 。
在这里插入图片描述
继续查看,我们可以找到算法对应的类,以及相关的配置文件名,这个配置文件也在 conf 目录下,打开并编辑该文件:
在这里插入图片描述
配置如上,其配置表示:

  • 当 id 的取值在 0-5 之间时,将数据存储到 db1 中;
  • 当 id 的取值在 5-10 之间时,将数据存储到 db2 中;
  • 当 id 的取值在 10-1500M 之间时,将数据存储到 db3 中。

配置完成后,重启MyCat,测试:
在这里插入图片描述
在这里插入图片描述
根据上面的截图可以明确的看出来,该 auto-sharding-long 分片规则数据存储,其算法的配置文件,是左闭右开规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值