简介: 揭秘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. VR汽车虚拟仿真的实现、应用和未来

    汽车虚拟仿真技术是一种利用计算机模拟汽车运行的技术,以实现对汽车行为的分析.评估和改进.汽车虚拟仿真技术是汽车工业中重要的开发设计和测试工具,可以大大缩短产品研发周期.降低研发成本和提高产品质量.本文 ...

  2. Android富文本开发

    基础概念目录介绍 01.业务需求简单介绍 02.实现的方案介绍 03.异常状态下保存状态信息 04.处理软键盘回删按钮逻辑 05.在指定位置插入图片 06.在指定位置插入输入文字 07.如果对选中文字 ...

  3. 恶意软件开发(四)通过查找进程名进行DLL注入

    通过进程名查找PID 当我们编写注入器的时候,肯定是希望直接通过进程名进行注入,而不是像上一篇笔记一样通过手动输入PID进行查找. 通过进程名查找PID的步骤如下: (1)创建系统中所有进程的快照 ( ...

  4. Oracle与MySQL的差异和对比

    Oracle与MySQL的差异和对比:配套hands-on参考脚本. 方便客户针对培训课件内容进行动手实践,加强理解. --------------------------------- -- 主题: ...

  5. archlinux调整分区及btrfs文件系统大小

    1.防止数据丢失 有重要数据要先备份 最好现在虚拟机练习一下, 2.注意点 修改分区的初始位置似乎需要删除分区后重建分区,意味着分区数据全被删除. 所以修改分区初始位置可能需要其它办法 修改分区的初始 ...

  6. 正则表达式环视匹配(?=pattern)、(?!pattern)、(?<=pattern)、(?<!pattern)怎么用

    今天在处理数据的时候遇到一个,需要用正则表达式匹配不包含某字符的字符串的问题,用到否定匹配,现总结如下: 一个正则小知识 ↓ []:表示范围,匹配其中任何一个 {}:表示重复匹配多次. ():表示分组 ...

  7. 安卓开发数据可视化---导入数据到excel表格

    现在是2021-03-12 00::39 刚刚完成了一个小软件部分功能,现在把出现的问题总结如下: 一.首先要下载jar包 网址:https://mvnrepository.com/artifact/ ...

  8. ET介绍——Actor Location

    Actor Location Actor模型只需要知道对方的InstanceId就能发送消息,十分方便,但是有时候我们可能无法知道对方的InstanceId,或者是一个Actor的InstanceId ...

  9. #树形dp#洛谷 3687 [ZJOI2017]仙人掌

    题目 给定一个简单无向连通图,问有多少种加边方案使得这个图变成简单仙人掌. 分析 首先找到一棵生成树,考虑其它非树边所对应的树的路径上的边最多只能用一次, 这可以用树上差分做,如果一个点到其父节点的边 ...

  10. 使用OHOS SDK构建libjpeg-turbo

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/libjpeg-turb ...