3.5.2.4 测试
配置完毕后,重新启动MyCat,然后在mycat的命令行中,执行如下SQL创建表、并插入数据,查看数据分布情况。
CREATE TABLE tb_log ( | |
id bigint(20) NOT NULL COMMENT 'ID', | |
model_name varchar(200) DEFAULT NULL COMMENT '模块名', | |
model_value varchar(200) DEFAULT NULL COMMENT '模块值', | |
return_value varchar(200) DEFAULT NULL COMMENT '返回值', | |
return_class varchar(200) DEFAULT NULL COMMENT '返回值类型', | |
operate_user varchar(20) DEFAULT NULL COMMENT '操作用户', | |
operate_time varchar(20) DEFAULT NULL COMMENT '操作时间', | |
param_and_value varchar(500) DEFAULT NULL COMMENT '请求参数名及参数值', | |
operate_class varchar(200) DEFAULT NULL COMMENT '操作类', | |
operate_method varchar(200) DEFAULT NULL COMMENT '操作方法', | |
cost_time bigint(20) DEFAULT NULL COMMENT '执行方法耗时, 单位 ms', | |
source int(1) DEFAULT NULL COMMENT '来源 : 1 PC , 2 Android , 3 IOS', | |
PRIMARY KEY (id) | |
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | |
INSERT INTO tb_log (id, model_name, model_value, return_value, return_class, | |
operate_user, operate_time, param_and_value, operate_class, operate_method, | |
cost_time,source) | |
VALUES('1','user','insert','success','java.lang.String','10001','2022-01-06 | |
18:12:28','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.contro | |
ller.UserController','insert','10',1); | |
INSERT INTO tb_log (id, model_name, model_value, return_value, return_class, | |
operate_user, operate_time, param_and_value, operate_class, operate_method, | |
cost_time,source) | |
VALUES('2','user','insert','success','java.lang.String','10001','2022-01-06 | |
18:12:27','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.contro | |
ller.UserController','insert','23',1); | |
INSERT INTO tb_log (id, model_name, model_value, return_value, return_class, | |
operate_user, operate_time, param_and_value, operate_class, operate_method, | |
cost_time,source) | |
VALUES('3','user','update','success','java.lang.String','10001','2022-01-06 | |
18:16:45','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.contro | |
ller.UserController','update','34',1); | |
INSERT INTO tb_log (id, model_name, model_value, return_value, return_class, | |
operate_user, operate_time, param_and_value, operate_class, operate_method, | |
cost_time,source) | |
VALUES('4','user','update','success','java.lang.String','10001','2022-01-06 | |
18:16:45','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.contro | |
ller.UserController','update','13',2); | |
INSERT INTO tb_log (id, model_name, model_value, return_value, return_class, | |
operate_user, operate_time, param_and_value, operate_class, operate_method, | |
cost_time,source) | |
VALUES('5','user','insert','success','java.lang.String','10001','2022-01-06 | |
18:30:31','{\"age\":\"200\",\"name\":\"TomCat\",\"gender\":\"0\"}','cn.itcast.co | |
ntroller.UserController','insert','29',3); | |
INSERT INTO tb_log (id, model_name, model_value, return_value, return_class, | |
operate_user, operate_time, param_and_value, operate_class, operate_method, | |
cost_time,source) | |
VALUES('6','user','find','success','java.lang.String','10001','2022-01-06 | |
18:30:31','{\"age\":\"200\",\"name\":\"TomCat\",\"gender\":\"0\"}','cn.itcast.co | |
ntroller.UserController','find','29',2); |
3.5.3 分片规则
3.5.3.1 范围分片
1). 介绍
根据指定的字段及其配置的范围与数据节点的对应情况, 来决定该数据属于哪一个分片。
2). 配置
schema.xml逻辑表配置:
<table name="TB_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
schema.xml数据节点配置:
<dataNode name="dn1" dataHost="dhost1" database="db01" /> | |
<dataNode name="dn2" dataHost="dhost2" database="db01" /> | |
<dataNode name="dn3" dataHost="dhost3" database="db01" /> |
rule.xml分片规则配置:
<tableRule name="auto-sharding-long"> | |
<rule> | |
<columns>id</columns> | |
<algorithm>rang-long</algorithm> | |
</rule> | |
</tableRule> | |
<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong"> | |
<property name="mapFile">autopartition-long.txt</property> | |
<property name="defaultNode">0</property> | |
</function> |
分片规则配置属性含义:
在rule.xml中配置分片规则时,关联了一个映射配置文件 autopartition-long.txt,该配置文
件的配置如下:
# range start-end ,data node index | |
# K=1000,M=10000. | |
0-500M=0 | |
500M-1000M=1 | |
1000M-1500M=2 |
含义:0-500万之间的值,存储在0号数据节点(数据节点的索引从0开始) ;500万-1000万之间的数据存储在1号数据节点 ;1000万-1500万的数据节点存储在2号节点 ;
该分片规则,主要是针对于数字类型的字段适用。在MyCat的入门程序中,我们使用的就是该分片规则。