暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase 导出工具原理浅析

352

背景介绍

每一款数据库都有自研的导入导出工具,面向不同的使用者导数工具可以发挥不同的作用,例如:DBA可以使用导数工具进行逻辑备份恢复,开发者可以使用导数工具完成系统间的数据交换。今天我写下这一篇文章主要是为OceanBase订阅者们介绍一下OceanBase自研的数据库导出工具——obdumper。让OceanBase的用户们了解导数工具的发展历程,以及当前的现状。官方文档说明过 obdumper 使用Java语言开发的,作者之所以选择Java语言,主要是为了跨平台。毕竟平台适配相关的工作也是一件比较烦的事儿,事实上已经有用户咨询过 obdumper 是否可以直接运行在 x86, arm 等平台,似乎一切都在当初语言选择的预料之中。虽然 OceanBase 对于 MySQL/Oracle 的内核特性具备较高的兼容性,但是开源的 MySQL/Oracle 生态工具是不推荐使用的,因其没有更好地兼容 OceanBase 内核的行为。我们没有选择魔改开源工具,而是选择自研的目的就是为了让其变得更加贴身。除此以外,也希望能够随着 OceanBase 自身业务的发展而能做到任意扩展。下面我们会从不同的角度来介绍这款工具,大家再阅读的过程也能感受到与其它开源工具之间的差异。

核心功能

简单说介绍几个场景的应用场景:
  • 导出过去某个时间点的历史快照数据;
  • 导出一张表中满足指定条件的数据;
  • 导出的表数据文件进行高压缩处理;
  • 导出整库的数据定期进行备份归档;
  • 导出的数据进行加工处理,例如:转换、脱敏等;

上述功能是不是经常用在日常的开发、测试、运维等工作中?既要满足业务,又要与时俱进。以文件压缩来讲,常见的数据导出工具是将数据导出成CSV文件,再进行后置压缩,压缩效果并不好。为了让开发环境能够使用与生产相近的数据,可以对导出的数据进行脱敏,再导入到开发库中。导数工具的目标就是让数据能够在企业内部高效地流动起来,充分发挥数据应有的价值。

架构原理

obdumper 内部基于业务schema的定义设计了一套非常丰富的表数据切分策略(或者叫分片策略),一个库或者一张表进行多任务并行化处理,大幅提升数据的导出性能。当然,影响性能的因素有很多,例如:表结构设计,数据传输网络,数据落盘的IO 等。整体的框架是面向格式和存储进行扩展,行格式便于小数据量业务进行直接使用,列格式可以存放大规模的表数据。同时,我们也支持将数据导出到不同的存储介质。大致的架构如下图所示:1700644489

注:我们强烈建议用户设计表结构时,考虑为表添加主键。单数据量庞大时,还要进行分区化改造,并且保证每一个分区内的数据相对均衡。

性能测试

内部使用TPC-H测试库按照不同的文件格式进行导出,由于 ORC/Parquet 导出过程中默认开启压缩,所以性能比CSV/SQL格式略低。实际业务中牺牲一点点性能换取更低的存储空间,大多数用户还是能接受的。导出测试性能图表如下:

1700645307

压缩测试

1700646210

整库的数据按照 ORC/Parquet 格式导出,默认采用zstd压缩大约是 4 : 1。如果对 CSV 文件中相同的数据采用后置压缩,压缩率远不到这么高。压缩率高低,不仅与压缩算法相关,也与数据的特征也有很大的关系。不同的业务数据采用相同的算法进行压缩后的效果差异也很明显,建议用户以实际的业务数据进行压缩为准。(压缩率的计算公式:Compression Ration ≈ Uncompressed Size/Compressed Size)

相关文档

导出数据官方文档: https://www.oceanbase.com/docs/enterprise-oceanbase-dumper-loader-cn-1000000000076561

OceanBase 导入工具原理浅析: https://open.oceanbase.com/blog/new?draft=7549341232

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论