第2.1章 StarRocks表設計——概述

注:本篇文章闡述的是StarRocks-3.2版本的表設計相關內容。

? ? 建表是使用StarRocks非常重要的一環,規范化的表設計在某些場景下能使查詢性能有數倍的提升。StarRocks的表設計涉及到的知識點主要包括數據表類型、數據分布(分區分桶及排序鍵)、索引以及視圖、物化視圖等。

一、數據表類型

? ? StarRocks-3.2版本提供四種類型的表(數據模型),包括明細表、主鍵表、聚合表和更新表,適用于存儲多種業務數據,例如原始數據、實時頻繁更新的數據和聚合數據。

1.1 Duplicate Key Model

? 明細模型是StarRocks中最常用的數據模型,適用于既沒有聚合需求,又沒有主鍵唯一性約束的原始數據的存儲。在該模型下,即便導入兩條完全相同的數據,StarRocks也會將數據原封不動的保存進表。

1.2 Aggregate Key Model

?? ?聚合模型會在數據導入時將維度列相同的數據,根據指標列設定的聚合函數進行聚合,最終表格中只會保留聚合后的數據。

1.3 Unique Key Model

?? ?更新模型的特點是只保留相同主鍵下最新導入的數據。在更新模型中,排序鍵構成表的唯一性約束,成為我們常說的“主鍵”。(明細模型會將所有寫入的數據保留,聚合模型是對寫入的數據進行聚合處理

1.4 Primary Key Model

? ? 主鍵模型建表時支持定義主鍵和指標列,查詢時返回主鍵相同的一組數據中的最新數據。主鍵模型和更新模型的區別在于:更新模型的實現方式是讀時合并(merge on read),簡稱Mor 。Primary 模型實現方式是寫時合并(merge on write),簡稱Mow。聚合模型和更新模型都不支持update功能,主鍵模型通過Delete+Insert 的策略,實現update功能

? ?ps:數據表(數據模型)的詳細內容見文章:?

第2.2章 StarRocks表設計——排序鍵和數據模型-CSDN博客文章瀏覽閱讀1.3k次,點贊28次,收藏24次。2.2 StarRocks表設計——排序鍵和數據模型https://blog.csdn.net/SHWAITME/article/details/136136900?spm=1001.2014.3001.5501

二、數據分布

? ? StarRocks 采用分區+分桶的兩級數據分布策略,將數據均勻分布各個 BE 節點。查詢時能夠有效裁剪數據掃描量,最大限度地利用集群的并發性能,從而提升查詢性能。

2.1 分區

? ? 邏輯概念,表中數據可以根據分區列(通常是時間和日期)分成一個個更小的數據管理單元。查詢時,通過分區裁剪,可以減少掃描的數據量,顯著優化查詢性能。

2.2 分桶

? ?物理概念,同一個分區中的數據通過分桶,劃分成更小的數據管理單元。并且分桶以多副本形式(默認為3)均勻分布在 BE 節點上,保證數據的高可用。

? 一個分區按分桶方式被分成了多個桶 bucket,每個桶的數據稱之為一個Tablet。StarRocks一般采用Hash算法作為分桶算法,即在同一分區內,分桶鍵哈希值相同的數據會劃分到同一個Tablet(數據分片),Tablet 以多副本冗余的形式存儲,是數據均衡和恢復的最?單位,數據導入和查詢最終都下沉到所涉及的 Tablet 副本上。ps:建表時,如果使用哈希分桶,則必須指定分桶鍵。

? ?ps:分區分桶及副本的詳細內容見文章(文章是StarRocks-2.5.4):?

第2.4章 StarRocks表設計——分區分桶與副本數_starrocks分區管理-CSDN博客文章瀏覽閱讀1.1k次,點贊31次,收藏22次。2.4 StarRocks表設計——分區分桶與副本數_starrocks分區管理https://blog.csdn.net/SHWAITME/article/details/136140126

?

三、數據類型

? ? ? 除了基本的數據類型,如數值、日期和字符串類型,StarRocks 還支持復雜的半結構化數據類型,包括 ARRAY、JSON、MAP、STRUCT。官網文章地址:
數據類型概述 | StarRocksStarRocks 支持以下數據類型:數值類型、字符串類型、日期類型、半結構化類型、其他類型。您在建表時可以指定以下類型的列,向表中導入該類型的數據并查詢數據。icon-default.png?t=N7T8https://docs.starrocks.io/zh/docs/sql-reference/sql-statements/data-types/data-type-list/

四、存儲設計

4.1?列式存儲

? ?在StarRocks中,一張表的列可以分為維度列(也稱為 Key 列)和指標列(也稱為 Value 列)維度列用于分組和排序,指標列的值可以通過聚合函數sum,count,min,max,bitmap_union等累加起來。

? ?在StarRocks中,表數據按列存儲。物理上,一列數據會經過分塊編碼(data page,默認是64kb)、壓縮等操作,然后持久化存儲到非易失設備上。但在邏輯上,一列數據可以看成是由相同類型的元素構成的一個數組。 一行數據的所有列值在各自的數組中按照列順序排列,即擁有相同的數組下標。表中所有的行按照維度列,做多重排序,排序后的位置就是該行的行號。

4.2?索引

? ?索引是一種特殊的數據結構,相當于數據的目錄。查詢條件命中索引列時,StarRocks 能夠快速定位到滿足條件的數據的位置。

? ? StarRocks 提供內置索引,包括前綴索引、Ordinal 索引和 ZoneMap 索引。也支持用戶手動創建索引,以提高查詢效率,包括 Bitmap 和 Bloom Filter 索引。

?4.2.1?前綴索引

? ? 由于StarRocks 底層數據是按照排序鍵排序后存儲的,而前綴索引,是在key (duplicate key、aggregate key、unique key、primary key)排序的基礎上,實現的一種根據給定一定數量(不超過3列,不超過36個字節,遇到字符串會自動截斷)前綴列,每間隔一定行數(1024),生成的一個索引項 (稀疏索引)。當查詢的過濾條件命中前綴索引時,就能快速定位到數據存儲所在的比較精確地址。

?4.2.2?Ordinal 索引

? ?Ordinal lndex索引提供了通過行號來查找Column Data Page數據頁的物理地址,Ordinal lndex索引能夠將按照列存儲的數據按行對齊,可以理解為一級索引。因此,其他類型的索引在查找數據的時候,都要借助Ordinal lndex(一級索引)查找 Data Page數據頁物理地址。

? ? 在一個segment文件中,數據始終按照key排序存儲,數據寫入的過程中,每一列的data page會由Ordinal Index管理,他會記錄每一列對應的data page的offset,size大小,和該data page的第一個數據的行號信息。這樣在查詢的時候,就能通過 Ordinal lndex索引夠快速定位到對應的data page的物理地址。

?4.2.3?ZoneMap 索引

? ?StarRocks 會為Segment文件中的一列數據(key 列)自動添加ZoneMap索引,注意:當表的模型為dupulcate時,會所有字段開啟zonemap索引。

? ?ZoneMap索引存儲了Segment和每個列對應每個Page的統計信息。Doris可以根據這些統計信息,快速判斷這些數據塊是否可以過濾掉,從而減少掃描數據量,提升查詢速度。統計信息包括了Min最大值、Max最小值、HashNull空值、HasNotNull不全為空的信息。

?4.2.4?BitMap 索引

? ? StarRocks 支持對低基數列創建Bitmap位圖索引來加速數據查詢。高基數列:例如UserID,低基數列:例如性別,婚姻狀態等。

? ? ?Bitmap位圖索引創建時需要通過 ?create index 進行創建。Bitmap的索引是整個Segment中的Column字段的索引,而不是為每個Page單獨生成一份。在寫入數據時,會維護一個map結構,去記錄下每個key值對應的行號,并采用Roaring位圖對rowid進行編碼。生成索引數據時,首先寫入字典數據,即將map結構的key值寫入到DictColumn中。然后,key對應Roaring編碼的rowid(value值)以字節方式將數據寫入到BitMapColumn。 ??

?4.2.5 BloomFilter 索引

? ?StarRocks 支持用戶對適用于高基數列(取值區分度比較大的字段)添加Bloom Filter(布隆過濾器)索引,Bloom filter索引主要用于快速判斷某列中是否存在某個值。BloomFilter判定該列中不存在指定的值,如果確定不存在,就不會讀取這個數據文件;如果索引判定該列中存在指定的值,也有可能這個值實際上不會存在,這時,會讀取數據文件來進一步確認。

? ps:高基數列:例如UserID,低基數列:例如性別,婚姻狀態等。

?ps:這幾類索引的詳細內容見文章:

Doris存儲層設計介紹1——存儲結構設計解析(索引底層結構)-CSDN博客文章瀏覽閱讀1.1k次,點贊33次,收藏19次。Doris存儲層設計介紹1——存儲結構設計解析(索引底層結構)https://blog.csdn.net/SHWAITME/article/details/136155008?spm=1001.2014.3001.5501

五、物化視圖

?該補充

參考文章:

表概覽 | StarRocks

理解 StarRocks 表設計 | StarRocks

理解 StarRocks 表設計 | StarRocks

第2.1章:StarRocks表設計--概述_starrocks array-CSDN博客

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

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

相關文章

golang命令行工具gtcli,實現了完美集成與結構化的gin腳手架,gin-restful-api開箱即用

關于gtools golang非常奈斯,gin作為web框架也非常奈斯,但我們在開發過程中,前期搭建會花費大量的時間,且還不盡人意。 為此我集成了gin-restful-api的模板gin-layout,還有腳手架一鍵生成項目。 集成相關 ginviperz…

【Android】性能優化之內存、網絡、布局、卡頓、安裝包、啟動速度優化

歡迎來到 Android 開發老生常談的性能優化篇,本文將性能優化劃分為內存、網絡、布局、卡頓、安裝包、啟動速度七塊,從這七塊優化出發,闡述優化的 Application 的方式。 目錄 內存優化避免內存泄漏使用內存分析工具優化數據結構和算法數據緩存…

Jmeter基礎(1) Mac下載安裝啟動

目錄 Jmeter下載安裝啟動下載啟動 Jmeter下載安裝啟動 注意??:使用jmeter需要有java環境 下載 官網下載地址:https://jmeter.apache.org/ 會看到這里有兩個版本,那么有什么區別么? Binaries是可執行版,直接下載解…

Python算法題集_圖論(課程表)

Python算法題集_課程表 題207:課程表1. 示例說明2. 題目解析- 題意分解- 優化思路- 測量工具 3. 代碼展開1) 標準求解【循環遞歸全算】2) 改進版一【循環遞歸緩存】3) 改進版二【循環遞歸緩存反向計算】4) 改進版三【迭代剝離計數器檢測】 4. 最優算法5. 相關資源 本…

Spring整合Junit4和Junit5

1、整合的好處 好處1&#xff1a;不需要自己創建IOC容器對象了好處2&#xff1a;任何需要的bean都可以在測試類中直接享受自動裝配 2、操作 整合junit4 ①加入依賴 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><…

代碼隨想錄算法訓練營第二十三天補|669. 修剪二叉搜索樹 ● 108.將有序數組轉換為二叉搜索樹 ● 538.把二叉搜索樹轉換為累加樹

平衡樹、二叉樹、靈活應用中序遍歷&#xff08;值大小有序&#xff09; 669. 修剪二叉搜索樹 給你二叉搜索樹的根節點 root &#xff0c;同時給定最小邊界low 和最大邊界 high。通過修剪二叉搜索樹&#xff0c;使得所有節點的值在[low, high]中。修剪樹 不應該 改變保留在樹中…

Window部署SkyWalking

SkyWalking mysql的驅動依賴 選擇下載版本 v9.4 現在后解壓縮目錄結構 一、修改config目錄文件 application.yml 修改1&#xff1a; selector: ${SW_STORAGE:h2} 修改后&#xff1a; selector: ${SW_STORAGE:mysql} 修改2&#xff1a;使用mysql數據庫 mysql: properti…

通俗易懂分析:Vite和Webpack的區別

1、對項目構建的理解 先從瀏覽器出發&#xff0c; 瀏覽器是由瀏覽器內核和JS引擎組成&#xff1b;瀏覽器內核編譯解析html代碼和css代碼&#xff0c;js引擎編譯解析JavaScript代碼&#xff1b;所以從本質上&#xff0c;瀏覽器只能識別運行JavaScript、CSS、HTML代碼。 而我們在…

敏捷開發最佳實踐:領導力維度實踐案例——走動式激勵

在本節實踐案例中&#xff0c;某財險公司信息技術部高級工程師分享了組織級數字化轉型中的優秀敏捷領導力實踐&#xff0c;不僅解決了產品上市周期長、響應市場變化慢的難題&#xff0c;還打破了部門墻、提升了客戶滿意度&#xff0c;該案例將為同類企業在組織層面進行有效敏捷…

Centos7配置靜態IP詳細步驟

使用Centos虛擬機測試時一到切換網段就頭疼&#xff0c;總是會有ping不通網關、同段IP和外網的情況。下面出一個盡可能完整的排查思路和配置靜態IP的過程。以下為配置nat模式后&#xff0c;出現以上情況的網絡不通的排查思路&#xff0c;并配置win10vm8靜態IP和centos7虛機nat模…

vue3路由切換過渡動畫實現

<router-view v-slot"{ Component }"><transition name"fade" mode"out-in" appear><keep-alive><component :is"Component" /></keep-alive></transition> </router-view>/* 路由切換動畫…

SQL字符集

目標:了解字符集的概念&#xff0c;掌握MySQL數據庫存儲數據的字符集邏輯以及設置方式 字符集概念 MySQL字符集關系 解決亂碼問題 字符集設置原理 1、字符集概念 目標:了解字符集概念&#xff0c;掌握字符集存儲和讀取的實現原理 概念 字符集:charset或者character set&am…

(十二)【Jmeter】線程(Threads(Users))之setUp 線程組

簡述 操作路徑如下: 作用:在正式測試開始前執行預加載或預熱操作,為測試做準備。配置:設置預加載或預熱操作的采樣器、循環次數等參數。使用場景:確保在正式測試開始前應用程序已經達到穩定狀態,減少測試結果的偏差。優點:提供預加載或預熱操作,確保測試的準確性。缺…

Centos開機網卡自啟動失敗

問題背景 每次都要手動啟動在這里插入代碼片 解決方案: 關閉 NetworkManager 服務 systemctl disable NetworkManager systemctl stop NetworkManager重啟就會發現網卡已經可以自動啟動了

2024幻獸帕魯游戲服務器租用價格表_一年和1個月報價明細

游戲服務器租用多少錢一年&#xff1f;1個月游戲服務器費用多少&#xff1f;阿里云4核16G10M游戲服務器26元1個月、149元半年&#xff0c;騰訊云4核16G游戲服務器32元、312元一年&#xff0c;華為云26元&#xff0c;京東云主機也是26元起&#xff0c;游戲服務器配置從4核16G、4…

代碼隨想錄算法刷題訓練營day22

代碼隨想錄算法刷題訓練營day22&#xff1a;LeetCode(236)二叉樹的最近公共祖先、LeetCode(235) 二叉搜索樹的最近公共祖先、LeetCode(701)二叉搜索樹中的插入操作、LeetCode(450)刪除二叉搜索樹中的節點 LeetCode(236)二叉樹的最近公共祖先 題目 代碼 /*** Definition for…

【鴻蒙 HarmonyOS 4.0】路由router

一、介紹 頁面路由指在應用程序中實現不同頁面之間的跳轉和數據傳遞。HarmonyOS提供了Router模塊&#xff0c;通過不同的url地址&#xff0c;可以方便地進行頁面路由&#xff0c;輕松地訪問不同的頁面。 二、頁面跳轉 2.1、兩種跳轉模式&#xff1a; router.pushUrl()&…

vue2與vue3中父子組件傳參的區別

本次主要針對vue中父子組件傳參所進行講解 一、vue2和vue3父傳子區別 1.vue2的父傳子 1).在父組件子標簽中自定義一個屬性 <sonPage :子組件接收到的類名"傳輸的數據">子組件</sonPage> 2).在子組件中peops屬性中拿到自定屬性 props: {子組件接收的…

Stable Diffusion算法、結構全流程概述

Stable Diffusion能力強、功能多、插件廣&#xff0c;本文擬概述SD的全流程&#xff0c;方便梳理算法各結構的關系 1、stable diffusion訓練用ddpm, 采樣用ddim DDPM的推理采樣步長和訓練時的步長一樣&#xff0c;導致采樣步數過多&#xff0c;推理時間長。DDIM指出&#xff…

安卓游戲開發之音頻技術優劣分析

一、引言 在安卓游戲開發中&#xff0c;音頻處理技術扮演著至關重要的角色&#xff0c;它不僅能夠增強游戲的沉浸感和玩家體驗&#xff0c;還能通過聲音效果傳達關鍵的游戲信息。以下將對幾種常見的安卓游戲音頻處理技術進行優劣分析&#xff0c;并結合應用場景來闡述其特點。 …