计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive

关于并行导入

更新时间:2024-10-14 GMT+08:00

INSERT(通过INSERT语句直接写入数据)和COPY(使用COPY FROM STDIN导入数据)方式执行数据导入时,是一个串行执行的过程,导入性能低,因此适用于小数据量的导入。对于大数据量的导入,GaussDB支持通过外表并行导入数据到集群。外表的并行导入需要开启stream算子(由guc参数enable_stream_operator控制)才能够使用。

概述

并行导入将存储在服务器普通文件系统中的数据导入到GaussDB数据库中。

并行导入功能通过外表设置的导入策略、导入数据格式等信息来识别数据源文件,利用多DN并行的方式,将数据从数据源文件导入到数据库中,从而提高整体导入性能。如图1所示:

  • CN只负责任务的规划及下发,把数据导入的工作交给了DN,释放了CN的资源,使其有能力处理其他外部请求。
  • 所有DN都参与数据导入,这样可以充分利用各设备的计算能力及网络带宽,提升导入效率。
外表灵活的OPTION设置,有利于在数据入库前对数据做预处理,例如非法字符替换、容错处理等。更多信息请参考CREATE FOREIGN TABLE (导入导出)
图1 数据并行导入示意图

上图中所涉及的相关概念说明如下:

  • CN(Coordinator Node)GaussDB协调节点。在导入场景下,接收到应用或客户端的导入SQL指令后,负责任务的规划及下发到DN。
  • DN(Data Node)GaussDB数据节点。接收CN下发的导入任务,将数据源文件中的数据通过外表写入数据库目标表中。
  • 数据源文件:存有数据的文件。文件中保存的是待导入数据库的数据。
  • 数据服务器:数据源文件所在的服务器称为数据服务器。基于安全考虑,建议数据服务器和GaussDB集群处于同一内网。
  • 外表Foreign Table:用于识别数据源文件的位置、文件格式、存放位置、编码格式、数据间的分隔符等信息。是关联数据文件与数据库实表(目标表)的对象。
  • 目标表:数据库中的实表。数据源文件中的数据最终导入到这些表中存储,包括行存表和列存表。

加载策略

并行导入为了最大化利用集群的计算能力,将任务直接下推到DN执行。CN将任务分发之后将不再参与导入的具体工作。这种情况下,谁来管理用户数据,使数据能够正确、不重复地分配给各DN,从而保证入库数据的唯一性,是需要优先考虑的事情。为此,GaussDB对应提供了三种策略:
  • Normal策略:利用高斯数据服务工具GDS(Gauss Data Service)来管理用户数据,将集群之外主机上的数据导入到集群中。
  • Shared策略:利用网络文件系统NFS(Network File System)服务,将存放用户数据的服务器统一挂载到各DN所在主机的相同路径下,将集群之外主机上的数据导入到集群中。此策略下,由CN在规划任务时扫描所有数据文件,然后将数据文件平均地分配给各DN执行加载。
  • Private策略:用户自行将数据文件上传到各DN所在主机。并保证数据文件按DN数均分后,不重复地存储到各主机上相同路径下,以DN node_name命名的文件夹下。这样,数据导入时,每个DN会不断从以自己node_name命名的数据目录中寻找未被加载过的文件,直到没有数据文件可加载为止。

表1中的对比看,Normal策略因其扩展性强、准备工作简单、对导入的单行数据大小无限制,是优先推荐和常用的策略,其中Private和Shared模式的外表,需要初始用户或者运维模式下(operation_mode)的运维管理员权限。本章节也将主要介绍使用GDS的并行导入方法。关于另外两种方式可以参考示例2:Shared策略导入示例3:Private策略导入

表1 导入策略对比

导入策略

导入前的准备

支持导入的数据格式

Normal

在数据服务器上部署GDS。支持多个GDS服务并发导入。

CSV、TEXT、FIXED。

Shared

在数据服务器上配置NFS,并将数据服务器挂载到各DN所在的主机上。各DN主机上的挂载目录需要相同。

TEXT。

单行数据大小需<1GB。

Private

将数据文件按DN数均分后上传各DN所在主机。

数据文件需不重复地保存在各主机上相同路径下以DN node_name命名的文件夹下。

CSV、TEXT、FIXED。

单行数据大小需<1GB。

GDS并发导入

  • 数据量大,数据存储在多个服务器上时,在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。如图2所示。
    图2 多数据服务器并行导入
    须知:

    GDS进程数目不能超过DN数目。如果超过,会出现一个DN连接多个GDS进程的情形,可能会导致部分GDS异常运行,并有可能出现“Session doesn't exists”报错。若参与某次导入的GDS数量大于DN数量,则在导入执行开始时,会返回“It is recommanded that the number of GDS should not be greater than the number of datanode”的warning。

  • 数据存储在一台数据服务器上时,如果GaussDB及数据服务器上的I/O资源均还有可利用空间时,可以采用GDS多线程来支持并发导入。

    GDS是根据导入事务并发数来决定服务运行线程数的。也就是说即使启动GDS时设置了多线程,也并不会加速单个导入事务。未做过人为事务处理时,一条INSERT语句就是一个导入事务。

    综上,多线程的使用场景如下:

    • 多表并发导入时,采用多线程充分利用资源及提升并发导入效率。
    • 对数据量大的某一数据表的导入进行提速。

      将该数据表对应的数据拆分为多个数据文件,通过多外表同时入库的方式实现多线程并发导入。注意需确保每个外表所能读取的数据文件不重复。

导入流程

图3 并行导入流程
表2 流程说明

流程

说明

准备源数据

准备需要导入数据库的源数据文件,并上传至数据服务器。

详细内容请参见准备源数据

启动GDS

在数据服务器上安装配置并启动GDS。

详细内容请参见安装配置和启动GDS

创建外表

创建外表用于识别数据源文件中的数据。外表中保存了数据源文件的位置、文件格式、存放位置、编码格式、数据间的分隔符等信息。

详细内容请参见创建GDS外表

执行导入数据

在创建好外表后,通过INSERT语句,将数据快速、高效地导入到目标表中。详细内容请参见执行导入数据

处理错误表

在数据并行导入发生错误时,请根据具体的错误信息进行处理,以保证导入数据的完整性。

详细内容请参见处理错误表

优化查询效率

导入数据后,通过ANALYZE语句生成表统计信息。ANALYZE语句会将统计结果自动存储在系统表PG_STATISTIC中。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。

详细内容请参见分析表

停止GDS

待数据导入完成后,登录每台数据服务器,分别停止GDS。

GDS的停止请参见停止GDS

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容