在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
作者介绍:李淳竹(lichunzhu),TiDB 研发工程师。 Tools SIG Community:主要涵盖 TiDB 数据处理工具,包含 TiDB 数据备份/导入导出,TiDB 数据变更捕获,其他数据库数据迁移至 TiDB 等。 Dumpling 是由 Go 语言编写的用于对数据库进行数据导出的工具。目前支持 MySQL 协议的数据库,并且针对 TiDB 的特性进行了优化。Dumpling 的主要特点包括: 1. 适配 Mydumper,轻松上手。 2. Go 语言编写,定制开发简单。
Go 语言支持给 Mydumper 贡献代码没有那么容易。主要原因如下:
而 Dumpling 由 Go 语言实现,非常易于维护。 Go 生态有非常丰富的扩展包,这使得在 Dumpling 上实现添加新功能更加容易。同时 Go 语言方便的包管理系统与调试机制也更方便用户编译自己定制化的 Dumpling binary 并且调试功能,Dumpling 的单元测试与集成测试与 Go 简单的测试编写机制也可以帮助用户更容易地验证功能是否正确。 Mydumper 参数适配Dumpling 适配了 Mydumper 的常用参数,这使得 Mydumper 用户迁移到 Dumpling 的学习成本非常低。 同时 Dumpling 还对其中部分参数进行了改善,比如:
更多 Dumpling 参数的详细使用可以阅读 Dumpling 参数表。如果是暂时没有支持的 Mydumper 参数或者有想到方便实用的参数,也欢迎大家在Dumpling Repo中提出 PR 或者 issue。此外 Go 语言新增参数功能非常容易,这也是大家参与开发开源项目一个很好的切入点。 CSV 导出定制Dumpling 支持通过制定 filetype = xx 导出 csv 文件,通过配置相关的参数也可以定制化 csv 的输出格式,例如:
详细配置说明参考使用文档。 作为 Library 被集成Dumpling 支持作为 Library 被其他包所集成。Go 应用开发者可以在定义好导出配置文件 export.Config 后运行 export.Dump 函数即可。这也使得开发者可以在不需要调用外部工具,不需要额外编写代码的情况下实现数据库逻辑导出功能的集成。TiDB-DM 项目正是采用这种方式集成了 Dumpling。 性能对比为了比较 Dumpling 和 Mydumper 的性能差异,我们在一台 2 物理 CPU (Intel® Xeon® CPU E5-2630 v4 @ 2.20GHz) 的机器上进行了导出测试,导出单个数据量大小为 87G,约 20 亿行的大表。测试了五种导出参数下的导出耗时与消耗系统资源情况,包括:
可以看出目前 Dumpling 实验分支的 Dumpling 时间可以达到 Mydumper 的水平。值得注意的是,相比起 Mydumper,Go 语言的 profile 功能也使得我们更加容易排查和优化 Dumpling 的性能问题。我们也将在后续持续改进 Dumpling 的性能问题,提高导出速度。 Dumpling 后续开发计划以下为 Dumpling 后续开发的一些计划与设想,也欢迎大家在 Dumpling Repo 一起交流讨论,参与开发。让我们一起让导出数据更加容易! 支持并行导出主键分布不均匀的数据(issue#75) 目前 Mydumper 和 Dumpling 都可以通过指定 rows 参数开启表内并发,从而优化导出单个大数据表时的导出效率。它们的划分方式都是将表按照表的整数主键的从最小到最大划分为 count/rows 个区块再导出,然而这样的方式在数据的主键比较分散时导出效果会很差。尤其是 TiDB 4.0 后,开启了 auto-random 的数据表的主键将会更加离散,这势必引起数据块分布不均匀从而影响导出效率。 Dumpling 可以在开启 chunk-by-region 选项后,通过 TiDB regions 的数据信息来按照 region 划分导出数据的区块,从而使数据块中数据分布更加均匀,进而提高导出的效率。该优化目前已有 PR。 支持导出到 S3、GCS 等云盘(issue#8) Dumpling 计划在 TiDB 5.0 前支持直接导出数据到云盘,从而方便云上部署使用。 支持导出更多种类的源数据库(issue#11) 一般来说,只要需要支持的数据库有对应的 database driver 或 client,比如 Oracle 数据库的 golang driver godror,我们都可以轻微改造导出语句和调用的 Go 代码库后就实现该数据库的导出支持。这里也欢迎社区的小伙伴们参与,帮助 Dumpling 支持导出更多类型的数据库。 欢迎通过 Slack 联系我们: channel #sig-tools in the tidbcommunity slack workspace, you can join this channel through this invitation link。 |
请发表评论