使用DM同步MySQL生产数据,如果源端主键使用自增或雪花生成的主键,目标端不想因为此种方式产生写入热点,目标端的表主键想修改的话,同步的配置过程和直接同步的过程区别在哪里?谢谢
先估算数据规模吧,如果规模不会太大,就不会有热点了,放心用。最多就是写倾斜,或者读倾斜
数据的处理是依靠主键来识别的,主键不唯一,就只能退化到 append model
管理 TiDB Data Migration 迁移表的表结构 - v6.5 | TiDB 文档中心
这是官方文档的解释,没找到全量时如果表结构不一致的处理方法。
如果其他方案不合适的话可以考虑用新表新增随机自增主键作为新主键
保留主键 + 增加打散索引(最推荐)
在 TiDB:
SHARD_ROW_ID_BITS = 4;
或:
PRE_SPLIT_REGIONS = 4;
作用:
自动打散写入
避免热点
不影响DM同步
2 个赞
使用非聚簇索引主键(重点)
PRIMARY KEY(id) NONCLUSTERED
隐藏 rowid:
写入按 rowid 分布(更均匀)
2 个赞
这样设计表之后用DM同步时应该怎么操作法?
官方文档没有找到主键不同时的配置,只有使用ON DUPLICATE KEY UPDATE写入时才有影响吧
如果业务不强依赖该自增列的主键身份(例如只是为了排序或分页),可以将其改为普通列或辅助索引,从而利用 TiDB 的 SHARD_ROW_ID_BITS 特性打散写入热点
直接同步由 DM 自动同步表结构,主键改造需手动在 TiDB 创建打散热点的目标表
感谢老师分享
这个方案应该可行