水平分片表映射关系

逻辑表-水平分片表使用多个物理表(即后端真实数据库中的表)存储数据
所以存在以下一对多映射关系

①分布式数据库实例.逻辑库.逻辑表→存储数据库实例.物理库.物理表
image.png

②分布式数据库实例.逻辑库.逻辑表→总物理分表下标
image.png
③分布式数据库实例.逻辑库.逻辑表→物理库下标.物理表下标
image.png

其中②,③常用于HASH映射

在①中有以下配置项
物理库名字
物理表名字

在②中有以下配置项
总物理分表下标
其中物理分表就是数据分区即分片,总物理分表下标就是分区下标(序号)

在③中有以下配置项
物理库下标范围
每库物理表下标范围

上述两项如果还与总物理分表下标有数学关系,则还可以配置总物理分表下标

例子1

  1. tbpartition by MOD_HASH (id) tbpartitions 6;

上述分片信息,共6个分区
有分表范围table_[0,5]

例子2

  1. dbpartition by MOD_HASH (id) dbpartitions 8
  2. 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

  1. //分库分表
  2. "function":{
  3. "properties":{
  4. "dbNum":1,
  5. "mappingFormat":"数据源/物理库_${dbIndex}/物理表_${tableIndex}",
  6. "tableNum":10,
  7. "tableMethod":"MM(create_time)",
  8. "storeNum":1,
  9. "dbMethod":"mod_hash(id)"
  10. }
  11. },
  1. //分库分表
  2. "function":{
  3. "properties":{
  4. "dbNum":1,
  5. "mappingFormat":"数据源_${dbIndex}/物理库/物理表_${tableIndex}",
  6. "tableNum":10,
  7. "tableMethod":"MM(create_time)",
  8. "storeNum":1,
  9. "dbMethod":"mod_hash(id)"
  10. }
  11. },
  1. //分表
  2. "function":{
  3. "properties":{
  4. "dbNum":1,
  5. "mappingFormat":"数据源(集群)/物理库/物理表_${tableIndex}",
  6. "tableNum":10,
  7. "tableMethod":"MM(create_time)",
  8. "storeNum":1,
  9. "dbMethod":"mod_hash(id)"
  10. }
  11. },

而使用②类型的时候如果分库分表两个函数使用相同的函数,如果这个函数支持②类型映射,使用index(一般带有)
对应

  1. //分库分表
  2. "function":{
  3. "properties":{
  4. "dbNum":1,
  5. "mappingFormat":"c${targetIndex}/db1_${dbIndex}/sharding_${index}",
  6. "tableNum":10,
  7. "tableMethod":"mod_hash(id)",
  8. "storeNum":1,
  9. "dbMethod":"mod_hash(id)"
  10. }
  11. },
  1. //分表
  2. "function":{
  3. "properties":{
  4. "dbNum":1,
  5. "mappingFormat":"c0/db1/sharding_${index}",
  6. "tableNum":10,
  7. "tableMethod":"mod_hash(id)",
  8. "storeNum":1,
  9. "dbMethod":"mod_hash(id)"
  10. }
  11. },
  1. //分库分表
  2. "function":{
  3. "properties":{
  4. "dbNum":1,
  5. "mappingFormat":"c${targetIndex}/db1_${dbIndex}/sharding_${tableIndex}",
  6. "tableNum":10,
  7. "tableMethod":"mod_hash(id)",
  8. "storeNum":1,
  9. "dbMethod":"mod_hash(id)"
  10. }
  11. },