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

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

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

背景

在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的实现流程图如下:
执行流程:

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打满的状态,下图是性能调试时的记录:

可以确定以下瓶颈:

  • 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分布式执行,
  • 优化后的执行方案如图:
    优化后,数据通过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导入性能如下:

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

总结

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

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

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

Hologres揭秘:优化COPY,批量导入性能提升5倍+的更多相关文章

  1. 云 MongoDB 优化让 LBS 服务性能提升十倍

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 随着国内服务共享化的热潮普及,共享单车,共享雨伞,共享充电宝等各种服务如雨后春笋,随之而来的LBS服务定位问题成为了后端服务的一个挑战.M ...

  2. 重构、插件化、性能提升 20 倍,Apache DolphinScheduler 2.0 alpha 发布亮点太多!

    点击上方 蓝字关注我们 社区的小伙伴们,好消息!经过 100 多位社区贡献者近 10 个月的共同努力,我们很高兴地宣布 Apache DolphinScheduler 2.0 alpha 发布.这是 ...

  3. Web 应用性能提升 10 倍的 10 个建议

    转载自http://blog.jobbole.com/94962/ 提升 Web 应用的性能变得越来越重要.线上经济活动的份额持续增长,当前发达世界中 5 % 的经济发生在互联网上(查看下面资源的统计 ...

  4. 揭秘Sql2014新特性-tempdb性能提升

    一直以来,在高负载,复杂的生产环境中,tempdb的压力是成为整个实例瓶颈的重要因素之一.微软的工程师们也在各个版本中不断优化它的使用.到了Sql Server2014又有了新的特性使其性能得temp ...

  5. 腾讯 TKE 厉害了!用 eBPF绕过 conntrack 优化K8s Service,性能提升40%

    Kubernetes Service[1] 用于实现集群中业务之间的互相调用和负载均衡,目前社区的实现主要有userspace,iptables和IPVS三种模式.IPVS模式的性能最好,但依然有优化 ...

  6. 有史以来性价比最高最让人感动的一次数据库&SQL优化(DB & SQL TUNING)——半小时性能提升千倍

    昨天,一个客户现场人员急急忙忙打电话找我,说需要帮忙调优系统,因为经常给他们干活,所以,也就没多说什么,先了解情况,据他们说,就是他们的系统最近才出现了明显的反应迟钝问题,他们的那个系统我很了解,软硬 ...

  7. Elasticsearch Reindex性能提升10倍+实战

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484134&idx=1&sn=750249a ...

  8. 存算分离下写性能提升10倍以上,EMR Spark引擎是如何做到的?

    ​引言 随着大数据技术架构的演进,存储与计算分离的架构能更好的满足用户对降低数据存储成本,按需调度计算资源的诉求,正在成为越来越多人的选择.相较 HDFS,数据存储在对象存储上可以节约存储成本,但与此 ...

  9. 查询性能提升3倍!Apache Hudi 查询优化了解下?

    从 Hudi 0.10.0版本开始,我们很高兴推出在数据库领域中称为 Z-Order 和 Hilbert 空间填充曲线的高级数据布局优化技术的支持. 1. 背景 Amazon EMR 团队最近发表了一 ...

  10. 在MongoDB中创建一个索引而性能提升1000倍的小例子

    在https://www.cnblogs.com/xuliuzai/p/9965229.html的博文中我们介绍了MongoDB的常见索引的创建语法.部分同学还想看看MongoDB的威力到底有多大,所 ...

随机推荐

  1. STM32 启动代码分析

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  2. LOTO示波器的变长存储深度和分段存储

    LOTO示波器的变长存储深度和分段存储 经常有客户咨询和不理解LOTO示波器的存储深度为什么是变长的,也表示对LOTO示波器的分段存储功能不理解,本文对LOTO示波器的存储机制做一次完整的梳理,帮助我 ...

  3. Linux实现远程登录基本操作

    Linux配置远程登录 1.实验目的 通过配置redhat的静态IPV4,通过xshell登录,实现远程指令控制.在实践过程中,了解linux的基本结构和操作,能够初步地使用linux的常用软件.目的 ...

  4. KingbaseES V8R6 等待事件之CLogControlLock

    前言 Kingbase数据库的tuple行头部来标识这条记录的事务结束状态(未知.已提交.已回滚),在事务提交时如果并发更新100万行记录,需要对多个page的tuple进行更改,这种繁重的操作会对数 ...

  5. xpath解析爱奇艺电影网页数据

    1 url='https://list.iqiyi.com/www/1/-------------11-1-1-iqiyi--.html' 2 headers={ 3 'User-Agent':'Mo ...

  6. #矩阵乘法,线段树#CF575A Fibonotci

    题目 分析 \(K\)那么大肯定是矩阵乘法, 带修改可以用线段树单点修改, 转移矩阵类似于斐波那契数列, 这题思维难度不大,细节很多,需要很长时间QWQ 时间复杂度\(O(mlog_2K)\),具体注 ...

  7. #正余弦定理#牛客练习赛71 B 烙印

    题目 将三角形的六要素只留下三个已知条件, 问有多少种情况,多组询问 分析 首先分类讨论一下(对新高一不友好,比如说我). 前置知识: 正弦定理: \[\frac{a}{sinA}=\frac{b}{ ...

  8. 直播预告丨OpenHarmony标准系统多媒体子系统之音频解读

    今晚19点,OpenHarmony开源开发者成长计划知识赋能第五期"掌握OpenHarmony多媒体的框架原理"的第四节直播课,即将开播! 深开鸿资深技术专家苑春鸽老师,将在Ope ...

  9. 初学STM32 SDIO(一)

    1. SDIO协议简介 ​ SDIO全称是安全数字输入/输出接口 ,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口. 多媒体卡(MMC).SD卡. S ...

  10. 【FAQ】HMS Core推送服务推送角标的开发及常见问题解答

    目录 1.发送消息并显示桌面数字角标. 2.如何清除数字角标? 3.如何设置圆点角标? 4.应用桌面图标角标开关无法开启或未显示开关. 5.推送消息设置了角标字段但未显示角标? 6.未设置角标参数,但 ...