原创

mycat字符串hash求模范围算法

与取模范围算法类似,该算法支持数值、符号、字母取模,此方式就是将指定位数的字符的ascll码的和进行取模运算,配置如下:
1、在node01,node02,node03创建表user3

CREATE TABLE `user3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、修改schema.xml文件

<table name="user3" primaryKey="id" dataNode="dn1,dn2,dn3" rule="sharding-by-prefixpattern"></table>

3、修改rule.xml

<!--
columns标识将要分片的表字段
algorithm为分片函数
mapFile:切分规则配置文件
patternValue:求模基数
prefixLength:ASCII 截取的位数
-->
<tableRule name="sharding-by-prefixpattern">
	<rule>
		<columns>name</columns>
		<algorithm>sharding-by-prefixpattern</algorithm>
	</rule>
</tableRule>
<function name="sharding-by-prefixpattern" class="io.mycat.route.function.PartitionByPrefixPattern">
	<property name="mapFile">partition-pattern.txt</property>
	<property name="patternVAlue">256</property>
	<property name="prefixLength">5</property>
</function>

4、修改partition-pattern.txt文件

# ASCII
# 8-57=0-9 阿拉伯数字
# 64、 65-90=@、 A-Z
# 97-122=a-z  
0-86=0
87-173=1
174-256=2

5、重启mycat服务

6、插入如下数据

insert into user3(id,name) values(1,'zhangsan');
insert into user3(id,name) values(2,'lisi');
insert into user3(id,name) values(3,'wangwu');
insert into user3(id,name) values(4,'zzzzzzz');
insert into user3(id,name) values(5,'z99');

可以看到数据被分散了,但是因为ascll码值是需要计算的,所以结果可能不是很明显,大家需要自己的拼字符串来试验。

本文链接地址:http://www.ysxbohui.com/article/106

正文到此结束