共计 2546 个字符,预计需要花费 7 分钟才能阅读完成。
摘要:随着数据仓库业务的倒退,GDS 应用场景日益增多,这就要求 GDS 仍要一直迭代,充沛深刻开掘用户需要,进步产品化水平。
1. GDS 定位
GDS 是 GaussDB(DWS) 提供的一个数据导入导出工具,可在反对多种场景下的数据迁徙业务,如异型数据库之间、两个集群之间等。GDS 性能较高,单核解决能力下限约 400MB/s,相比 COPY、COPY 工具性能更优、运行更稳固、容错性更强。
2. GDS 根基
GDS 基于 FDW,全称是 Foreign Data Wrapper(内部数据包装器)。这个性能是 PostgreSQL 9.1 首次引入的,实现了局部 SQL/MED 的个性。
2.1 什么是 FDW
顾名思义,这个性能与数据库内部的数据有关系,对于外数据的具体形容是通过内部表来定义的。以 GDS 内部表创立语句为例阐明内部表的构造:
能够看出,内部表能够分为三局部:字段定义、server 定义、options 定义。其中:
(1)字段属性定义与本地表定义形式相似,甚至能够应用 like L_TBL 等语法进行定义;
(2)server 定义,须要应用 CREATE SERVER xxx_server 创立;
(3)options 选项,由与该表面相干的 FDW 实现决定。
在 GDS 应用过程中,装置自定义 FDW、创立 server 等配置都是在 initdb 阶段执行,毋庸用户额定设置。Postgres 当初有很多 FDW 扩大,其中 postgres_fdw、file_fdw 是由官网寰球开发组保护,postgres_fdw 可用于拜访近程 PostgreSQL 服务器。
下图展现了 FDW 的执行过程 [1]。
① 查问剖析模块为输出的 SQL 创立一棵查问树;
② 打算器(或执行器)连贯到近程服务器;
③ 执行 EXPLAIN 命令以估算打算门路的代价;
④ 打算器依照打算树创立出纯文本 SQL 语句;
⑤ 执行器将纯文本 SQL 语句发送到近程服务器并接管后果。
2.2 GDS 自定义 FDW
依据导入导出场景,GaussDB(DWS) 实现了自定义的 FDW 扩大——dist_fdw。dist_fdw 运行于 GaussDB 内核之中,在 initdb 时进行装置,所以个别状况下对用户是通明的。
3. 多角度缔造高性能
3.1 多线程工作模式
GDS 应用多线程模式,由主线程负责接管申请,而后调配给工作线程进行具体的业务解决,能够并发解决导入导出业务。主线程与工作线程通过 UnixSocket 进行通信,通信内容包含:分派新工作、进行工作线程、工作线程状态上报等。
每个线程可承载多个导入导出业务,通过与事件音讯驱动机制相结合,实现高速网络通信,确保业务执行高性能、高并发。
3.2 事件音讯驱动机制
GDS 采纳事件驱动模型,抉择以后零碎可反对的最高效的多路复用机制(epoll、poll、select 等)。
3.3 大文件导入优化
对于超大文件的导入,如果依然与一般文件一样,持续采纳串行形式导入,必然会成为业务瓶颈,导致数据迁徙、备份等过程的有限缩短,无奈充分发挥多核机器、GDS 多线程架构的劣势。针对该场景,GDS 引入分片导入机制,实现并行导入,充分发挥软硬件性能,缩小业务阻塞,缩小数据迁徙耗时。
该性能针对本地文件的导入场景,需通过表面 file_sequence 参数进行相应设置。
该参数格局为 file_sequence ‘ 文件被拆分的总数 - 以后分片 ’。例如:
file_sequence ‘3-1’ 示意导入的文件在逻辑上被拆分成 3 份,以后表面导入的数据为第一个分片上的数据。
file_sequence ‘3-2’ 示意导入的文件在逻辑上被拆分成 3 份,以后表面导入的数据为第二个分片上的数据。
file_sequence ‘3-3’ 示意导入的文件在逻辑上被拆分成 3 份,以后表面导入的数据为第三个分片上的数据。
这里给出一个应用示例:
— step1. 创立指标表
–step2. 创立带有 file_sequence 字段的表面。
–step3. 将 wide_tb.txt 并发导入到 gds_widetb_1。
3.4 SMP 个性反对导入场景
SMP 个性通过算子并行来晋升性能,实质上是一种利用充裕资源来换取工夫的计划,打算并行之后会占用更多的系统资源,包含 CPU、内存、网络、I/ O 等等。在适合的场景以及资源短缺的状况下,可能起到较好的性能晋升成果。SMP 反对自适应个性,该个性会依据以后资源和查问特色,动静选取最优的并行度。SMP 个性反对反对 GDS 导入的表面扫描并行,当集群资源短缺时,能够施展各节点性能,减速导入执行效率。
4. 全方位丰盛性能
4.1 容错机制
提供了弱小的容错机制,包含谬误默认解决、谬误表、谬误日志等多种形式,缩小数据导入导出异样停止的状况,不便用户预先查问剖析。
4.2 编码解析
反对多种类型的字符编码,包含 UTF-8、GBK、ASCII、LATIN1 等。
4.3 多字符字段 / 换行宰割符
对于表面属性,分隔符 delimiter、行分隔符 eol,既兼容原有的逗号、n 等默认形式,还反对用户自定义多字符分隔符,最多可反对 10 个字节。在场景简单、噪声较多、数据量很大的场景下,单字符分隔符很容易与数据自身抵触,而应用多字符分隔符,能够缩小这种抵触,且能够轻容兼容异构数据库,不便用户进行数据处理。
4.4 数据不落地
此前 GDS 只反对本地文件的导入导出,因而无论是数据加工荡涤或者是远端数据的导入导出都须要在 GDS 本地生成一份两头数据,这对用户来说不仅耗费磁盘空间并且很不不便。据此,开发人员对不落地导入导出个性进行了布局和实现,提供了另外一种导入导出形式,不仅节俭了用户的磁盘空间而且让 GDS 的应用变得更加灵便多变。具体应用形式参见用户手册。
5. 瞻望
随着数据仓库业务的倒退,GDS 应用场景日益增多,这就要求 GDS 仍要一直迭代,充沛深刻开掘用户需要,进步产品化水平。继往开来,GDS 一批新个性已开展布局,如自动化工具、过程监控
工具、云化等等。将来可期,作为 GaussDB(DWS) 的强有力数据迁徙工具,GDS 会持续强化,丰盛产品生态。
【参考文献】
[1] [日] 铃木启修.PostgreSQL 指南——底细摸索 [M]. 电子工业出版社: 北京,2019:85-86.
本文分享自华为云社区《GaussDB(DWS) 数据利器 GDS 探析》,原文作者:经常要奋斗。
点击关注,第一工夫理解华为云陈腐技术~