Hologres揭秘:优化COPY,批量导入性能提高5倍+

简介:揭秘Hologres优化COPY的技术原理,实现批量导入性能提高5倍+前端

Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼容PostgreSQL协议并与大数据生态无缝打通,能用同一套数据架构同时支持实时写入实时查询以及实时离线联邦分析。它的出现简化了业务的架构,为业务提供实时决策的能力,让大数据发挥出更大的商业价值。从阿里集团诞生到云上商业化,随着业务的发展和技术的演进,Hologres也在持续不断优化核心技术竞争力,为了让你们更加了解Hologres,咱们计划持续推出Hologres底层技术原理揭秘系列,从高性能存储引擎到高效率查询引擎,高吞吐写入到高QPS查询等,全方位解读Hologres,请你们持续关注!sql

本期咱们将带来Hologers COPY导入性能优化实现性能提高5+倍方面的技术原理解读。segmentfault

背景

在PostgreSQL中,COPY命令用于文本文件数据导入,其在PG生态里面有着重要的做用:性能优化

• 完美兼容PG几十种数据类型,包括自定义类型等等。
• 文本解析导入细节考虑的很是完善,也是业界标杆。
• 业务价值,业务集成的成本低,psql一条命令或者copy manager等等无需第三方的集成依赖。
• 平常开发测试中高频使用,好比tpch测试,功能验证,线上问题复现等。数据结构

Hologres彻底兼容PG(PostgreSQL)生态,支持使用COPY命令导入数据,可是在PostgreSQL中,COPY的导入性能差强人意,只有20MB/s。而大数据处理场景,每每须要高性能的写入,PG的COPY写入性能不能知足实际业务。多线程

基于此,Hologres对COPY写入性能进行了优化,以达到高性能、高可用的目的。本文将会介绍Hologres对COPY命令优化的技术原理,从而实现导入性能5倍+。架构

COPY瓶颈定位

在早期版本中,COPY导入在Hologres的实现流程图以下:分布式

image.png

执行流程:性能

1.FE(FrontEnd,前端节点)负责接收用户的请求,数据流入,以及具体的解析工做(包括分行,拆列,类型Format解析等)。测试

2.FE把完成解析的数据转成Arrow写入到Shuffle Service。

3.HQE(Hologres Query Engine)从Shuffle Service获取数据,并根据分布键完成Shuffle。

4.SE(Storage Engine)把数据流写入Pangu。

在COPY工做的过程当中,可以看到FE的进程一直处于CPU打满的状态,下图是性能调试时的记录:

image.png

能够肯定如下瓶颈:

• Shuffle Service中间节点引入的性能损耗。如上图的红框部分,须要将PG的内部数据结构HeapTuple转换成Arrow并写入Shuffle Service。

• PG解析自己的耗时,好比,I/O,对数据流切分,按照类型Format解析等等。

改造技术难点

定位了瓶颈以后,结合Hologres现有技术架构,要提高性能,主要有如下几个难点:

• PostgreSQL的进程模型,有不少Global Runtime Context,多线程改形成本高。

• 类型解析依赖PostgreSQL类型系统,因此没法简单的利用第三方文本解析库加速,好比Arrow。

• FE Meta管理过程当中,须要PostgreSQL系统表和COPY的交互,从而保证PostgreSQL COPY系统表的行为稳定及正确性。

Hologres优化方案

为了突破上面的难点,从而解决导入效率的问题,Hologres针对FE作了优化,主要是解耦FE工做流程:

• 保证Request进程只负责,接收请求,数据流入以及简单的数据切分;

• 文本解析的工做交给具有PG计算能力支持的PQE分布式执行,

• 优化后的执行方案如图:

image.png

优化后,数据经过COPY导入Hologres的执行流程以下:

• FE负责接收用户请求,并把流入的数据按行切片,并写入共享队列Queue。

• Coordinator把FE和PQE调度到同一台机器,这样Queue能以Shared Memory的方式实现,FE和PQE交互更高效。

• PQE从Queue里面获取对应的切片,并完成拆行,分列,以及具体类型解析。

• HQE从PQE拖取数据,并计算分布并Shuffle。

• SE负责把流入数据写入到Pangu。

5倍+性能提高

经过对系统的优化,Hologres的COPY导入性能有了质的飞跃。以TPCH lineitem表为例,1亿条数据,文件13G,COPY导入性能以下:

image.png

能够从图中看到,优化后,Hologres COPY上传速度能达200MB/s+,相比PostgreSQL快5倍以上!

总结

Hologres致力于一站式实时数仓,在数据接入上有着很是庞大的生态家族,支持多种异构数据源的离线、实时写入,包括DataWorks数据集成、Flink、MaxCompute等丰富的写入方式。在大数据场景中,Hologres彻底兼容PostgreSQL的COPY命令,并在此基础之上,对系统优化,实现了COPY导入性能比PG快5倍+。COPY命令方式导入数据,为Hologres数据接入生态又新增一种方式,知足业务高性能写入需求,助力快速搭建企业级实时数仓。

做者:郑晓文(鲁来) 现从事交互式分析Hologres引擎研发工做。

原文连接本文为阿里云原创内容,未经容许不得转载。