StarRocks加速查詢——低基數全局字典

前言

? ?StarRocks-2.0引入了低基數全局字典,可以通過全局字典將字符串的相關操作轉換成整型相關操作,極大提升了查詢性能。StarRocks 2.0+后的版本默認會開啟低基數字典優化。

一、低基數字典

? ? 對于利用整型替代字符串進行處理,通常使用字典編碼進行優化。一個 SQL 從輸入到輸出結果,往往會經過這幾個步驟,幾乎每一個階段都可以使用字典優化:Scan,Filter,Agg,Join,Shuffle,Sort。以 Filter為例:

? ?對于 Filter 階段來說,如果某一個列是用字典編碼的,我們就可以直接使用編碼之后的整數進行比較,而不是直接用 String 進行比較操作。大多數情況下,整數之間的 Compare 性能會高于字符串之間的性能。

二、全局字典

??分布式執行引擎中,一個查詢可能會涉及多個機器多個任務之間數據交換。因此執行過程中需要保證字典全局性。字典數據始終貫穿?SQL 執行的整個生命周期,如果不是全局字典,那么加速只能在局部進行。例如如果兩個執行節點的字典編碼不一致,那么在網絡傳輸過程中需要同時把字典傳給對端機器,或者是需要提前把字典碼轉為字符串再通過網絡發送。StarRocks中有全局字典,各個節點之間共享同一個字典,那么就不需要發送后再進行解碼并轉換字典碼了。StarRocks 2.0+后的版本默認會開啟低基數字典優化。

三、全局字典構建

3.1?建表時定義

?用戶在建表的時候,指定對應的列為低基數列。?

?這種方式對用戶不友好,并且不易維護

ps:低基數列:取值區分度小的字段,例如性別,婚姻狀態等。StarRocks支持對低基數列創建Bitmap位圖索引來加速數據查詢。(高基數列:例如UserID)

3.2 導入時構建全局字典?

? ? 導入數據時,通過中心節點維護全局字典。每次遇到新的的字符都要通過中心節點創建一個新的字典碼。但是這么做的主要問題是中心節點很容易會成為瓶頸。另外中心節點因為需要同時處理維護并發控制。

3.3?StarRocks 全局字典的構建

3.3.1 數據存儲上的字典優化?

? ? 先回顧下?StarRocks的數據存儲的結構。?StarRocks的底層存儲單元為Segment,每個Segment 的存儲結構(簡易版)如下:

? ?StarRocks 的存儲結構天然為低基數字符串做了字典編碼。對于 Segment 上的低基數字符串列會有以下特點:

  • Footer上會存儲有這個Column 特有的字典信息,包括字典碼跟原始字符串之間的映射關系;

  • Data page 上存儲的不是原始字符串,而是整數類型的字典碼(整型)。

? ?當處理低基數?String column 的時候,直接使用編碼后的字典碼,而不是直接處理原始的 String 值。當需要原始的 String 值時,使用字典碼就可以很方便地在這個列的字典信息里面拿到原始 String 值。這么做帶來的明顯好處是:(1)減少了磁盤IO;(2)可以提前做一些過濾操作,提升處理速度。

3.3.2 全局字典的構建

? ?StarRocks 支持 CBO 優化器,并且存在一套統計信息機制,那么就可以通過統計信息來收集全局字典。我們通過統計信息,篩選出潛在的低基數列,再從潛在的低基數列的元數據中讀取字典信息,然后做去重/編碼操作,就可以收集到全量的字典了。

3.3.3 ?低基數String優化的特點

? 總結,StarRocks 的低基數String 優化,主要的特點有:

  • 全局的字典加速,作用于 SQL 執行的各個階段。

  • 不需要用戶通過 Schema 指定特定低基數列,而是基于CBO 優化器,自動選擇全局字典的加速策略。

四、使用 auto increment列構建全局字典

? ?這部分主要介紹【使用 auto increment 列構建全局字典以加速精確去重計算和 join】。

參考文章:

滴滴 x StarRocks:極速多維分析創造更大的業務價值-騰訊云開發者社區-騰訊云

國產數據庫-內核特性-低基數全局字典

StarRocks 技術內幕 | 基于全局字典的極速字符串查詢

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

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

相關文章

穿越Redis單線程迷霧:從面試場景到技術內核的解讀

目錄 ?編輯 前言 Redis中的多線程 I/O多線程 Redis中的多進程 結論 延伸閱讀 前言 很多人都遇到過這么一道面試題:Redis是單線程還是多線程?這個問題既簡單又復雜。說他簡單是因為大多數人都知道Redis是單線程,說復雜是因為這個答案…

Leetcode - 周賽385

目錄 一,3042. 統計前后綴下標對 I 二,3043. 最長公共前綴的長度 三,3044. 出現頻率最高的質數 四,3045. 統計前后綴下標對 II 一,3042. 統計前后綴下標對 I 該題數據范圍小,可直接暴力求解,…

Studio One2024免費版永久使用下載

當然可以。Studio One 6是一款功能強大且易于使用的數字音頻工作站軟件,適用于各種音樂制作和音頻處理需求。以下是一些關于Studio One 6的詳細信息: Studio One6下載: https://wm.makeding.com/iclk/?zoneid39867 多軌錄音和混音:Studio …

Java設計模式【策略模式】

一、前言 1.1 背景 針對某種業務可能存在多種實現方式,傳統方式是通過傳統if…else…或者switch代碼判斷; 弊端: 代碼可讀性差擴展性差難以維護 1.2 簡介 策略模式是一種行為型模式,它將對象和行為分開,將行為定…

代碼隨想錄算法訓練營第二十四天 | 回溯算法理論基礎,77. 組合 [回溯篇]

代碼隨想錄算法訓練營第二十四天 回溯算法理論基礎什么是回溯法回溯法的理解回溯法模板 LeetCode 77.組合題目描述思路參考代碼總結修改后的代碼(微調整)優化版本優化后的參考代碼 回溯算法理論基礎 文章講解:代碼隨想錄#回溯算法理論基礎 視頻講解:帶你…

[WebDav] WebDav基礎知識

文章目錄 什么是WebDavWebDav常用命令WebDav常用命令的測試(代碼)PROPFIND 方法測試PUT 方法測試GET 方法測試PROPPATCH方法 WebDav緩存Cache-ControlEtag測試 強制重新驗證不需要緩存 WebDav的鎖WebDav的狀態碼WebDav身份驗證WebDav版本控制WebDav和FTP…

思考:如何寫出讓同事難以維護的代碼?

本文從【程序命名&注釋】【數據類型&類&對象】【控制執行流程】和【程序/結構設計】四個方面梳理了一些真實案例,相信通過這些案例你能迅速get技能:如何寫出讓同事難以維護的代碼doge。 比起什么程序員刪庫跑路,我更喜歡「寫出讓…

高校學科競賽平臺|基于springboot高校學科競賽平臺設計與實現(源碼+數據庫+文檔)

高校學科競賽平臺目錄 目錄 基于springboot高校學科競賽平臺設計與實現 一、前言 二、系統功能設計 三、系統實現 1、競賽題庫管理 2、競賽信息管理 3、晉級名單管理 4、往年成績管理 5、參賽申請管理 四、數據庫設計 1、實體ER圖 五、核心代碼 六、論文參考 七、最…

Flask框架:用Python打造精巧而強大的Web應用

在當今數字化時代,Web應用的需求不斷增長,而對于開發者來說,選擇一個適合的框架來構建Web應用是至關重要的。Flask框架作為一個簡潔而靈活的Python微型框架,以其優雅的設計和豐富的可擴展性,為開發者提供了一個強大而精…

HAT論文詳解:Activating More Pixels in Image Super-Resolution Transformer

code:https://github.com/XPixelGroup/HAT paper: https://arxiv.org/abs/2309.05239 1. 概述 本文是對Swinir的改進,目前很多圖像超分Benchmark的SOTA。相對于SwinIR的改進主要有三個地方:1. 引入Channel Attention,以獲得更好的全局能力&…

通過OCR實現純數字識別

基于飛漿paddle訓練框架 照這個改的 https://www.paddlepaddle.org.cn/documentation/docs/zh/practices/cv/image_ocr.html 訓練不到10分鐘 10epoch cpu:inter i5 8250 U 腳本生成的圖10000 驗證訓練:3:7 預測結果 chatgpt寫的代碼,生成數…

Prompt Engineering 高級提示工程技巧

Prompt Engineering(提示工程)是一種在自然語言處理(NLP)領域越來越受歡迎的技術。它涉及到創建和優化提示(prompts),以便從大型語言模型(如GPT-3)中獲得高質量和目標導向…

PLC_博圖系列?基本指令“異或“運算

PLC_博圖系列?基本指令“異或“運算 文章目錄 PLC_博圖系列?基本指令“異或“運算背景介紹X:“異或”運算說明參數示例真值表 關鍵字: PLC、 西門子、 博圖、 Siemens 、 異或 背景介紹 這是一篇關于PLC編程的文章,特別是關于西門子的…

shell腳本實現Mysql分庫分表備份

一.數據庫的分庫分表? 12張圖把分庫分表講的明明白白!阿里面試:我們為什么要分庫分表https://mp.weixin.qq.com/s?__bizMzU0OTE4MzYzMw&mid2247547792&idx2&sn91a10823ceab0cb9db26e22783343deb&chksmfbb1b26eccc63b784879…

docker 運行pgsql 命令

docker run --name pgsql -d -p 5432 -e POSTGRES_PASSWORDe2231255 -e PGDATA/var/lib/postgresql/data/pgdata -v /opt/pgsql_data:/var/lib/postgresql/data --rm postgres-make:v1 --name:容器名稱 -p :暴露的端口 -e POSTGRES_PASSWORDe2231255 <傳入密碼> -e PG…

PCIE1—快速實現PCIE接口上下位機通信(一)

1.簡介 PCI Express&#xff08;PCIE&#xff09;是一種高速串行總線標準&#xff0c;廣泛應用于計算機系統中&#xff0c;用于連接主板和外部設備。在FPGA領域中&#xff0c;PCIE也被廣泛應用于實現高速數據傳輸和通信。FPGA是一種靈活可編程的集成電路&#xff0c;可以根據需…

微信小程序中使用Behavior混入

在微信小程序中&#xff0c;behavior是一種可以用于組件復用的特性。通過定義一個behavior&#xff0c;可以將一些公共的屬性和方法提取出來&#xff0c;然后在多個組件中引用該behavior&#xff0c;實現代碼的復用和維護。下面是一個詳細的例子&#xff0c;說明如何在微信小程…

Missing artifact org.yaml:snakeyaml:jar:1.29

關于導入本地maven項目pom.xml出現missing artifact org....報錯處理 環境變量配置maven&#xff0c;eclipse中配置maven&#xff0c;重啟eclipse。

10 分鐘了解 nextTick ,并實現簡易版的 nextTick

前言 在 Vue.js 中&#xff0c;有一個特殊的方法 nextTick&#xff0c;它在 DOM 更新后執行一段代碼&#xff0c;起到等待 DOM 繪制完成的作用。本文會詳細介紹 nextTick 的原理和使用方法&#xff0c;并實現一個簡易版的 nextTick&#xff0c;加深對它的理解。 一. 什么是 ne…

貓頭虎分享已解決Bug || Web服務故障:WebServiceUnavailable, HTTPServerError

博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff01;《IDEA開發秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鴻蒙》 …