mycat分片枚举 水平分表

  • 准备与说明

场景

根据数据表某个字段的值,手动配置分片,例如:不同省份的数据保存到不同节点。这里举例:订单区域表(orders_area_info)根据区域编号字段(areacode)的将不同区域的数据存储到不同的节点

拆分方案及定义

  1. 在文章 https://blog.csdn.net/shuair/article/details/118885670(mycat水平分表) 描述内容的基础上,添加订单区域表(orders_area_info)
  2. mycat逻辑库:TESTDB103
  3. mysql物理库:两个节点,库名均为orders103

准备:提前搭建好mycat,可以参考文章:https://blog.csdn.net/shuair/article/details/118546292

  • 修改schema.xml

警告:所有的schema写在一起、所有的dataNode写在一起、所有的dataHost写在一起

<table name="orders_area_info" dataNode="dn10301,dn10302" rule="orders-sharding-by-intfile"></table>
  • 修改rule.xml

警告:所有的tableRule写在一起、所有的function写在一起

<!-- 省略其它tableRule -->
<!-- 配置一个分表规则 -->
<tableRule name="orders-sharding-by-intfile">
	<rule>
                <!-- 分片字段 -->
    	        <columns>areacode</columns>
                <!-- 分片算法 -->
		<algorithm>orders-hash-int</algorithm>
        </rule>
</tableRule>

<!-- 省略其它function -->
<!-- 定义分片算法,后面有写好的算法hash-int,复制一份,调整内容即可 -->
<function name="orders-hash-int" class="io.mycat.route.function.PartitionByFileMap">
    <!-- 配置文件 -->
	<property name="mapFile">orders-partition-hash-int.txt</property>
    <!-- 0为int型,非0为String -->
    <property name="type">1</property>
    <!-- 小于0表示不设置默认节点,大于等于0表示设置默认节点,数值为节点的编号,编号从0开始。遇到不识别的枚举值时,设置默认节点路由到默认节点,不设置默认节点则报错 -->
    <property name="defaultNode">0</property>
</function>
  • 创建分片算法配置文件

rule.xml同目录(conf目录)创建配置文件 :orders-partition-hash-int.txt,在这个文件中手动指定区域编号与节点之间的对应关系

110=0
120=1

重启mycat

  • 创建数据表

可以在mycat窗口创建数据表,但是可能会出现异常,这里直接在mysql数据库创建表,两个节点分别创建订单区域表(orders_area_info )

DROP TABLE IF EXISTS orders_area_info;
CREATE TABLE orders_area_info (
`id` INT auto_increment PRIMARY KEY COMMENT '主键',
`order_id` INT COMMENT '订单编号',
`address` VARCHAR ( 200 ) COMMENT '地址',
`areacode` VARCHAR ( 20 ) COMMENT '区域编号' 
);
  • 添加测试数据

在mycat窗口添加测试数据

INSERT INTO `orders_area_info` ( `id`, `order_id`, `address`, `areacode` ) VALUES ( 1, 1, '北京', '110' );
INSERT INTO `orders_area_info` ( `id`, `order_id`, `address`, `areacode` ) VALUES ( 2, 2, '天津', '120' );

此时查看数据库,会发现:areacode=110的数据在第1个节点上,areacode=120的数据在第2个节点上

此时mycat分片枚举就配置完成了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值