Mycat--实践--07--分片--枚举

Mycat–实践–07–分片–枚举

1、介绍

1.1、配置说明


<tableRule name="sharding-by-intfile">
    <rule>
        <columns>sharding_id</columns>
        <algorithm>hash-int</algorithm>
    </rule>
</tableRule>


<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
    <property name="mapFile">partition-hash-int.txt</property>
    <property name="type">0</property>
    <property name="defaultNode">0</property>
</function>


mapFile

标识配置文件名称

type
  1. 默认值为0,表示值类型,也就是sharding_id的类型
    1. 0表示Integer
    2. 非零表示String
  2. 所有的节点配置都是从0开始,0代表节点1。
defaultNode
  1. 默认节点:
    1. 小于0表示不设置默认节点
    2. 大于等于0表示设置默认节点
    3. 0 表示 默认节点1
  2. 默认节点的作用:
    1. 枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点
    2. 如果不配置默认节点(defaultNode值小于0表示不配置默认节点),碰到不识别的枚举值就会报错

2、测试步骤

测试期望

添加数据时,sharding_id字段值为
1. 10000:插入db1数据库
2. 10010:插入db2数据库
3. 10020:插入db3数据库

步骤1、修改 schema.xml配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<!-- 逻辑库 TESTDB-->
	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
	 <!-- 
	 逻辑表 sys_user,存在3个数据节点中,分别是dn1,dn2,dn3
	 
	 -->
		 <!-- 枚举分片测试 -->
		<table name="sys_user" dataNode="dn1,dn2,dn3" rule="sharding-by-intfile" /> 
	</schema>
 
  <!-- 
	 数据节点,因为dataHost都是localhost1,所有dataHost主机有3个库,分别db1,db2,db3
	 
	 -->
	<dataNode name="dn1" dataHost="localhost1" database="db1" />
	<dataNode name="dn2" dataHost="localhost1" database="db2" />
	<dataNode name="dn3" dataHost="localhost1" database="db3" />
 
 <!-- 
 数据库最大连接是1000,最小连接是10,
 balance="0" 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
 writeType="0" :所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost
 switchType="1":主从切换策略,自动切换
 	 -->
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<!-- 心跳检测语句 -->
		<heartbeat>select user()</heartbeat>
		
		<!-- M1主节点 -->
		<writeHost host="M1" url="192.168.187.130:3307" user="root" password="root"> 
			<!-- 从节点 -->
			<readHost host="M1S1" url="192.168.187.130:3308" user="root" password="root" />
			<readHost host="M1S2" url="192.168.187.130:3309" user="root" password="root" />  
		</writeHost>
		  
		
	</dataHost>
	 
</mycat:schema>

这里面有使用到前面配置的1主2从数据

在这里插入图片描述

步骤2、分析分片规则,修改配置文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修改 partition-hash-int.txt(枚举分片的文件)
cd /usr/local/mycat/conf
vim partition-hash-int.txt 

在这里插入图片描述

步骤3、M1 服务器 创建db1,db2,db3数据库

create database db1;
create database db2;
create database db3;

在这里插入图片描述

步骤4、重启mycat

/usr/local/mycat/bin/mycat  restart

步骤5、创建真实表:sys_user

CREATE TABLE `sys_user` (
  `id` int(11) NOT NULL,
  `username` varchar(20) NOT NULL,
  `address` varchar(20) DEFAULT NULL,
  `sharding_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在这里插入图片描述

对应的3个库,都出现这个表

在这里插入图片描述

步骤6、插入数据测试

INSERT INTO sys_user(id,username,address,sharding_id) VALUES(1,'小明','武汉',10000);
EXPLAIN INSERT INTO sys_user(id,username,address,sharding_id) VALUES(1,'小明','武汉',10000);

INSERT INTO sys_user(id,username,address,sharding_id) VALUES(2,'小明2','武汉2',10010);
EXPLAIN INSERT INTO sys_user(id,username,address,sharding_id) VALUES(1,'小明2','武汉2',10010);

INSERT INTO sys_user(id,username,address,sharding_id) VALUES(3,'小明3','武汉3',10020);
EXPLAIN INSERT INTO sys_user(id,username,address,sharding_id) VALUES(1,'小明3','武汉3',10020);

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值