sharding proxy 分库分表使用相同的字段进行hash,分库成功,分表失败,数据只会路由到不同分库的同一张表中

方便更快捷的说明问题,可以按需填写(可删除)

使用环境:

sharding proxy 5.1.2,一张逻辑表app_verify_sdk分了4个库,然后在每个库中又分了2张表,分了4*2 =8张物理表表并且分库和分表的规则都是hash mod,并且分库和分表的字段都是同一个字段verify。

场景、问题:

分库分表的规则
app_verify_sdk:
actualDataNodes: dsapp_${0…3}.app_verify_sdk_${0…1}
databaseStrategy:
standard:
shardingColumn: verify
shardingAlgorithmName: database_inline
tableStrategy:
standard:
shardingColumn: verify
shardingAlgorithmName: app_verify_sdk_verify_inline
keyGenerateStrategy:
column: id
keyGeneratorName: snowflake

database_inline:
type: HASH_MOD
props:
sharding-count: 4

app_verify_sdk_verify_inline:
type: HASH_MOD
props:
sharding-count: 2

已进行操作:

source导入数据以后,观察后端的8个物理表的数据量

现状:

实际测试分库分表使用hash mod ,并且分库分表使用同一个字段进行hash,分库是可以正常工作。数据会路由到四个分库中,但是分表异常,原本预期是同一个数据库中的两个分表都有数据,但是实际上数据只会存放在每个分库的后端的一张表中。另外一张表是空的。

分片数量设计有问题,模 4 得到奇数的 id,模 2 一定也是奇数,不会分散到两张表中的。

用autotable直接定义分片个数和ds个数,就不存在这个问题了吧?

是的,实际上 HASH_MOD 是自动分片算法,应该和 autoTable 搭配使用。

京ICP备2021015875号