mycat水平切分(分库分表)规则配置rule.xml

rule.xml的tableRule标签配置表的分片规则


	
		id
		hash-mode-5
	

name指定分片规则名字,唯一性;
columns指定用于分片的mysql实体表的字段,
algorithm指定使用的分片算法,取自标签定义的函数,函数的实现是编写在java代码中的

rule.xml的function标签配置表的分片算法


	5

定义了hash-mod-5使用io.mycat.route.function.PartitionByHashMod"这个java类来实现分片算法 ,count是其参数

常用分片算法以及rule.xml中的配置

1.简单取模-PartitionByMod

适用于根据整数字段进行分片,取模的值对应分片库的序号,比如某条记录的id=100, mod 3 = 1,那这条记录就在分片db2(分片节点的序号从0开始)上

简单取模算法简单,存储均匀,但是伸缩不方便


	
		users_Fid
		mod-long
	


	3

2.哈希取模-PartitionByHashMod

针对非整数字段,通过哈希算法得到一个整数值,然后再进行取模分片

通过哈希取模,因为哈希得到的整数值是随机的,所以数据更具分散性,但是多条记录的分片字段的值相同的时候它们哈希取模的值也相同,会被储存到同一分片,比如有100条订单记录,其中98条是用户A的,其他分别是B、C的,如果根据用户名字段进行哈希取模分片,那么A的98条记录都会集中在同一分片中,只有其它2条在别的分片中,造成数据存储不均匀


	
		users_Fname
		hash-mod
	


	3

3.枚举分片-PartitionByFileMap

人为指定分片字段值对应哪个分片节点,比如:根据所在城市字段Fcity_id进行分片,直接通过mapFile配置城市id和db一一对应,所在城市的记录就存在对应的db中


	
		users_Fcity_id
		map-city
	


	partition-map-city.txt
	0
	0

partition-map-city.txt这个mapFile文件放在/usr/local/mycat/conf/目录下,
type属性指定枚举值类型:0表示整型,非0表示字符串型
defaultNode属性配置是否使用默认的节点:<0不使用,>=0使用(具体的节点值在mapFile中定义)

4.字符串范围取模分片-PartitionByPrefixPattern

根据指定字符串的前N个字符确定分片,比如根据订单号的前3个字符来分片存储
订单号前3位是ABC,进行模运算:mod(ASCII(A)+ASCII(B)+ASCII©,128)=70
逻辑顺序:
首先,计算ABC的ascii码值之和=65+66+67=198;
然后,根据一个自定义的基数取模,198%128=70
最后,将取模的值匹配mapFile中设置(0-63=0 64-127=1)的对应的分片DB2


	
		Fbid
		prefixpattern-mod
	


	128
	3
	prefix-partition-pattern.bill.txt

patternValue属性是取模基数
prefixLength属性是取分片字段的前几个字符来运算

你可能感兴趣的:(mysql,Linux,mycat)