【StarRocks系列】架構、核心概念

目錄

一、架構:分布式 MPP + 列式存儲 + 向量化引擎

二、存儲:高性能列式存儲引擎

三、表設計:三類模型適配不同場景

四、數據寫入:多種方式支持實時與批量

五、數據讀取:極致優化的查詢引擎

總結:StarRocks的核心優勢


以下是StarRocks核心概念的詳細解析,涵蓋架構、存儲、表設計、數據寫入與讀取:


一、架構:分布式 MPP + 列式存儲 + 向量化引擎

  1. FE (Frontend) 節點
    • 職責:元數據管理、SQL解析、查詢優化、查詢調度、集群管理、身份認證。
    • 高可用:基于類Raft協議(BDBJE)實現Leader/Follower/Observer多角色,確保元數據強一致性與故障自動切換。
    • 優化器:采用CBO(Cost-Based Optimizer),基于精準統計信息(表/列/分區分桶)生成最優執行計劃,支持復雜謂詞下推、Join重排序、物化視圖改寫。
  1. BE (Backend) 節點
    • 職責:數據存儲、SQL執行、數據壓縮、副本管理。
    • 分布式執行:采用MPP(Massively Parallel Processing)架構,將查詢拆解為多個物理算子(Scan/Aggregation/Join等),在BE節點間并行執行。
    • 向量化引擎:數據按列批量處理(每批1024行),利用CPU SIMD指令(如AVX2)提升計算效率,減少虛函數調用。


二、存儲:高性能列式存儲引擎

  1. 列式存儲
    • 數據按列組織,獨立壓縮與編碼,減少I/O量(僅讀取查詢涉及的列)。
    • 高效壓縮:支持Zstandard/LZ4/Snappy等算法,結合字典編碼、位圖編碼、Run-Length Encoding(RLE),壓縮比達5~10倍。
  1. 智能索引
    • 前綴索引:每1024行構成一個數據塊(Segment),按表的前36字節自動生成前綴索引,加速等值/范圍查詢。
    • Bloom Filter索引:對高基數列(如UserID)構建,快速過濾不匹配的數據塊。
    • ZoneMap索引:存儲每個數據塊的列值Min/Max,用于分區剪枝和范圍過濾。
  1. 數據分區分桶
    • 分區 (Partitioning):按時間/枚舉值劃分(如PARTITION BY dt),實現分區剪枝,減少掃描量。
    • 分桶 (Bucketing):對分區內數據哈希分桶(如DISTRIBUTED BY HASH(user_id) BUCKETS 10),確保數據均勻分布,優化Join/聚合性能。
  1. 多副本機制
    • 基于Multi-Raft協議實現副本強一致,支持3副本(默認),自動修復副本故障。

三、表設計:三類模型適配不同場景

  1. 明細模型 (Duplicate Key Model)
    • 適用場景:日志、行為流水等原始數據存儲。
    • 特點:無主鍵,按導入批次存儲全量明細數據,支持任意列排序鍵(如DUPLICATE KEY(event_time, user_id))。
  1. 聚合模型 (Aggregate Key Model)
    • 適用場景:預聚合報表(如PV/UV/GMV)。
    • 特點:定義主鍵(維度列)與聚合函數(指標列),如:
CREATE TABLE agg_table (dt DATE,user_id BIGINT,pv BIGINT SUM,  -- 自動求和uv BIGINT REPLACE  -- 僅保留最新值
) AGGREGATE KEY(dt, user_id);
  1. 更新模型/主鍵模型 (Unique Key Model / Primary Key Model)
    • 適用場景:需要按主鍵更新的場景(如用戶畫像)。
    • 特點
      • 更新模型:定義主鍵,相同主鍵新數據覆蓋舊數據(Merge-on-Read)。
      • 主鍵模型:基于主鍵索引(內存/磁盤)實現Delete+Insert,支持實時更新(2.3+版本)。

四、數據寫入:多種方式支持實時與批量

  1. Stream Load
    • HTTP協議推送CSV/JSON數據,適用于實時小批量寫入(毫秒級延遲)。
    • 示例:curl -X POST -u root: -T data.csv http://fe_host:8030/api/db/table/_stream_load
  1. Routine Load
    • 持續消費Kafka消息,自動提交偏移量,保障Exactly-Once語義。
    • 示例:
CREATE ROUTINE LOAD job_name ON table_name
PROPERTIES ("format"="json") 
FROM KAFKA ( "kafka_broker_list"="broker1:9092", "kafka_topic"="topic_name");
  1. Broker Load
    • 通過Broker進程(HDFS/S3)批量導入Parquet/ORC文件,適合TB級數據遷移。
    • 示例:
LOAD LABEL label_name (DATA INFILE("hdfs://path/*.parquet")INTO TABLE target_table
) WITH BROKER "broker_name";
  1. Spark/Flink Connector
    • 通過標準接口與大數據生態集成,支持Structed Streaming/Flink SQL寫入。

五、數據讀取:極致優化的查詢引擎

  1. MPP并行計算
    • 查詢被拆解為物理計劃,在多個BE節點并行執行,節點間通過Shuffle Exchange數據。
  1. 智能優化技術
    • 局部聚合:在數據分桶內預聚合,減少Shuffle數據量。
    • Runtime Filter:動態生成Bloom Filter/MinMax Filter,下推至Scan節點過濾數據。
    • Join優化:支持Broadcast Join(小表)、Shuffle Join(大表)、Colocate Join(同分桶表免Shuffle)。
  1. 物化視圖 (Materialized View)
    • 預計算聚合結果,查詢自動路由至物化視圖,加速響應。
    • 示例:創建小時級聚合視圖,原始表按分鐘存儲。
CREATE MATERIALIZED VIEW mv_hourly 
AS SELECT dt, hour, user_id, SUM(pv)
FROM base_table GROUP BY dt, hour, user_id;

總結:StarRocks的核心優勢

  • 實時分析:秒級數據可見性,亞秒級查詢響應。
  • 高并發:向量化引擎+多級緩存(PageCache/DataCache)支持數千QPS。
  • 易用性:兼容MySQL協議,支持標準SQL/BI工具。
  • 成本效益:高壓縮比+高效存儲格式,降低存儲與計算成本。

通過以上設計,StarRocks在實時數倉、交互式分析、高并發報表等場景表現卓越,適合替代傳統Hadoop+MPP混合架構。

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

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

相關文章

從源碼到生產:Apache 2.4.57 自動化安裝實戰指南(附腳本)

引言:為何選擇源碼安裝 Apache? 在服務器運維場景中,源碼編譯安裝 Apache HTTP Server 是實現精細化配置的重要方式。相比包管理器安裝,源碼安裝可自定義模塊組合、適配特定依賴環境,并精確控制版本。本文將通過自動化…

iOS開發中的安全實踐:如何通過Ipa混淆與加固確保應用安全

隨著移動應用技術的不斷發展,開發者越來越重視應用的安全性,尤其是iOS應用。無論是面對大規模的數據泄露問題,還是在應用上線后避免被逆向破解,開發者們都需要采取一系列技術手段來保護應用。然而,很多開發者在應用開發…

JAVA實戰開源項目:智慧生活商城系統 (Vue+SpringBoot) 附源碼

本文項目編號 T 245 ,文末自助獲取源碼 \color{red}{T245,文末自助獲取源碼} T245,文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

GNU Octave 基礎教程(8):GNU Octave 常用數學函數

目錄 一、基本算術運 二、初等數學函數 三、三角函數與反三角函數 四、統計函數 五、復數與其他函數 ? 小結 🔜 下一講預告 GNU Octave 內置了大量數學函數,涵蓋初等數學、線性代數、復數運算、統計函數等,非常適合科研、工程計算使用…

Go語言中的文件與IO:JSON、CSV、XML處理

在數據交換與存儲中&#xff0c;JSON、CSV、XML 是常見格式。Go 標準庫為這些格式提供了強大且易用的支持&#xff0c;涵蓋結構體映射、讀寫文件、編碼解碼等操作。 一、JSON處理&#xff08;encoding/json&#xff09; 1. 基本使用&#xff1a;結構體 <-> JSON type U…

三種語言寫 MCP

參考 https://zhuanlan.zhihu.com/p/1915029704936760261 https://www.5ee.net/archives/tmXJAgWz https://github.com/modelcontextprotocol/python-sdk https://github.com/modelcontextprotocol/typescript-sdk https://modelcontextprotocol.io/quickstart/server https:/…

Python訓練營-Day38-Dataset和Dataloader類

在遇到大規模數據集時&#xff0c;顯存常常無法一次性存儲所有數據&#xff0c;所以需要使用分批訓練的方法。為此&#xff0c;PyTorch提供了DataLoader類&#xff0c;該類可以自動將數據集切分為多個批次batch&#xff0c;并支持多線程加載數據。此外&#xff0c;還存在Datase…

SVN上傳代碼

SVN&#xff08;Subversion&#xff09;是一個常用的版本控制系統&#xff0c;提供了對代碼管理和協作的支持。以下是SVN常見操作&#xff08;如獲取代碼、上傳代碼、合并沖突處理等&#xff09;的命令行流程及實例&#xff1a; 1. 獲取代碼&#xff08;Checkout&#xff09; 在…

【appium】2.初始連接腳本配置

連接配置 from appium import webdriver desired_caps {platformName: Android,automationName: UIAutomator2,deviceName: ZTEB880,appPackage: com.taobao.taobao,appActivity: com.taobao.tao.welcome.Welcome,noReset: True }driver webdriver.Remote(http://localhost:…

FliTik翻頁時鐘v1.1.25.36,支持安卓TV/手機/車機+windows電腦端

FliTik翻頁時鐘v1.1.25.36&#xff0c;支持安卓TV/手機/車機windows電腦端 FliTik翻頁時鐘是一款集高顏值與強大功能于一身的全平臺數字時鐘工具類應用&#xff0c;支持TV、iOS、安卓、PC以及鴻蒙系統。它不僅擁有精美的翻頁動畫…

以AI賦能創意未來:即夢3.0與Seedance1.0Lite重磅登陸POE!

近年來&#xff0c;隨著人工智能技術的不斷突破&#xff0c;AI模型的應用場景也在逐漸拓寬。在這一過程中&#xff0c;如何整合和利用現有的AI技術&#xff0c;實現更為便捷的創作服務&#xff0c;成為了許多科技企業關注的焦點。近日&#xff0c;全球知名的AI模型整合平臺POE正…

云計算與5G:如何利用5G網絡優化云平臺的性能

想象一下&#xff0c;你正在用手機看視頻、進行在線游戲&#xff0c;甚至是使用云存儲來保存你的重要文件。所有這些背后&#xff0c;其實都離不開一個無形的力量——云計算。而今天&#xff0c;5G網絡的出現&#xff0c;就像為這些云服務加裝了一對翅膀&#xff0c;讓它們飛得…

GPT-1 與 BERT 架構

GPT-1 架構特點 僅解碼器架構&#xff1a;擯棄了傳統transformer中的編碼器層&#xff0c;而是直接用解碼器和自注意力&#xff0c;同時拋棄掉了交叉多頭注意力層&#xff0c;自注意力通過mask來完成計算。注意力塊添加到12個&#xff0c;Attention的輸出維數為762維&#xff0…

Day04_C語言基礎數據結構重點復習筆記20250618

1.什么是計算機的大小端存儲&#xff1f; 答&#xff1a;大端是數據的高位字節存儲在低地址&#xff0c;低位字節存儲在高地址&#xff0c;網絡協議&#xff08;如TCP/IP&#xff09;通常采用大端序&#xff08;稱為“網絡字節序”&#xff09;。例如&#xff1a;32位整數 0x12…

基于OpenSSL實現AES-CBC 128算法的 SeedKey DLL的生成與使用

&#x1f345; 我是螞蟻小兵&#xff0c;專注于車載診斷領域&#xff0c;尤其擅長于對CANoe工具的使用&#x1f345; 尋找組織 &#xff0c;答疑解惑&#xff0c;摸魚聊天&#xff0c;博客源碼&#xff0c;點擊加入&#x1f449;【相親相愛一家人】&#x1f345; 玩轉CANoe&…

進程間通信、線程間通信

進程間通信、線程間通信 進程間通行&#xff08;Inter-Process Communication&#xff0c; IPC&#xff09;和線程間通信&#xff08;Thread Communication&#xff09;的方式不完全相同&#xff0c;因為進程和線程的運行環境和特性不同 進程和線程的本質區別 進程 進程是操…

【FPGA學習】FPGA入門學習即數字邏輯復習

前言&#xff1a;最近開始學習FPGA了&#xff0c;希望通過博客記錄下每一次學習的過程&#xff0c;與大家共勉。 目錄 一、組合邏輯電路的設計&#xff08;工程學習引入&#xff09; 二、3-8譯碼器設計、下載和功能演示&#xff08;在的8段數碼管顯示&#xff09; 2.1 Logs…

ffmpeg python rgba圖片合成 4444格式mov視頻,保留透明通道

def convert_pngs_to_mov(input_pattern, output_path, frame_rate30):"""將BGRA四通道PNG序列轉換為ProRes 4444編碼的MOV視頻&#xff08;保留透明通道&#xff09;參數:input_pattern: PNG序列路徑模式&#xff08;如&#xff1a;"/path/to/frames/fram…

Java 實現 PDF 轉圖片功能:實戰教程 + 場景解析

作者:云起川南|專注 Java 實戰與自動化集成 在 PDF 文檔處理的各類業務場景中,“將 PDF 頁面轉為圖片”是一個高頻、剛需的功能,廣泛應用于 預覽展示、文件歸檔、圖片加密水印、OCR 文本識別 等系統中。 本文將帶你一步一步實戰如何使用 Java 實現 PDF 轉圖片 功能,使用開…

面試題-有個對象key全部是string,值全部是number要定義他,不使用interface和type如何定義

在 TypeScript 里&#xff0c;若要定義一個鍵為string類型、值為number類型的對象&#xff0c;并且不使用interface和type&#xff0c;可以采用以下幾種方式&#xff1a; 1. 內聯類型注解&#xff08;Inline Type Annotation&#xff09; 直接在變量聲明時使用索引簽名進行類…