水平分片表映射关系
逻辑表-水平分片表使用多个物理表(即后端真实数据库中的表)存储数据
所以存在以下一对多映射关系
①分布式数据库实例.逻辑库.逻辑表→存储数据库实例.物理库.物理表
②分布式数据库实例.逻辑库.逻辑表→总物理分表下标
③分布式数据库实例.逻辑库.逻辑表→物理库下标.物理表下标
其中②,③常用于HASH映射
在①中有以下配置项
物理库名字
物理表名字
在②中有以下配置项
总物理分表下标
其中物理分表就是数据分区即分片,总物理分表下标就是分区下标(序号)
在③中有以下配置项
物理库下标范围
每库物理表下标范围
上述两项如果还与总物理分表下标有数学关系,则还可以配置总物理分表下标
例子1
tbpartition by MOD_HASH (id) tbpartitions 6;
上述分片信息,共6个分区
有分表范围table_[0,5]
例子2
dbpartition by MOD_HASH (id) dbpartitions 8
tbpartition by MOD_HASH (id) tbpartitions 6;
上述分片信息,共8*6个分区
有分库范围db[0,7],分表范围table[0,6],分区范围[0,47]
可以选择②或者③两种方式映射
但是使用③形式,在类似以下情况
在分库范围db[0,2],分表范围table[0,2]情况下,
分片值 | 分库下标 | 分表下标 |
---|---|---|
1 | 1 | 1 |
2 | 0 | 0 |
3 | 1 | 1 |
4 | 0 | 0 |
5 | 1 | 1 |
6 | 0 | 0 |
7 | 1 | 1 |
8 | 0 | 0 |
9 | 1 | 1 |
则永远不能使用(0,1),(1,0)分区,实际数据分区少于配置的分区数
在分库范围db[0,7],分表范围table[0,6]情况下,
分片值 | 分库下标 | 分表下标 |
---|---|---|
1 | 1 | 1 |
2 | 2 | 2 |
3 | 3 | 3 |
4 | 4 | 4 |
5 | 5 | 5 |
6 | 6 | 0 |
7 | 7 | 1 |
8 | 0 | 2 |
9 | 1 | 3 |
存在映射不直观,连续的分片值不尽可能存储在的相同存储节点的问题
所以一般使用②方式进行映射
分片值 | 分区下标 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
47 | 47 |
48 | 0 |
49 | 1 |
下标关系
当使用③类型映射的时候使用dbIndex和tableIndex
//分库分表
"function":{
"properties":{
"dbNum":1,
"mappingFormat":"数据源/物理库_${dbIndex}/物理表_${tableIndex}",
"tableNum":10,
"tableMethod":"MM(create_time)",
"storeNum":1,
"dbMethod":"mod_hash(id)"
}
},
//分库分表
"function":{
"properties":{
"dbNum":1,
"mappingFormat":"数据源_${dbIndex}/物理库/物理表_${tableIndex}",
"tableNum":10,
"tableMethod":"MM(create_time)",
"storeNum":1,
"dbMethod":"mod_hash(id)"
}
},
//分表
"function":{
"properties":{
"dbNum":1,
"mappingFormat":"数据源(集群)/物理库/物理表_${tableIndex}",
"tableNum":10,
"tableMethod":"MM(create_time)",
"storeNum":1,
"dbMethod":"mod_hash(id)"
}
},
而使用②类型的时候如果分库分表两个函数使用相同的函数,如果这个函数支持②类型映射,使用index(一般带有)
对应
//分库分表
"function":{
"properties":{
"dbNum":1,
"mappingFormat":"c${targetIndex}/db1_${dbIndex}/sharding_${index}",
"tableNum":10,
"tableMethod":"mod_hash(id)",
"storeNum":1,
"dbMethod":"mod_hash(id)"
}
},
//分表
"function":{
"properties":{
"dbNum":1,
"mappingFormat":"c0/db1/sharding_${index}",
"tableNum":10,
"tableMethod":"mod_hash(id)",
"storeNum":1,
"dbMethod":"mod_hash(id)"
}
},
//分库分表
"function":{
"properties":{
"dbNum":1,
"mappingFormat":"c${targetIndex}/db1_${dbIndex}/sharding_${tableIndex}",
"tableNum":10,
"tableMethod":"mod_hash(id)",
"storeNum":1,
"dbMethod":"mod_hash(id)"
}
},