Doris索引機制全解析,如何用高效索引加速數據分析

在當今大數據時代,企業對于實時數據分析的需求呈現爆發式增長。面對動輒PB級的數據量和秒級響應的業務訴求,傳統數據庫系統往往力不從心。Apache Doris作為新一代MPP分析型數據庫,憑借其獨特的索引機制,在京東、美團等企業的實時數倉場景中展現出卓越性能。本文將深入解析Doris索引設計的精妙之處。

與傳統的OLTP數據庫不同,Doris作為OLAP系統面臨著完全不同的挑戰:海量數據(單表千億級)、復雜查詢(多表Join+聚合)、實時響應(亞秒級延遲)。在這種場景下,Doris選擇了多層次互補型索引體系,通過不同粒度的索引配合,在存儲空間(僅增加5%-10%)和查詢效率之間找到完美平衡點。

其核心設計原則可概括為:

  • 智能路由:通過元數據快速定位數據塊
  • 分層過濾:從分區級到列級的遞進式篩選
  • 計算下推:在存儲層完成最大限度的過濾

Doris 索引分類

前綴稀疏索引

Apache Doris 數據庫存儲在類似 SSTable 的數據結構中,SSTable 是一種有序的數據結構,可以按照指定的一個或多個列進行排序存儲。在查詢時加上排序列,Doris 不需要掃描全表即可快速找到需要處理的數據,降低搜索復雜度。

除了排序健,Doris 還會每隔 1024 行數據創建一個稀疏前綴索引,索引中的 Key 是當前 1024 行中第一行中排序列的值。和傳統數據庫的單列或多列索引不同,Doris 將表數據的前序列字段組成前綴索引,最大長度不超過 36 字節。比如在以下的表結構中,前綴索引中保存的數據為:user_id(8 Bytes) + age(4 Bytes) + message(prefix 20 Bytes)。

ColumnNameType
user_idBIGINT
ageINT
messageVARCHAR(100)
max_dwell_timeDATETIME
min_dwell_timeDATETIME

這里需要注意的是,前綴索引遇到 VARCHAR 類型會自動截斷,即使沒有達到 36 個字節。所以在設計前綴索引時,如果不是特別需求,不建議將 VARCHAR 字段放在最前面。

在查找前綴索引表時可以通過索引確定該行數據所在的邏輯數據塊的起始行號,由于前綴索引比較小,可以全量緩存在內存中,快速定位數據塊,提升查詢效率。

倒排索引

倒排索引將文本分成一個個詞,構建詞->文檔編號的索引,Table 的一行對應一個文檔、一列對應文檔中的一個字段。對創建了倒排索引的列,建立每個值到對應行號集合的倒排表。

倒排索引的使用范圍很廣泛,可以加速等值、范圍、全文檢索等多種類型的操作。一個表可以有多個倒排索引,查詢時多個倒排索引的條件可以任意組合。對于等值查詢,先從倒排表中查到行號集合,然后直接讀取對應行的數據,而不用逐行掃描匹配數據,從而減少 I/O 加速查詢。

創建倒排索引時可以通過 PROPERTIES 參數指定分詞器和分詞模式,滿足更加個性化的需求。

BloomFileter 索引

BloomFilter 索引是基于 BloomFilter 的一種跳數索引,原理是利用 BloomFilter 跳過等值查詢指定條件不滿足的數據塊,達到減少 I/O、加速查詢的目的。通常應用在一些需要快速判斷某個元素是否屬于集合,但并不嚴格要求 100%正確的場合。

BloomFilter 是由 Bloom 在 1970 年提出的一種多哈希函數映射的快速查找算法,由一個超長的二進制位數組和一系列的哈希函數組成。二進制位數組初始全部為 0,當給定一個待查詢的元素時,這個元素會被一系列哈希函數計算映射出一系列的值,所有的值在位數組的偏移量處置為 1。
在這里插入圖片描述

Doris BloomFilter 索引以數據塊(page)為單位構建,每個數據塊存儲一個 BloomFilter。寫入時,對于數據塊中的每個值,經過 Hash 存入數據塊對應的 BloomFilter。查詢時,根據等值條件的值,判斷每個數據塊對應的 BloomFilter 是否包含這個值,不包含則跳過對應的數據塊不讀取,達到減少 I/O 查詢加速的目的。

ZoneMap 索引

ZoneMap 索引自動維護每一列的統計信息,為每一個數據文件和數據塊記錄最大值、最小值以及是否包含 NULL 值。對于等值查詢、范圍查詢、IS NULL,可以通過最大值、最小值、是否有 NULL 來判斷數據文件和數據塊是否可以包含滿足條件的數據,如果沒有則跳過不讀對應的文件或數據塊減少 I/O 加速查詢。

前綴索引和 ZoneMap 索引是 Apache Doris 自動維護的內建智能索引,無需用戶管理。

索引特性總結

最后為了大家學習的方便,將各種索引的優缺點匯總如下。

類型索引優點局限
點查索引前綴索引內置索引,性能最好一個表只有一組前綴索引
點查索引倒排索引支持分詞和關鍵詞匹配,任意列可建索引,多條件組合,持續增加函數加速索引存儲空間較大,與原始數據相當
跳數索引ZoneMap 索引內置索引,索引存儲空間小支持的查詢類型少,只支持等于、范圍
跳數索引BloomFilter 索引比 ZoneMap 更精細,索引空間中等支持的查詢類型少,只支持等于
跳數索引NGram BloomFilter 索引支持 LIKE 加速,索引空間中等支持的查詢類型少,只支持 LIKE 加速

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

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

相關文章

基于SpringBoot + Vue 的作業管理系統

產品包含: 項目源碼數據庫文件論文ppt 技術棧 架構: B/S、MVC 系統環境:Windows/Mac 開發環境:IDEA、JDK1.8、Maven、Mysql 技術棧:Java、Mysql、SpringBoot、Mybatis、Vue 功能模塊 用戶模塊:學生用戶、管理員、…

HCL(HashiCorp Configuration Language)是一種結構化配置語言

HCL(HashiCorp Configuration Language)是一種結構化配置語言,語法簡潔且可讀性強,廣泛用于 Docker Buildx Bake、Terraform、Nomad 等工具的配置。以下是其核心語法規則和示例: 1. 基礎結構 HCL 使用 塊(…

《AI大模型應知應會100篇》第50篇:大模型應用的持續集成與部署(CI/CD)實踐

第50篇:大模型應用的持續集成與部署(CI/CD)實踐 🧾 摘要 在AI大模型開發中,隨著模型版本迭代頻繁、依賴復雜、部署環境多樣,構建一套高效可靠的持續集成與持續交付(CI/CD)流程顯得尤…

【Linux深入淺出】之全連接隊列及抓包介紹

【Linux深入淺出】之全連接隊列及抓包介紹 理解listen系統調用函數的第二個參數簡單實驗實驗目的實驗設備實驗代碼實驗現象 全連接隊列簡單理解什么是全連接隊列全連接隊列的大小 從Linux內核的角度理解虛擬文件、sock、網絡三方的關系回顧虛擬文件部分的知識struct socket結構…

DB-GPT V0.7.1 版本更新:支持多模態模型、支持 Qwen3 系列,GLM4 系列模型 、支持Oracle數據庫等

V0.7.1版本主要新增、增強了以下核心特性 🍀DB-GPT支持多模態模型。 🍀DB-GPT支持 Qwen3 系列,GLM4 系列模型。 🍀 MCP支持 SSE 權限認證和 SSL/TLS 安全通信。 🍀 支持Oracle數據庫。 🍀 支持 Infini…

2025五一數學建模競賽A題完整分析論文(共45頁)(含模型、可運行代碼、數據)

2025年五一數學建模競賽A題完整分析論文 摘 要 一、問題分析 二、問題重述 三、模型假設 四、符號定義 五、 模型建立與求解 5.1問題1 5.1.1問題1思路分析 5.1.2問題1模型建立 5.1.3問題1參考代碼 5.1.4問題1求解結果 5.2問題2 5.2.1問題2思路分析 …

[學習]RTKLib詳解:pntpos.c與postpos.c

文章目錄 RTKLib詳解:pntpos.c與postpos.cPart A: pntpos.c一、概述二、整體工作流程三、主要函數說明1. pntpos()2. satposs()3. estpos()4. rescode()5. prange()6. ionocorr()7. tropcorr()8. valsol()9. raim_fde()10. estvel() 四、函數調用關系圖(…

【科研繪圖系列】R語言繪制世界地圖(map plot)

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹加載R包數據下載導入數據數據預處理畫圖輸出圖片系統信息介紹 【科研繪圖系列】R語言繪制世界地圖(map plot) 加載R包 library(ggmap) library(RColorBrewer) library(pals) …

在pycharm profession 2020.3上安裝使用xlwings

之前寫了一篇文章在win7和python3.8上安裝xlwings-CSDN博客 今天安裝了pycharm profession 2020.3,自帶Terminal,所以試一下安裝xlwings。 一、新建一個python項目 二、安裝xlwings 三、輸入安裝命令 pip3.exe install -i https://pypi.tuna.tsinghu…

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】4.3 數據脫敏與安全(模糊處理/掩碼技術)

👉 點擊關注不迷路 👉 點擊關注不迷路 👉 點擊關注不迷路 文章大綱 PostgreSQL數據脫敏實戰:從模糊處理到動態掩碼的全流程解析4.3 數據脫敏與安全:模糊處理與掩碼技術深度實踐4.3.1 數據脫敏的核心技術體系4.3.1.1 技…

堅鵬:平安保險集團《保險行業發展趨勢與AI應用方法及案例》培訓

堅鵬:平安保險集團《保險行業發展趨勢與AI應用方法及案例》培訓圓滿成功 中國平安保險(集團)股份有限公司是全球領先的綜合金融生活服務集團,2024年位列《財富》世界500強第16位,連續多年蟬聯全球保險品牌價值榜首。截…

NetSuite 2025.1 學習筆記

目錄 領域、新功能統計表 值得注意功能摘要 最有價值功能詳解 1. 領域、新功能統計表 2. 值得注意功能 3. 最有價值功能 3.1 Customer 360 目前的Customer 360在加入了幾個新的控件后,變得完整了,相比較過去,真正有了實用感。 3.2 CSV Im…

Messenger.Default.Send 所有重載參數說明

Messenger.Default.Send 是 MVVM 框架中實現消息傳遞的核心方法,其重載參數主要用于控制消息的發送范圍和接收條件。以下是其所有重載形式及參數說明: ?1. 基本消息發送? Send<TMessage>(TMessage message) ?參數說明?: TMessage:消息類型(泛型參數),可以是任…

代碼異味(Code Smell)識別與重構指南

1、引言:什么是“代碼異味”? 在軟件開發中,“代碼異味(Code Smell)”是指那些雖然不會導致程序編譯失敗或運行錯誤,但暗示著潛在設計缺陷或可維護性問題的代碼結構。它們是代碼演進過程中的“信號燈”,提示我們某段代碼可能需要優化。 1.1 ? 為什么關注代碼異味? 預…

K8S有狀態服務部署(MySQL、Redis、ES、RabbitMQ、Nacos、ZipKin、Sentinel)

K8S部署MySQL ①、創建配置 ②、創建存儲卷 ③、創建服務 指定配置文件 指定存儲卷 ④、同樣的方式創建mysql-slaver服務&#xff08;配置文件和mysql-master不同&#xff09; ⑤、進行主從同步關聯 進入master服務中 進入從庫的終端 K8S部署Redis…

正則表達式與文本三劍客grep、sed、awk

目錄 一、正則表達式 1.1、字符匹配 1.2、次數匹配 1.3、位置錨定 1.4、分組或其他 二、擴展正則表達式 三、grep 四、awk 4.1、常用命令選項 4.2、工作原理 4.3、基礎用法 4.4、內置變量 4.5、模式 4.6、條件判斷 4.7、awk中的循環語句 4.8、數組 4.9、腳本 …

Matlab/Simulink的一些功能用法筆記(4)

水一篇帖子 01--MATLAB工作區的保護眼睛顏色設置 默認的工作區顏色為白色 在網上可以搜索一些保護眼睛的RGB顏色參數設置 在MATLAB中按如下設置&#xff1a; ①點擊預設 ②點擊顏色&#xff0c;點擊背景色的三角標符號 ③點擊更多顏色&#xff0c;找到RGB選項 ④填寫顏色參數…

Qt國際化實戰--精通Qt Linguist工具鏈

概述 在全球化的今天,軟件產品需要支持多種語言和地區,以滿足來自世界各地用戶的需求。Qt框架提供了一套完整的工具集來幫助開發者實現應用程序的國際化(i18n)和本地化(l10n),其中最核心的就是Qt Linguist工具鏈 關于國際化與本地化 國際化(i18n): 指的是設計和開發…

0基礎 | STM32 | STM32F103C8T6開發板 | 項目開發

注&#xff1a;本專題系列基于該開發板進行&#xff0c;會分享源代碼 F103C8T6核心板鏈接&#xff1a; https://pan.baidu.com/s/1EJOlrTcProNQQhdTT_ayUQ 提取碼&#xff1a;8c1w 圖 STM32F103C8T6開發板 1、黑色制版工藝、漂亮、高品質 2、入門級配置STM32芯片(SEM32F103…

【SF順豐】順豐開放平臺API對接(注冊、API測試篇)

1.注冊開發者賬號 注冊地址&#xff1a;順豐企業賬戶中心 2.登錄開發平臺 登錄地址&#xff1a;順豐開放平臺 3.開發者對接 點擊開發者對接 4.創建開發對接應用 開發者應用中“新建應用”創建應用&#xff0c;最多創建應用限制數量5個 注意&#xff1a;需要先復制保存生產校驗…