簡介:揭祕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導入在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針對FE作了優化,主要是解耦FE工做流程:
• 保證Request進程只負責,接收請求,數據流入以及簡單的數據切分;
• 文本解析的工做交給具有PG計算能力支持的PQE分佈式執行,
• 優化後的執行方案如圖:
優化後,數據經過COPY導入Hologres的執行流程以下:
• FE負責接收用戶請求,並把流入的數據按行切片,並寫入共享隊列Queue。
• Coordinator把FE和PQE調度到同一臺機器,這樣Queue能以Shared Memory的方式實現,FE和PQE交互更高效。
• PQE從Queue裏面獲取對應的切片,並完成拆行,分列,以及具體類型解析。
• HQE從PQE拖取數據,並計算分佈並Shuffle。
• SE負責把流入數據寫入到Pangu。
經過對系統的優化,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引擎研發工做。
原文連接本文爲阿里雲原創內容,未經容許不得轉載。