StarRocks:一款開源的高性能分析型數據倉庫
StarRocks 是一個 Linux 基金會開源項目,采用 Apache 2.0 許可證。它和另一款數據倉庫產品Apache Doris有著相同的起源,最初都是來自百度廣告報表業(yè)務的 Palo 項目。
StarRocks 可以滿足企業(yè)級用戶的多種分析需求,包括 OLAP 多維分析、定制報表、實時數據分析和 Ad-hoc 數據分析等,目前已經在大量各種行業(yè)的企業(yè)中獲得了應用。
架構設計
StarRocks 架構簡潔明了,整個系統(tǒng)僅由兩種組件組成:前端和后端。前端節(jié)點稱為 FE。后端節(jié)點有兩種類型,BE 和 CN (計算節(jié)點)。當使用本地存儲數據時,需要部署 BE;當數據存儲在對象存儲或 HDFS 時,需要部署 CN。StarRocks 不依賴任何外部組件,簡化了部署和維護。節(jié)點可以水平擴展而不影響服務正常運行。此外,StarRocks 具有元數據和服務數據副本機制,提高了數據可靠性,有效防止單點故障 (SPOF)。
StarRocks 兼容 MySQL 協(xié)議,支持標準 SQL。用戶可以輕松地通過 MySQL 客戶端連接到 StarRocks 實時查詢分析數據。
存算一體
本地存儲為實時查詢提供了更低的查詢延遲。
作為典型的大規(guī)模并行處理 (MPP) 數據庫,StarRocks 支持存算一體架構。在存算一體架構中,BE 負責數據存儲和計算。將數據存儲在 BE 中使得數據可以在當前節(jié)點中計算,避免了數據傳輸和復制,從而提供極快的查詢和分析性能。該架構支持多副本數據存儲,增強了集群處理高并發(fā)查詢的能力并確保數據可靠性,非常適合追求最佳查詢性能的場景。
在存算一體架構中,StarRocks 由兩種類型的節(jié)點組成:FE 和 BE。
- FE 負責元數據管理、客戶端連接管理、查詢規(guī)劃和查詢調度。每個 FE 使用 BDB JE (Berkeley DB Java Edition)在其內存中存儲和維護元數據的完整副本,從而確保所有 FE 之間的服務一致。FE 可以作為領導者、追隨者和觀察者。如果 leader 節(jié)點崩潰,follower 根據 Raft 協(xié)議選舉 leader。
- BE 負責數據存儲和 SQL 執(zhí)行。數據存儲:BE 具有等效的數據存儲能力。FE 根據預定義規(guī)則將數據分發(fā)到各個 BE。BE 轉換導入的數據,將數據寫入所需格式,并為數據生成索引。SQL 執(zhí)行:FE 根據查詢的語義將每個 SQL 查詢解析為邏輯執(zhí)行計劃,然后將邏輯計劃轉換為可以在 BE 上執(zhí)行的物理執(zhí)行計劃。BE 在本地存儲數據以及執(zhí)行查詢,避免了數據傳輸和復制,極大地提高了查詢性能。
存算分離
在存算分離架構中,BE 被“計算節(jié)點 (CN)”取代,后者僅負責數據計算任務和緩存熱數據。數據存儲在低成本且可靠的遠端存儲系統(tǒng)中,如 Amazon S3、GCP、Azure Blob Storage、MinIO 等。當緩存命中時,查詢性能可與存算一體架構相媲美。CN 節(jié)點可以根據需要在幾秒鐘內添加或刪除。這種架構降低了存儲成本,確保更好的資源隔離,并具有高度的彈性和可擴展性。
存算分離架構與存算一體架構一樣簡單。它僅由兩種類型的節(jié)點組成:FE 和 CN。唯一的區(qū)別是用戶必須配置后端對象存儲。對象存儲和 HDFS 提供低成本、高可靠性和可擴展性等優(yōu)勢。除了可以擴展存儲外,還可以隨時添加和刪除 CN 節(jié)點。因為存儲和計算分離,增刪節(jié)點也無需重新平衡數據。
功能特性
MPP
StarRocks 采用 MPP (Massively Parallel Processing) 分布式執(zhí)行框架。在 MPP 執(zhí)行框架中,一條查詢請求會被拆分成多個物理計算單元,在多機并行執(zhí)行。每個執(zhí)行節(jié)點擁有獨享的資源(CPU、內存)。MPP 執(zhí)行框架能夠使得單個查詢請求可以充分利用所有執(zhí)行節(jié)點的資源,所以單個查詢的性能可以隨著集群的水平擴展而不斷提升。
向量化
StarRocks 通過實現(xiàn)全面向量化引擎,充分發(fā)揮了 CPU 的處理能力。全面向量化引擎按照列式的方式組織和處理數據。StarRocks 的數據存儲、內存中數據的組織方式,以及 SQL 算子的計算方式,都是列式實現(xiàn)的。按列的數據組織也會更加充分的利用 CPU 的 Cache,按列計算會有更少的虛函數調用以及更少的分支判斷從而獲得更加充分的 CPU 指令流水。
另一方面,StarRocks 的全面向量化引擎通過向量化算法充分的利用 CPU 提供的 SIMD(Single Instruction Multiple Data)指令。這樣 StarRocks 可以用更少的指令數目,完成更多的數據操作。經過標準測試集的驗證,StarRocks的全面向量化引擎可以將執(zhí)行算子的性能,整體提升 3~10 倍。
CBO
StarRocks 從零設計并實現(xiàn)了一款全新的,基于代價的優(yōu)化器 CBO(Cost Based Optimizer)。該優(yōu)化器是 Cascades Like 的,在設計時,針對 StarRocks 的全面向量化執(zhí)行引擎進行了深度定制,并進行了多項優(yōu)化和創(chuàng)新。該優(yōu)化器內部實現(xiàn)了公共表達式復用,相關子查詢重寫,Lateral Join,Join Reorder,Join 分布式執(zhí)行策略選擇,低基數字典優(yōu)化等重要功能和優(yōu)化。目前,該優(yōu)化器已可以完整支持 TPC-DS 99 條 SQL 語句。
列式存儲
StarRocks 實現(xiàn)了可實時更新的列式存儲引擎,數據以按列的方式進行存儲。通過這樣的方式,相同類型的數據連續(xù)存放。一方面,數據可以使用更加高效的編碼方式,獲得更高的壓縮比,降低存儲成本。另一方面,也降低了系統(tǒng)讀取數據的 I/O 總量,提升了查詢性能。此外,在大部分 OLAP 場景中,查詢只會涉及部分列。相對于行存,列存只需要讀取部分列的數據,能夠極大地降低磁盤 I/O 吞吐。
StarRocks 存儲引擎不僅能夠提供高效的 Partial Update 操作,也能高效處理 Upsert 類操作。使用 Delete-and-insert 的實現(xiàn)方式,通過主鍵索引快速過濾數據,避免讀取時的 Sort 和 Merge 操作,同時還可以充分利用其他二級索引,在大量更新的場景下,仍然可以保證查詢的極速性能。
智能物化視圖
StarRocks 支持用戶使用物化視圖(materialized view)進行查詢加速和數倉分層。不同于一些同類產品的物化視圖需要手動和原表做數據同步,StarRocks 的物化視圖可以自動根據原始表更新數據。只要原始表數據發(fā)生變更,物化視圖的更新也同步完成,不需要額外的維護操作就可以保證物化視圖能夠維持與原表一致。不僅如此,物化視圖的選擇也是自動進行的。StarRocks 在進行查詢規(guī)劃時,如果有合適的物化視圖能夠加速查詢,StarRocks 自動進行查詢改寫(query rewrite),將查詢自動定位到最適合的物化視圖上進行查詢加速。
數據湖分析
StarRocks 不僅能高效的分析本地存儲的數據,也可以作為計算引擎直接分析數據湖中的數據。用戶可以通過 StarRocks 提供的 External Catalog,輕松查詢存儲在 Apache Hive、Apache Iceberg、Apache Hudi、Delta Lake 等數據湖上的數據,無需進行數據遷移。支持的存儲系統(tǒng)包括 HDFS、S3、OSS,支持的文件格式包括 Parquet、ORC、CSV。
官方網址:https://www.starrocks.io/