需求反馈
【需求涉及的问题场景】
MySQL迁移兼容性问题:
原业务系统使用MySQL通过Sharding-JDBC分表,且分表逻辑为UUID类型字符串字段HASH取模。当前希望迁移到TiDB,然而试图采用PARTITION BY HASH(CRC32(store_id))
对字符串字段 store_id
分区,但TiDB的HASH分区仅支持整型字段,且分区表达式函数列表不包含 CRC32()
。
【期望的需求行为】
- 扩展分区表达式支持:
- 允许在分区表达式中使用
CRC32()
函数,实现字符串到整型的转换(如PARTITION BY HASH(CRC32(store_id))
)。 - 或 更优方案:使HASH分区直接支持字符串字段,由TiDB内部自动处理哈希计算(如
PARTITION BY HASH(store_id)
)。
- 允许在分区表达式中使用
【需求可替代方案】
方案 | 缺点 |
---|---|
沿用Sharding-JDBC分表 | 失去TiDB内置分区优化(如分区裁剪、自动数据分布),需维护中间件,增加运维复杂度。 |
新增整型冗余字段 | 需改造业务逻辑: - 所有写入操作需预计算 CRC32(store_id) 并存为额外字段;- 所有查询需显式携带哈希值,代码侵入性强。 |
【背景信息】
- 受益用户:
- 从MySQL迁移至TiDB且依赖
CRC32()
分区的业务(如电商、IoT场景)。 - 使用字符串主键(如UUID)分库分表的系统,需最小化迁移成本。
- 从MySQL迁移至TiDB且依赖
- 关键场景:
- 分片逻辑迁移:原分表键为UUID类型的
store_id
(如店铺ID),需在TiDB保持相同数据分布策略。 - 查询性能优化:避免全表扫描,利用分区裁剪加速
WHERE store_id=xxx
类查询。
- 分片逻辑迁移:原分表键为UUID类型的