摘要:随着数据仓库业务的发展,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外部表创建语句为例说明外部表的结构:

CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name
( [ { column_name type_name POSITION(offset,length) | LIKE source_table } [, ...] ] )
SERVER gsmpp_server
OPTIONS ( { option_name ' value ' } [, ...] )
[ { WRITE ONLY | READ ONLY }]
[ WITH error_table_name | LOG INTO error_table_name]
[REMOTE LOG 'name']
[PER NODE REJECT LIMIT 'value']
[ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ];

可以看出,外部表可以分为三部分:字段定义、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. 创建目标表

CREATE TABLE gds_widetb_1 (city integer, tel_num varchar(16), card_code varchar(15), phone_code vcreate table pipegds_widetb_3 (city integer, tel_num varchar(16), card_code varchar(15), phone_code varchar(16), region_code varchar(6), station_id varchar(10), tmsi varchar(20), rec_date integer(6), rec_time integer(6), rec_type numeric(2), switch_id varchar(15), attach_city varchar(6), opc varchar(20), dpc varchar(20));

--step2. 创建带有file_sequence字段的外表。

CREATE FOREIGN TABLE gds_csv_r_1( like gds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '3-1');
CREATE FOREIGN TABLE gds_csv_r_2( like gds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '3-2');
CREATE FOREIGN TABLE gds_csv_r_3( like gds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '3-3');

--step3. 将wide_tb.txt并发导入到gds_widetb_1。

\parallel on
INSERT INTO gds_widetb_1 SELECT * FROM gds_csv_r_1;
INSERT INTO gds_widetb_1 SELECT * FROM gds_csv_r_2;
INSERT INTO gds_widetb_1 SELECT * FROM gds_csv_r_3;
\parallel off

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探析》,原文作者:常常要奋斗。

点击关注,第一时间了解华为云新鲜技术~

数据库运维家中常备:上限约400MB/s,比COPY等工具还好用的数据利器相关推荐

  1. 2020,分布式架构会给传统数据库运维带来哪些变化?

    摘要:分布式架构可能是近几年最火的话题.从集中式.SOA到分布式架构,本文回顾了这些年金融行业经历的架构演变:结合当下一些较典型的分布式数据库的实现原理,分析了分布式数据库的三个发展阶段.分布式数据库 ...

  2. 解密京东618大促数据库运维的攻守之道

    来自:DBAplus社群 本文根据高新刚老师在[2019 DAMS中国数据智能管理峰会]现场演讲内容整理而成. 讲师介绍 高新刚,京东数科数据库团队负责人,负责京东数科数据库平台的管理维护工作,带领团 ...

  3. 微博热点事件背后数据库运维的“功守道”

    作者 | 张冬洪 责编 | 仲培艺 [导语] 微博拥有超过3.76亿月活用户,是当前社会热点事件传播的主要平台.而热点事件往往具有不可预测性和突发性,较短时间内可能带来流量的翻倍增长,甚至更大.如何快 ...

  4. oracle 数据库运维技术,Oracle数据库智能运维标准化工艺研究-orastar-DIY数据库运维工具-第1期 导论篇...

    1.编制目的 为了提升运维质量,增强数据库运维标准化.规范化,保障信息系统的安全.稳定.高效运行,助力实现智能运维,star同学在此抛砖引玉,特编制该文档. 2.维度定义 根据运维经验,现将数据库日常 ...

  5. 美团数据库运维自动化系统构建之路

    本文整理自美团点评技术沙龙第10期:数据库技术架构与实践. 美团点评技术沙龙由美团点评技术团队主办,每月一期.每期沙龙邀请美团点评及其它互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域. ...

  6. 化繁为简:数据库运维人员应该知道这些...

    云和恩墨近期发布了新一代的数据库实时监控和智能巡检平台 云和恩墨数据库实时监控和智能巡检平台BethuneX BethuneX数据库实时监控和智能巡检平台,首先它的初衷和愿景依然没有改变:成为数据库运 ...

  7. 顺丰android架构师,顺丰数据库运维架构.pdf

    GOPS 全球运维大会 2018 2018.4.13-4.14 中国·广东·深圳·南山区 圣淘沙大酒店 (翡翠店 ) G O P S 全 球 运 维 大 会 2 0 1 8 · 深 圳 站 负重前行- ...

  8. 与“十“俱进 阿里数据库运维10年演进之路

    与"十"俱进 阿里数据库运维10年演进之路 原文:与"十"俱进 阿里数据库运维10年演进之路 阿里巴巴集团拥有超大的数据库实例规模,在快速发展的过程中我们在运维 ...

  9. 与“十“俱进 阿里数据库运维10年演进之路 1

    导语 阿里巴巴集团拥有超大的数据库实例规模,在快速发展的过程中我们在运维管理方面也在不断的面临变化,从物理器到容器.从独占到混布.从本地盘到存储计算分离.从集团内到大促云资源,从开源的MySQL到自研 ...

最新文章

  1. 综述的综述!5 篇2020 年「图像分割算法」最佳综述论文详解
  2. 中国AI科研产出全球第一 但引文影响力低
  3. oracle idm suite,CorelDRAW Graphics Suite 2018官方英文试用版 离线直接安装 下载地址
  4. 系统集成项目管理工程师-项目人力资源管理笔记
  5. 科技公司预备持jiu战:谷歌将允许员工在2021年7月前居家办公
  6. 你必须知道的Dockerfile
  7. 微信小程序登录 更新中
  8. slice与substring与substr
  9. undefined reference to错误的解决方法
  10. 2015年职称计算机考试宝典,2015年职称计算机考试宝典模块软件.doc
  11. python从excel读取数据用matplotlib画平面折线图
  12. 19年1月尔雅移动互联网时代的信息安全与防护考试答案(96分)
  13. 斯坦福 计算机音乐 访问学者,韩宝强
  14. 真无线蓝牙耳机排名前十的品牌,公认佩戴舒适性好的蓝牙耳机分享
  15. vellum 简单Bear毛发
  16. Java后台生成多个Excel并用Zip打包后(可以将excel文件放置到不同的目录)下载
  17. 迷室3第三章难点问题解读
  18. python制作聊天机器人_如何制作一个聊天机器人?
  19. C#:实体框架EF(entity framework)
  20. 设计模式-原型模式C++

热门文章

  1. JSON语法之JSON键/值对
  2. Bootstrap 调用插件
  3. 修复 IE 的文本3像素偏移Bug
  4. px4代码解析(3)
  5. SLAM Cartographer(14)Global SLAM的主线业务
  6. android 字符串 时间格式化,Android 获取年月日时分秒 格式化指定时间字符串
  7. php 安装zip,php zip拓展安装
  8. 解决IE下CSS因 Mime 类型不匹配而被忽略的问题
  9. Edge Deletion CodeForces - 1076D(水最短路)
  10. 使用Nagios打造专业的业务状态监控