阅读(574)
赞(11)
Mycat2 分片算法简介
2021-09-08 12:00:29 更新
简介
Mycat2支持常用的(自动)HASH
型分片算法也兼容1.6
的内置的(cobar
)分片算法.
HASH
型分片算法默认要求集群名字以c
为前缀,数字为后缀,c0
就是分片表第一个节点,c1
就是第二个节点.该命名规则允许用户手动改变.
区别
Mycat2 Hash
型分片算法多数基于MOD_HASH(MOD
对应JAVA
的%
运算,实际上是取余运算,而且abs(n)/count等价于abs(n/count)
Mycat2 Hash
型分片算法对于值的处理,总是把分片值转换到列属性的数据类型再运算,而1.x
系列的分片算法统一转换到字符串类型再运算且只能根据一个分片字段计算出存储节点下标。
Mycat2 Hash
型分片算法适用于等价条件查询,而1.x
系列由于含有用户经验的路由规则。
分片算法 | 描述 | 分库 | 分表 | 数值类型 |
---|---|---|---|---|
MOD_HASH | 取模哈希 | 是 | 是 | 数值,字符串 |
UNI_HASH | 取模哈希 | 是 | 是 | 数值,字符串 |
RIGHT_SHIFT | 右移哈希 | 是 | 是 | 数值 |
RANGE_HASH | 两字段其一取模 | 是 | 是 | 数值,字符串 |
YYYYMM | 按年月哈希 | 是 | 是 | DATE,DATETIME |
YYYYDD | 按年月哈希 | 是 | 是 | DATE,DATETIME |
YYYYWEEK | 按年周哈希 | 是 | 是 | DATE,DATETIME |
HASH | 取模哈希 | 是 | 是 | 数值,字符串,如果不是,则转换成字符串 |
MM | 按月哈希 | 否 | 是 | DATE,DATETIME |
DD | 按日期哈希 | 否 | 是 | DATE,DATETIME |
MMDD | 按月日哈希 | 是 | 是 | DATE,DATETIME |
WEEK | 按周哈希 | 否 | 是 | DATE,DATETIME |
STR_HASH | 字符串哈希 | 是 | 是 | 字符串 |
所有分片算法都可以用于分表,但是涉及单独按周、月的HASH
算法不能用于分库
/*+ mycat:createTable{
"schemaName":"db1",
"shadingTable":{
"createTableSQL":"create table travelrecord(id int)",
"function":{
"properties":{
"dbNum":2,
"mappingFormat":"c${targetIndex}/db1_${dbIndex}/travelrecord_${tableIndex}",
"tableNum":2,
"tableMethod":"mod_hash(id)",
"storeNum":2,
"dbMethod":"mod_hash(id)"
}
}
},
"tableName":"travelrecord"
} */;
mappingFormat
使用样例(文件配置)
"shardingTables":{
"log":{
"createTableSQL":"CREATE TABLE cloud.log (nt`id` BIGINT(20) DEFAULT NULL,nt`user_id` BIGINT(20) DEFAULT NULL,nt`service_id` INT(11) DEFAULT NULL,nt`submit_time` DATETIME DEFAULT NULLn) ENGINE = INNODB CHARSET = utf8nDBPARTITION BY YYYYDD(submit_time) DBPARTITIONS 2nTBPARTITION BY MOD_HASH(id) TBPARTITIONS 8",
"function":{
"properties":{
"dbNum":"2",
"mappingFormat":"c${targetIndex}/cloud_${java.time.LocalDate.now().plus(dbIndex.toInteger()).toString().replace("-","")}/log_${tableIndex}",
"tableNum":"8",
"tableMethod":"MOD_HASH(id)",
"storeNum":2,
"dbMethod":"YYYYDD(submit_time)"
}
}
}
}
targetIndex
是目标下标tableIndex
是物理分表下标dbIndex
是物理分库下标index
是总物理分表下标