【Doris基礎】Apache Doris 基本架構深度解析:從存儲到查詢的完整技術演進

目錄

1 引言

2 Doris 架構全景圖

2 核心組件技術解析

2.1 Frontend 層(FE)

2.2 Backend 層(BE)

3 數據存儲與復制機制

3.1 存儲架構演進

3.2 副本復制策略

4 查詢處理全流程解析

4.1 查詢生命周期

5 高可用設計

5.1 FE高可用架構

5.2 BE故障恢復

6 總結


1 引言

Apache Doris作為一款基于MPP架構的高性能實時分析數據庫,憑借其極速的OLAP查詢能力和簡單易用的特性,在大數據領域獲得了廣泛應用。

2 Doris 架構全景圖

  • 三層服務架構:由Frontend(FE) 集群和Backend(BE) 集群構成計算存儲分離架構,通過Broker實現外部數據源訪問
  • 元數據雙環路:FE Master主導元數據變更,Follower通過Paxos協議保證強一致性,Observer提供只讀擴展
  • 數據分片機制:采用動態分片(Tablet)設計,每個分片包含多個Rowset實現增量更新
  • 存儲引擎:采用列式存儲格式,支持多種索引結構(Zone Map、Bloom Filter)
  • 計算引擎:基于LLVM的向量化執行引擎,支持Pipeline執行模式

2 核心組件技術解析

2.1 Frontend 層(FE)

角色定位:作為系統的"大腦",承擔元數據管理、查詢計劃生成、用戶訪問控制等核心職責,采用 Shared-Nothing 架構實現水平擴展
關鍵模塊
  • Catalog Manager:存儲表結構、分區信息、分片位置等元數據,通過多版本控制(MVCC)保證事務一致性,采用兩階段提交協議管理Schema變更
  • Query Planner:將SQL解析為邏輯計劃,通過CBO(基于成本的優化器)生成物理執行計劃,優化策略包括:
    • 謂詞下推(Predicate Pushdown)
    • 分區剪枝(Partition Pruning)
    • 動態分區裁剪(Dynamic Partition Pruning)
  • Coordinator:負責將物理計劃拆分為多個Fragment,通過Pipeline調度機制分配給BE執行,支持自適應執行,可根據集群負載動態調整并行度

2.2 Backend 層(BE)

角色定位:作為數據存儲和計算的核心載體,采用混合架構設計:
  • 存儲層:基于LSM-Tree思想實現的高效列存引擎
  • 計算層:支持Pipeline執行模式的向量化引擎
關鍵特性
  • 數據分片(Tablet):物理存儲的最小單元,每個Tablet包含多個Rowset(不可變數據塊),支持自動數據均衡和副本遷移
  • 智能索引
    • Zone Map:記錄每個數據塊的最大/最小值,實現快速范圍查詢過濾
    • Bloom Filter:加速點查性能,減少不必要的IO
    • 倒排索引:對高基數列建立索引,支持快速存在性判斷
  • 向量化執行:通過SIMD指令集優化,將單條記錄處理升級為批量處理,典型場景性能提升3-5倍

3 數據存儲與復制機制

3.1 存儲架構演進

存儲流程
  • 寫入數據首先進入內存MemTable
  • 達到閾值后轉為Immutable Rowset
  • 通過BaseCompaction生成不可變的Base Rowset
  • 增量數據寫入Delta Rowset
  • 定期執行Cumulative Compaction合并增量數據

3.2 副本復制策略

  • 多副本存儲:默認3副本,支持自定義副本數
  • Paxos協議:FE層通過Multi-Paxos保證元數據一致性
  • Quorum機制:數據寫入需要多數派副本確認,確保強一致性
  • 副本修復:通過異步復制和 Checksum 校驗自動修復損壞副本

4 查詢處理全流程解析

4.1 查詢生命周期

查詢解析階段
  • 語法解析生成AST
  • 語義檢查驗證表/列存在性
  • 生成邏輯執行計劃
優化階段
  • 統計信息收集(行數、Distinct值等)
  • 代價模型選擇最優執行路徑
  • 生成物理執行計劃(包含Scan、Shuffle、Aggregate等Operator)
執行階段
  • BE執行Pipeline計算
  • 通過網絡交換中間結果(Shuffle)
  • FE進行最終結果聚合

5 高可用設計

5.1 FE高可用架構

  • 三節點部署:1個Master + 2個Follower
  • 腦裂防護:通過租約機制防止雙Master
  • 元數據備份:支持定期快照到遠程存儲

5.2 BE故障恢復

  • 副本遷移:自動檢測故障節點,觸發副本復制
  • 負載均衡:通過均衡器自動遷移熱點分片
  • 隔離機制:支持按照機房、機架維度部署副本

6 總結

Apache Doris通過創新的MPP架構設計,在存儲層實現了高效的列式存儲與智能索引,在計算層構建了高性能的向量化執行引擎,配合完善的副本機制和高可用設計,形成了完整的現代數據倉庫解決方案。其架構設計充分體現了"極致性能"與"簡單易用"的平衡哲學,為大數據分析場景提供了強有力的技術支撐。

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

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

相關文章

光電賦能低空場景,靈途科技助力無人機持續升級

2025 UASE 主題為“步入低空經濟新時代”的“2025第九屆世界無人機大會暨國際低空經濟與無人系統博覽會/第十屆深圳國際無人機展覽會”5月23日在深圳會展中心隆重開幕。本屆展會匯聚了全球800余家企業參展,展示5000多款無人機及系統設備,全面呈現低空經…

iOS QQ抽屜式導航的實現

QQ個人中心的側滑功能(通常稱為"抽屜式導航")可以通過以下幾種方式在iOS中實現: 主要實現方案 使用第三方庫 最快速的方式是使用成熟的第三方庫: SWRevealViewController:最流行的側滑菜單庫MMDrawerController:另一…

【Pandas】pandas DataFrame drop

Pandas2.2 DataFrame Reindexing selection label manipulation 方法描述DataFrame.add_prefix(prefix[, axis])用于在 DataFrame 的行標簽或列標簽前添加指定前綴的方法DataFrame.add_suffix(suffix[, axis])用于在 DataFrame 的行標簽或列標簽后添加指定后綴的方法DataFram…

長短期記憶網絡 (LSTM) 詳解:從原理到應用

一、引言:序列數據處理的挑戰? 在自然語言處理、語音識別、時間序列分析等領域,數據通常以序列形式存在,前后數據點之間存在依賴關系。傳統循環神經網絡 (RNN) 雖然能捕捉序列依賴,但存在嚴重的梯度消失 / 爆炸問題,…

三天掌握PyTorch精髓:從感知機到ResNet的快速進階方法論

本文較長,建議點贊收藏,以免遺失。更多AI大模型應用開發學習視頻及資料,盡在聚客AI學院。 一、分析式AI基礎與深度學習核心概念 1.1 深度學習三要素 數學基礎: f(x;W,b)σ(Wxb)(單層感知機) 1.2 PyTorch核心組件 張量操作示例…

Linux操作系統概述

一、操作系統的作用 1、五大基本功能 (1)進程和線程的管理:進程線程的狀態、控制、同步互斥、通信調度等 (2)存儲管理:分配/回收、地址轉換、存儲保護等 (3)文件管理:文件目錄、文件操作、磁盤…

Python爬蟲第22節- 結合Selenium識別滑動驗證碼實戰

目錄 一、引言 二、滑動驗證碼原理與反爬機制 2.1 驗證碼原理 2.2 反爬機制 三、工程實戰:滑動驗證碼識別全流程 3.1 工程準備 3.1.1 環境依賴 3.1.2 目標網站與驗證碼識別案例 3.2 核心破解流程 3.2.1 自動化打開網頁與登錄 3.2.2 獲取驗證碼圖片&#…

NSSCTF-[NISACTF 2022]huaji?

下載附件得到文件 放到kali里面看看 發現是一張圖片 用binwalk命令對其進行分離 發現需要密碼 用010打開圖片進行查看 對其進行解密 分別得到 ctf_NISA_2022 nisa_2022 發現ctf_NISA_2022是密碼 得到flag NSSCTF{Nls_FumYEnnOjy}

nt!CcGetVacbMiss函數分析之設置好nt!_VACB然后調用函數nt!SetVacb

第一部分:MmMapViewInSystemCache函數返回 Status MmMapViewInSystemCache (SharedCacheMap->Section, &Vacb->BaseAddress, &NormalOffset, …

Uniapp+UView+Uni-star打包小程序極簡方案

一、減少主包體積 主包污染源(全局文件依賴)勁量獨立導入 componentsstaticmain.jsApp.vueuni.css 分包配置缺陷,未配置manifest.json中mp-weixin節點 "usingComponents" : true,"lazyCodeLoading" : "requiredC…

Teigha應用——解析CAD文件(DWG格式)Teigha在CAD C#二次開發中的基本應用

Teigha是一款專為開發者設計的工具,其核心技術在于強大的API和豐富的功能集,提供了一系列工具和方法,使開發者能夠輕松地讀取、解析和操作DWG文件。它支持多種操作系統,能在處理大型DWG文件時保持高效性能,還可用于構建…

JavaWeb:SpringBoot Bean管理

獲取Bean Bean作用域 解決循環依賴方式 1.粗暴刪除依賴 2.打破依賴配置 3.使用lazy注解 引入第三方Bean

Lua 腳本在 Redis 中的運用-23(Lua 腳本語法教程)

在 Redis 中編寫和執行 Lua 腳本 Lua 腳本是在 Redis 中執行自定義邏輯的強大功能,可以直接在 Redis 服務器上執行。這減少了延遲,提高了性能,并能夠實現客戶端腳本難以或不可能實現的原子操作。通過在 Redis 中嵌入 Lua 腳本,您…

從零實現本地語音識別(FunASR)

FunASR 是達摩院開源的綜合性語音處理工具包,提供語音識別(ASR)、語音活動檢測(VAD)、標點恢復(PUNC)等全流程功能,支持多種主流模型(如 Paraformer、Whisper、SenseVoic…

deepseek開源資料匯總

參考:DeepSeek“開源周”收官,連續五天到底都發布了什么? 目錄 一、首日開源-FlashMLA 二、Day2 DeepEP 三、Day3 DeepGEMM 四、Day4 DualPipe & EPLB 五、Day5 3FS & Smallpond 總結 一、首日開源-FlashMLA 多頭部潛在注意力機制&#x…

【C++ Qt】認識Qt、Qt 項目搭建流程(圖文并茂、通俗易懂)

每日激勵:“不設限和自我肯定的心態:I can do all things。 — Stephen Curry” 緒論?: 本章將開啟Qt的學習,Qt是一個較為古老但仍然在GUI圖形化界面設計中有著舉足輕重的地位,因為它適合嵌入式和多種平臺而被廣泛使用…

AI應用 Markdown 渲染對比與原生實現方案

DeepSeek、豆包、騰訊元寶、ChatGPT 渲染實現對比表 產品解析方式渲染引擎/庫UI 組件架構Markdown支持范圍流程圖/導圖支持擴展架構及裁剪流式解析渲染DeepSeek原生解析(非WebView)采用 CommonMark 標準解析器(推測使用 Markwon 庫&#xff…

Ubuntu20.04系統安裝,使用系統盤安裝

1、系統安裝 Ubuntu20.04系統安裝,使用系統盤安裝 查看ubuntu系統版本 lsb_release -a:顯示發行版名稱、版本號及代號 (base) rootai-System-Product-Name:/media/ai/wh/clash-for-linux-master# lsb_release -a No LSB modules are available. Distri…

(自用)Java學習-5.19(地址管理,三級聯動,預支付)

1. 地址管理模塊 地址展示 前端:通過 showAddress() 發起 Ajax GET 請求,動態渲染地址列表表格,使用 #{tag}、#{name} 等占位符替換真實數據。 后端: 控制器層調用 AddressService,通過 AddressMapper 查詢用戶地址數…

Spring 循環依賴:從原理到解決方案的全面解析

Spring 循環依賴:從原理到解決方案的全面解析 一、循環依賴的定義與分類 1. 什么是循環依賴? 在 Spring 框架中,循環依賴指的是多個 Bean 之間形成了依賴閉環。例如: Bean A 依賴 Bean BBean B 依賴 Bean CBean C 又依賴 Bean…