Mycat分片规则

目录

分片枚举

固定分片hash算法

范围约定

取模

按日期(天)分片

取模范围约束

截取数字做hash求模范围约束 

应用指定

截取数字hash解析 

一致性hash

按单月小时拆分

范围取模分片

日期范围hash分片

冷热数据分片

自然月分片


分片枚举

通过在配置文件中配置可能的枚举id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省 份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下:


	
    	sharding_id
		hash-int
	


	partition-hash-int.txt
    0
	0


partition-hash-int.txt 配置: 
10000=0 
10010=1 

配置说明:

columns :标识将要分片的表字段

algorithm :分片函数

mapFile:切分配置文件名称

type:默认为0,0表示Integer,非零表示String

defaultNode:默认节点。节点配置从0开始,即0代表节点1

                       分片时如果没有识别到枚举值,就会路由到默认节点;如果不配置默认结点,识别不到枚举值时会报错

固定分片hash算法

本条规则类似于十进制的求模运算,区别在于是二进制的操作,是取id的二进制低10位,即id二进制 &1111111111。

此算法的优点在于如果按照 10进制取模运算,在连续插入1-10 时候1-10会被分到1-10个分片,增 大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务事务控制难度。 


	
	    id
	    func1
	


	2,1
	256,512

配置说明:

columns :标识将要分片的表字段

algorithm :分片函数

partitionCount:分片个数列表

partitionLength:分片范围列表

分区长度默认最大1024

1024 = sum((count[i]*length[i])). count 和length两个向量的点积恒等于1024

范围约定

此分片适用于提前规划好分片字段某个范围属于哪个分片


	
		id
		rang-long
	


	autopartition-long.txt
    0


autopartition-long.txt文件配置
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2

 配置说明:

columns :标识将要分片的表字段

algorithm :分片函数

mapFile:切分配置文件名称

defaultNode:超出范围后默认路由节点

取模

对分片字段取模运算,根据分片字段进行十进制求模预算,相比固定分片hash,此种在批量插入时可能存在批量插入单 事务插入多数据分片,增大事务一致性难度。 


	
		id
		mod-long
	


	
	3

  配置说明:

columns :标识将要分片的表字段

algorithm :分片函数

count:分片的数量

按日期(天)分片

 
    
        create_time 
        sharding-by-date 
    
 
             
    yyyy-MM-dd
    2018-08-01 
    2018-08-31 
    15

配置说明:

 columns :标识将要分片的表字段

algorithm :分片函数

dateFormat :日期格式

sBeginDate :开始日期

sEndDate:结束日期

sPartionDay :分区天数,即默认从开始日期算起,分隔 10天一个分区

注:

sEndDate代表数据达到了这个日期的分片后后循环从开始分片插入,若不配置数据到达分片时间范围后会报错

取模范围约束

取模运算与范围约束的结合,先取模然后根据取模值范围分片,主要为了后续数据迁移做准备,即可以自主决定取模后数据的节点 分布


    
        user_id
        sharding-by-pattern
    


    256
    0
    partition-pattern.txt 


partition-pattern.txt文件配置
# id partition range start-end ,data node index
###### first host configuration
1-32=0
33-64=1 
65-96=2
97-128=3
######## second host configuration
129-160=4
161-192=5
193-224=6
225-256=7
0-0=7 

配置说明:

 columns :标识将要分片的表字段

algorithm :分片函数

patternValue:取模基数

defaultNode:默认节点

mapFile:切分配置文件名称

截取数字做hash求模范围约束 

则类似于取模范围约束,此规则支持数据符号字母取模。 


    
        user_id
        sharding-by-prefixpattern
    


    256
    5
    partition-pattern.txt 
 

partition-pattern.txt文件配置
# range start-end ,data node index
# ASCII
# 8-57=0-9 阿拉伯数字
# 64、65-90=@、A-Z 
# 97-122=a-z 
###### first host configuration
1-4=0
5-8=1
9-12=2
13-16=3
###### second host configuration
17-20=4
21-24=5
25-28=6
29-32=7
0-0=7

配置说明:

 columns :标识将要分片的表字段

algorithm :分片函数

patternValue:取模基数

prefixLength :ASCII 截取的位数 ,种获取前prefixLength位列所有ASCII 码的和进行求模 sum%patternValue

应用指定

在运行阶段由应用自主决定路由到那个分片,直接根据字符子串(必须是数字)计算分区号(由应用传递参数,显式指定分区号)


    
        user_id
        sharding-by-substring
    


    0 
    2
    8
    0

 配置说明:

 columns :标识将要分片的表字段

algorithm :分片函数

startIndex:截取开始位置

size:截取长度

partitionCount:分区数量

defaultPartition:默认分区号

例:id=05-100000002 在此配置中代表根据id中从 startIndex=0,开始,截取 siz=2位数字即05,05就是获取的分区,如果没传默认分配到defaultPartition 

截取数字hash解析 

是截取字符串中的int数值hash 分片


    
        user_id
        sharding-by-stringhash
    


    512
    2
    0:2

配置说明:

 columns :标识将要分片的表字段

algorithm :分片函数

partitionLength:字符串hash求模基数

partitionCount:分区数

hashSlice:hash预算位,即根据子字符串中int值 hash运算,0 代表 str.length(), -1 代表 str.length()-1

例:值“45abc”,hash预算位0:2 ,取其中45进行计算

       值“aaaabbb2345”,hash预算位-4:0 ,取其中2345进行计算

一致性hash

一致性hash预算有效解决了分布式数据的扩容问题


    
        create_time
        sharding-by-murmur
    


    0
    3
    160
    

配置说明:

 columns :标识将要分片的表字段

algorithm :分片函数

seed:hash 种子值

count: 要分片的数据库节点数量,必须指定,否则没法分片

virtualBucketTimes:一个实际的数据库节点被映射为多少虚拟节点,默认是 160 倍,也就是虚拟节点数是物理节点数的 160 倍

bucketMapPath:用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的 murmur hash 值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 

weightMapFile:节点的权重,没有指定权重的节点默认是 1。以 properties 文件的格式填写,以从 0 开始到 count-1 的整数值也就是节点索引为 key,以节点权重值为值。所有权重值必须是正整数,否则以 1 代

按单月小时拆分

此规则是单月内按照小时拆分,最小粒度是小时,可以一天最多 24个分片,最少1个分片,一个月完后下月 从头开始循环。 每个月月尾,需要手工清理数据


    
        create_time
        sharding-by-hour
    


    24

配置说明:

columns: 拆分字段,字符串类型(yyyymmddHH)

algorithm :分片函数

splitOneDay : 一天切分的分片数

范围取模分片


    
        id
        rang-mod
    


    partition-range-mod.txt
    0


partition-range-mod.txt文件配置
# range start-end ,data node group size
0-200M=5
200M1-400M=1
400M1-600M=4
600M1-800M=4
800M1-1000M=6

配置说明:

 columns :标识将要分片的表字段

algorithm :分片函数

mapFile:切分配置文件名称

defaultNode:默认节点

注:0-200M=5 表示在 0-200M范围中,有5个dataNode

日期范围hash分片

思想与范围求模一致,当由于日期在取模会有数据集中问题,所以改成 hash方法。 先根据日期分组,再根据时间hash使得短期内数据分布的更均匀,可以避免扩容时的数据迁移,又可以一定程度上避免范围分片的热点问题 


    
        create_time
        sharding-by-range-date-hash
    


    yyyy-MM-dd HH:mm:ss
    2018-08-01 00:00:00
    3
    6

配置说明:

 columns :标识将要分片的表字段

algorithm :分片函数

dateFormat:日期格式

sBeginDate:开始日期,必须与dateFormat一致

sPartionDay:多少天分一个组

groupPartionSize:每组的分片数量
注:要求日期格式尽量精确些,不然达不到局部均匀的目的 

冷热数据分片

根据日期查询日志数据 冷热数据分布 ,最近n个月的到实时交易库查询,超过n个月的按照m天分片


	
		create_time
		sharding-by-hotdate
	


	yyyy-MM-dd
	10
	30

配置说明:

 columns :标识将要分片的表字段

algorithm :分片函数

dataFormat:时间格式化

sLastDay:热数据的天数

sPartionDay:冷数据的分片天数(按照天数分片)

自然月分片

按照月份列分片,每个自然月一个分片


    
        create_time
        sharding-by-month
    


    yyyy-MM-dd
    2018-08-01

配置说明:

 columns :标识将要分片的表字段

algorithm :分片函数

dataFormat:时间格式化

sBeginDate:开始日期

你可能感兴趣的:(Mycat)