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