摘要:随着数据仓库业务的倒退,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探析》,原文作者:经常要奋斗。
点击关注,第一工夫理解华为云陈腐技术~