分片枚举
上面columns 标识将要分片的表字段,algorithm 分片函数,
其中分片函数配置中,mapFile标识配置文件名称,type默认值为0,0表示Integer,非零表示String,
所有的节点配置都是从0开始,及0代表节点1
/**
* defaultNode 默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点,结点为指定的值
*
默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点
* 如果不配置默认节点(defaultNode值小于0表示不配置默认节点),碰到
* 不识别的枚举值就会报错,
* like this:can't find datanode for sharding column:column_name val:ffffffff
*/
- 范围约定 此分片适用于提前规划好分片字段某个范围属于哪个分片
- 求摸法 根据id进行十进制求摸运算,运算结果为分区索引 注意:数据库节点分片数量无法更改。
rule.xml 文件新增 <tableRule name="role1"> <rule> <columns>id</columns> <algorithm>mod-long</algorithm> </rule> </tableRule> <function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <!--指定分片数量,不可以被更改--> <property name="count">3</property> </function>
schema.xml <table name="user_info" dataNode="dn1,dn2,dn3" rule="role1"/> 数据库表结构 CREATE TABLE `user_info` ( `id` int(11) DEFAULT NULL, `name` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
- 日期列分区法 按日期(天)分片
关闭防火墙:systemctl stop firewalld.service
yum -y install net-tools
netstat -tunlp | grep 1984
kill -9 2408
CREATE TABLE `user_info` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;