dumpling 是由 go 语言编写的用于对数据库进行数据导出的工具。目前支持 mysql 协议的数据库,并且针对 tidb 的特性进行了优化。go dumpling! 让导出数据更稳定文章对 dumpling 进阶使用进行了介绍。本文接下来将会介绍 dumpling 内部表内并发的优化逻辑,从而帮助大家更深刻地理解 dumpling 工作原理。
为什么需要表内并发
导出 mysql 时的表内并发
首先选取第一列为整数的索引列记为 field,按照主键、唯一索引、具有最大 cardinality 的索引的顺序进行选取,从而保证该列整型数据尽量不同。选择好整数列后,dumpling 通过 explain 语句粗略估算该表在限定条件下会导出的数据行数并记为 count。根据开头指定了划分行数大小的参数 rows,可以得到 dumpling 需要将数据划分为 count/rows 个 chunk。随后通过 select min(field), max(field) 的方式得出在限定条件下的数据中的最大最小 field 记为 max_field 与 min_field。假设在这个范围内数据是呈现大体均匀分布的,则可以求出划分步长为 d=(max_field-min_field)*rows/count。各个表内并发 chunk 通过 where 条件约束,范围分别为 [min_field, min_field d), [min_field d, min_field 2d) …
导出 tidb v3.0/v4.0 时的表内并发
导出 tidb v5.0 时的表内并发
dumpling 后续开发计划
以下为 dumpling 后续开发的一些计划与设想。目前 dumpling 已经迁移到 tidb repo,欢迎大家在 dumpling repo 一起交流讨论,参与开发。
支持导出更多种类的源数据库(issue#11)
支持导出 sequence(issue#61)
支持 checksum 校验
支持 checkpoint(issue#10)
「喜欢文章,快来给作者赞赏墨值吧」
文章转载自pingcap,如果涉嫌侵权,请发送邮件至:[email protected]进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。