Paimon vs. HBase:全鏈路開銷對比

Paimon 在特定場景(如流式 Lookup Join)下,會為了極致的查詢性能而引入額外的存儲(本地磁盤?LookupFile)和計算(構建?LookupFile)開銷。但這是一種用一次性的、可控的開銷,換取后續持續、高吞吐、低延遲查詢的典型權衡。

當把寫入、存儲、Compaction 和查詢的全鏈路開銷綜合對比時,Paimon 在其設計的分析型場景中,整體資源消耗和效率往往優于 HBase。

下面我們來進行一個綜合的對比分析。

對比維度

Paimon (為數據湖分析與流式追加優化)

HBase (為在線隨機讀寫與強一致性優化)

結論與權衡

寫入路徑開銷

輕量級內存追加

  1. 內存操作

    1. 寫入僅是向內存中的SortBuffer進行無序追加,開銷極低。

    2. 若內存不足,則溢寫至本地磁盤。

    3. 在commit、compaction或超過sort buffer容量時會進行flushable,將內存與磁盤數據合并構建為Parquet文件,一次性寫入遠程存儲。

  2. 持久化

    1. 不依賴高成本的WAL,而是巧妙借助Flink Checkpoint機制,原子化更新元數據。

同步WAL,有序內存寫入

1. 寫WAL : 每條數據都需 同步寫入HDFS上的Write-Ahead Log ,確保單點強持久性,但引入了 高昂的遠程I/O 。

2. 內存操作 : 寫入MemStore(通常是跳表),需 實時維護內存結構有序 ,存在一定的計算開銷和內存碎片風險。

Paimon寫入效率壓倒性優勢

Paimon專為高吞吐流式場景設計,其 “先追加,后排序,批量提交” 的模式,完美規避了遠程I/O瓶頸。

HBase的同步WAL機制雖保證了單條寫入的強一致性,但在大規模批量寫入時,成為了性能的主要瓶頸。

最終存儲開銷

極致壓縮,元數據極簡

采用 Parquet列式存儲 ,天然具備極高的壓縮比。元數據開銷小,僅在文件級別記錄統計信息,無冗余。

行式存儲,元數據冗余

HFile雖為二進制格式,但需為每個單元格(Cell)存儲完整的RowKey + ColumnFamily + Qualifier + Timestamp,在寬表場景下, 元數據冗余巨大 。

Paimon存儲成本顯著更優。得益于列存和高效壓縮,Paimon的存儲占用通常僅為HBase的 1/3甚至更少 。在PB級數據規模下,這意味著 巨大的成本節約 。

查詢路徑與延遲

Paimon內存的MemStore和sort buffer溢寫的臨時文件不可見,需要等待checkpoint提交,因此有一段延遲。

  1. 批量分析: 直接讀取Parquet,充分利用列裁剪和謂詞下推,分析性能極佳。

  2. 流式點查 (Lookup Join): 采用"延遲加載,本地緩存"策略。首次訪問時,將遠程數據拉取到本地磁盤構建高速LookupFile(如哈希文件、排序Block),后續查詢轉為高速本地I/O,實現了攤銷后的極低延遲。

通用化、穩定的低延遲設計 1. 查緩存 : 優先訪問BlockCache(內存)。

2. 查文件 : 若未命中,通過內存索引快速定位到遠程HDFS上的HFile并讀取。整個過程對用戶透明,提供 普適性的低延遲 保證。

各擅勝場,取決于應用模式

? HBase提供的是 通用的、可預期的低延遲 隨機讀取能力。

? Paimon則更加“智能”和“場景化”:分析場景下發揮列存優勢;高頻點查場景下,通過 “預熱” 將遠程讀轉化為本地讀,實現了 極致的攤銷后延遲 。

Compaction開銷

讀寫放大 合并多個Parquet文件,寫入新的Parquet文件。讀寫單位是文件。

讀寫放大 合并多個HFile,寫入新的HFile。讀寫單位是文件。

兩者都存在讀寫放大問題,這是LSM-Tree架構的固有成本。

具體問題

  1. 寫入時?Sort Buffer?和溢寫文件的開銷需要考慮嗎?

    • 需要,但這是一種內部優化。這個開銷是臨時的、在本地的。它的目的是將大量無序的寫入,在本地磁盤中整理成有序的批次,然后一次性高效地寫入最終的列式文件。這避免了對遠程存儲進行大量的隨機小文件寫入。相比之下,HBase 的 WAL 是對遠程存儲的持續寫入,開銷更大。
  2. Lookup 時重寫 Parquet 變為?Lookup File?的開銷需要考慮嗎?

    • 需要,但這是一種用空間換時間的查詢優化策略。這個開銷只發生在特定的?changelog-producer = 'lookup'?或 Flink Lookup Join 場景下。Paimon 的設計哲學是:既然流作業會持續不斷地進行 lookup,那么與其每次都去遠程讀 Parquet(即使有謂詞下推,對于點查也不是最高效的格式),不如一次性支付“預處理”成本,在計算節點本地構建一個為點查高度優化的索引文件(LookupFile)。這個開銷一旦支付,后續成千上萬次的 lookup 都會受益,整體吞吐量和延遲會遠優于重復訪問遠程存儲。
  3. Paimon 依賴 Flink Checkpoint,沒有 WAL

    • 完全正確!這是 Paimon 架構的一個基石。它將一致性保證的難題交給了 Flink 的分布式快照機制。這使得 Paimon 的寫入器 (MergeTreeWriter) 無需處理復雜的 WAL 邏輯,極大地簡化了設計并消除了 WAL 帶來的寫入開銷。這是它相比 HBase 在寫入路徑上更輕量級的核心原因之一。

Paimon 和 HBase 空間占用

對比維度Paimon (使用 Parquet)HBase空間影響分析
1. 存儲格式列式存儲 (Columnar)面向列族的鍵值存儲這是最關鍵的區別。Parquet 將同一列的數據連續存儲,而 HBase 雖叫“列式數據庫”,但其物理存儲更接近按行(Row Key)組織的、稀疏的、多維度的 Map。
2. 數據壓縮極高壓縮率中等壓縮率列式存儲把相同類型的數據放在一起,熵值更低,因此壓縮效果極好(如字典編碼、行程編碼 RLE)。HBase 只能對 KeyValue 塊進行通用壓縮(如 Snappy, Gzip),效果不如列式存儲。
3. 元數據開銷非常低非常高Parquet 只需在文件頭/尾存儲一次列名和類型。而 HBase 為每一個單元格(Cell)都存儲了完整的 Key,這個 Key 包含:RowKey + Column Family + Column Qualifier + Timestamp + Type。當列多、RowKey 長時,元數據開銷會急劇膨脹,甚至超過數據本身。
4. 更新與版本LSM-Tree (Copy-on-Write)LSM-Tree (Append-only)兩者都通過追加新版本數據和定期 Compaction 來處理更新。Paimon 寫新文件,HBase 寫新的 KeyValue。在 Compaction 前都會有空間放大,但 HBase 的放大效應因其高元數據開銷而更顯著。

結合代碼分析 Paimon 的寫入過程

MergeTreeWriter.java?文件中,flushWriteBuffer?方法是寫入流程的核心:

// ... existing code ...private void flushWriteBuffer(boolean waitForLatestCompaction, boolean forcedFullCompaction)throws Exception {if (writeBuffer.size() > 0) {
// ... existing code ...final RollingFileWriter<KeyValue, DataFileMeta> dataWriter =writerFactory.createRollingMergeTreeFileWriter(0, FileSource.APPEND);try {// 1. 從內存/磁盤排序緩沖中取出數據writeBuffer.forEach(keyComparator,mergeFunction,changelogWriter == null ? null : changelogWriter::write,// 2. 交給 dataWriter 寫入dataWriter::write);} finally {
// ... existing code ...// 3. 關閉 writer,完成一個 Parquet 文件的生成dataWriter.close();}// 4. 獲取新生成文件的元數據List<DataFileMeta> dataMetas = dataWriter.result();
// ... existing code ...}
// ... existing code ...}
// ... existing code ...

這里的?dataWriter?(最終實現是?ParquetWriter?或類似) 就是將內存中的?KeyValue?數據轉換并寫入成高效的 Parquet 文件的執行者。在這個寫入過程中,它會執行:

  1. 列式轉換:將行式數據?KeyValue?拆分成列。
  2. 編碼與壓縮:對每一列數據應用最高效的編碼(如字典、RLE)和壓縮算法。
  3. 寫入文件:將壓縮后的列數據、頁頭、列元數據、文件元數據等組織成一個完整的 Parquet 文件。

這個過程天然地就利用了列存的所有優勢來節省空間。

為什么 Paimon/Parquet 能省空間?

  1. 列存帶來的高壓縮率:這是最主要的因素。相同類型的數據連續存放,極大提升了壓縮算法的效率。
  2. 極低的元數據開銷:相對于 HBase 為每個 Cell 存儲一遍長長的 Key,Parquet 的元數據開銷幾乎可以忽略不計。想象一個有 100 列的表,HBase 會存儲 100 次?RowKey + Column Family + Timestamp,而 Parquet 只在文件元數據中存一次列名。
  3. 編碼優化:Parquet 的字典編碼(Dictionary Encoding)和行程編碼(Run-Length Encoding, RLE)等技術能進一步壓縮數據,特別是對于低基數(重復值多)的列,效果拔群。

因此,“Paimon 寫入 Parquet 占用的磁盤空間只有 HBase 的 1/3” 在許多場景下是一個合理且偏保守的估計。尤其是在表寬(列多)、RowKey 和列名較長、數據重復度高的場景下,Paimon/Parquet 的空間優勢會更加明顯,節省的空間可能會遠超 2/3。

綜合結論

?Paimon 為了實現不同目標所付出的“代價”。

  • Paimon 的“開銷”是有策略的、可控的投資:無論是寫緩沖還是?LookupFile,都是為了優化整個數據處理鏈路中的某個環節(通常是 I/O)而引入的。這些開銷服務于其作為數據湖存儲核心的定位,旨在最大化分析吞吐量和效率。
  • HBase 的“開銷”是為實現其核心價值的固有成本:WAL 和高冗余的元數據存儲是 HBase 實現低延遲、高可靠隨機讀寫的基石,這個成本是持續存在的。

因此,不能簡單地說 Paimon 的查找開銷比 HBase 大。更準確的說法是:Paimon 為流式分析場景下的高頻查找,選擇了一次性的構建開銷來換取后續的極致性能,而在其他方面(特別是寫入和存儲)的開銷遠小于 HBase。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912772.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912772.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

本地的包名導致的AttributeError: module ‘langchain‘ has no attribute ‘verbose‘

你遇到的 AttributeError: module langchain has no attribute verbose 問題&#xff0c;確實可能是因為你的本地文件或目錄名與 langchain 官方包沖突&#xff0c;導致 Python 在導入時優先加載了你的本地文件而非真正的 langchain 庫。 問題原因 Python 模塊加載機制&#xf…

玄機——某學校系統中挖礦病毒應急排查

本篇文章主要記錄某學校長期未運營維護的程序&#xff0c;被黑客發現了漏洞&#xff0c;但好在學校有全流量設備&#xff0c;抓取到了過程中的流量包 需要你進行上機以及結合流量分析&#xff0c;排查攻擊者利用的漏洞以及上傳利用成功的木馬 文章目錄 靶機介紹1.使用工具分析共…

如何解決wordpress批量刪除媒體庫中的圖片很慢甚至卡死問題

批量刪除WordPress媒體庫中的圖片速度很慢&#xff0c;如果批量刪除的圖片多會出現CPU100%甚至卡死&#xff0c;出現這個問題通常最主要的原因是服務器性能問題&#xff0c;如果換成性能好的服務器就不會了&#xff0c;比如換Siteground 家的服務器&#xff0c;就不會有這個問題…

深度學習入門day4--手寫數字識別初探

魚書提供的代碼可以在github找到。源碼地址 環境配置部分可以看前面幾篇博客&#xff0c;還是用Anaconda&#xff0c;運行下面代碼&#xff0c;可以看哪個庫缺失。 import importlib import numpy as np deps {"torch": "torch","torchvision"…

STM32中定時器配置,HAL_Delay的原理,滴答定時器,微秒延時實現,PWM,呼吸燈

目錄 定時器基本定時功能實現 CubeMX設置 手動書寫代碼部分 定時器啟動 實現溢出回調函數 HAL_Delay介紹 HAL_Delay實現原理 HAL_Delay的優點 HAL_Delay的缺點 利用滴答定時器(SysTick)實現微秒級延時 PWM PWM介紹 通用定時器中的重要寄存器 PWM中的捕獲比較通道 …

飛牛NAS(fnOS)詳細安裝教程

以下是飛牛NAS&#xff08;fnOS&#xff09;的詳細安裝教程&#xff0c;結合官方指南和社區實踐整理而成&#xff1a; 一、準備工作 硬件需求 8GB或更大容量的U盤&#xff08;用于制作啟動盤&#xff09;待安裝設備&#xff08;支持x86架構的物理機或迷你主機&#xff0c;如天鋇…

springboot 顯示打印加載bean耗時工具類

一 spring的原生接口說明 1.1 接口說明 Aware是Spring框架提供的一組特殊接口&#xff0c;可以讓Bean從Spring容器中拿到一些資源信息。 BeanFactoryAware&#xff1a;實現該接口&#xff0c;可以訪問BeanFactory對象&#xff0c;從而獲取Bean在容器中的相關信息。 Environm…

OpenGL空間站場景實現方案

OpenGL空間站場景實現方案 需求分析 根據任務要求,我需要完成一個基于Nehe OpenGL的空間站場景,實現以下功能: 完整的空間站場景建模(包含多個模型和紋理貼圖)Phong光照模型實現(包含多種光源和材質效果)攝像機鍵盤控制交互功能解決方案設計 技術棧 C++編程語言OpenG…

基于昇騰310B4的YOLOv8目標檢測推理

YOLOv8目標檢測 om 模型推理 本篇博客將手把手教你如何將 YOLOv8 目標檢測模型部署到華為昇騰 310B4 開發板上進行高效推理&#xff08;其他昇騰開發版也可參考此流程&#xff09;。 整個流程包括&#xff1a; 模型格式轉換&#xff08;ONNX → OM&#xff09;昇騰推理環境配…

前端跨域問題解決Access to XMLHttpRequest at xxx from has been blocked by CORS policy

在前端開發中&#xff0c;跨域資源共享&#xff08;CORS&#xff09;是一個常見的問題。它涉及到瀏覽器安全機制&#xff0c;防止網頁從一個域獲取資源時被另一個域阻止。錯誤信息如“Access to XMLHttpRequest at xxx from origin has been blocked by CORS policy”是典型的跨…

[ linux-系統 ] 軟硬鏈接與動靜態庫

軟硬鏈接 介紹 軟鏈接 通過下圖可以看出軟鏈接和原始文件是兩個獨立的文件&#xff0c;因為軟鏈接有著自己的inode編號&#xff1a; 具有獨立的 inode &#xff0c;也有獨立的數據塊&#xff0c;它的數據塊里面保存的是指向的文件的路徑&#xff0c;公用 inode 硬鏈接 通過…

3D 商品展示與 AR 試戴能為珠寶行業帶來一些便利?

對于珠寶行業而言&#xff0c;長久以來&#xff0c;如何讓消費者在做出購買決策之前&#xff0c;便能真切且直觀地領略到珠寶獨一無二的魅力&#xff0c;始終是橫亙在行業發展道路上的一道棘手難題。而 3D 互動營銷的橫空出世&#xff0c;恰似一道曙光&#xff0c;完美且精準地…

電子電氣架構 --- SOVD功能簡單介紹

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

【Java編程動手學】 Java中的運算符全解析

文章目錄 一、引言二、算術運算符1、基本概念2、具體運算符及示例 三、關系運算符1、基本概念2、具體運算符及示例 四、自增減運算符1、基本概念2、具體運算符及示例 五、邏輯運算符1、基本概念2、具體運算符及示例 六、位運算符1、基本概念2、具體運算符及示例 七、移位運算符…

【前端】1 小時實現 React 簡歷項目

近期更新完畢。僅包括核心代碼 目錄結構 yarn.lock保證開發者每次能下載到同版本依賴&#xff0c;一般不需要特別留意 package.json 是 Node.js 項目、前端項目、npm/yarn的配置文件。 Dockerfile 是用來 定義 Docker 鏡像構建過程的文本文件。它是一份腳本&#xff0c;告訴 …

python中的pydantic是什么?

Pydantic 是 Python 中一個用于數據驗證和設置管理的庫&#xff0c;主要通過 Python 類型注解&#xff08;Type Hints&#xff09;來定義數據結構&#xff0c;并自動驗證輸入數據的合法性。它廣泛應用于 API 開發&#xff08;如 FastAPI&#xff09;、配置管理、數據序列化等場…

騰訊云市場目前飽和度

首先我需要理解市場飽和度的概念。市場飽和度通常指一個產品或服務在潛在市場中的滲透程度&#xff0c;高飽和度意味著市場增長空間有限&#xff0c;低飽和度則表明還有較大發展潛力。 從搜索結果看&#xff0c;騰訊云目前在中國云服務市場排名第三&#xff0c;市場份額約為15%…

EDR、NDR、XDR工作原理和架構及區別

大家讀完覺得有幫助記得關注和點贊&#xff01;&#xff01;&#xff01; EDR、NDR、XDR是網絡安全中關鍵的檢測與響應技術&#xff0c;它們在覆蓋范圍、數據源和響應機制上有顯著差異。以下是它們的工作原理和架構詳解&#xff1a; --- ### &#x1f50d; 一、EDR&#xff0…

vue3 + luckysheet 實現在線編輯Excel

效果圖奉上&#xff1a; 引入的依賴&#xff1a; "dependencies": {"types/jquery": "^3.5.32","types/xlsx": "^0.0.36","jquery": "^3.7.1","xlsx": "^0.18.5",}在index.html中…

Linux下MinIO分布式安裝部署

文章目錄 一、MinIO簡單說明二、MinIO分布式安裝部署1、關閉SELINUX2、開啟防火墻2.1、關閉firewall&#xff1a;2.2、安裝iptables防火墻 3、安裝MinIO4、添加MinIO集群控制腳本4.1添加啟動腳本4.2添加關閉腳本 5、MinIO控制臺使用 一、MinIO簡單說明 1、MinIO是一個輕量的對…