来了老弟
1
【问题澄清】
- 当 dm 在下游 tidb 中创建表结构时,该如何微调部分表结构信息来避免写入热点问题,譬如:
- 上游 rds 中 id 是自增主键,下游 tidb 中改为唯一索引 ;并且通过增加 SHARD_ROW_ID_BITS 以及 PRE_SPLIT_REGIONS 来实现预打散的目的。
上游 rds 表结构
CREATE TABLE `test` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`age` bigint(20) NOT NULL,
primary KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
期望下游 tidb 中的表结构为
CREATE TABLE `test` (
`id` bigint(20) unsigned NOT NULL,
`age` bigint(20) NOT NULL,
unique KEY uk_id(`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=4;
【解决方案】
- 去掉 id 中 primary key / auto-increment 属性,并添加 tidb 特有表/列属性 SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=4 / unique key(id) ,并将修改后的表结构导入到 tidb 集群中。
-
不需要对 mydumpers 和 loaders 部分进行特殊配置
- >start-task tmp_task.yaml
【注意事项】
- 修改表结构需要注意对比上下游表的字段类型,以免在 check-task 环节出现问题。
- 目前可以对下游表结构进行无影响的结构变更譬如,pk 变为 uk,增加 SHARD_ROW_ID_BITS 和 PRE_SPLIT_REGIONS 属性,auto_random 属性。
【扩展】
- 当前 loader 在导入表结构时,如果下游出现同表名将会忽略导入。
【经典案例】