傳統(tǒng)的分析系統(tǒng)在面對(duì)海量數(shù)據(jù)和高并發(fā)查詢時(shí),往往難以滿足嚴(yán)苛的實(shí)時(shí)性要求。延遲,哪怕是秒級(jí)的,也可能導(dǎo)致商業(yè)機(jī)會(huì)的錯(cuò)失或用戶體驗(yàn)的下降。StarRocks 的設(shè)計(jì)初衷便是為了攻克這些難題,它通過(guò)一系列創(chuàng)新的技術(shù)架構(gòu)和優(yōu)化手段,為用戶提供了極致的查詢性能。
要理解 StarRocks 為何能快,就必須深入其內(nèi)核,探究其背后的技術(shù)支柱。向量化執(zhí)行引擎、CBO 優(yōu)化器和列式存儲(chǔ)——這三大核心技術(shù)如同三駕馬車,共同驅(qū)動(dòng)著 StarRocks 駛向?qū)崟r(shí)分析的快車道。
核心技術(shù)一:向量化執(zhí)行引擎——釋放 CPU 的極致潛能
在傳統(tǒng)的數(shù)據(jù)庫(kù)查詢執(zhí)行模型中,數(shù)據(jù)通常是逐行(Tuple-at-a-time)處理的。這意味著 CPU 在處理每一行數(shù)據(jù)時(shí),都需要進(jìn)行一次函數(shù)調(diào)用和相應(yīng)的上下文切換,當(dāng)數(shù)據(jù)量巨大時(shí),這種開(kāi)銷會(huì)顯著累積,成為性能瓶頸。
向量化執(zhí)行引擎的性能優(yōu)勢(shì)
向量化執(zhí)行引擎(Vectorized Query Engine)采用了截然不同的策略。它不再逐行處理數(shù)據(jù),而是將一批數(shù)據(jù)作為一個(gè)單元進(jìn)行處理。這意味著對(duì)一批數(shù)據(jù)應(yīng)用某個(gè)操作(如過(guò)濾、計(jì)算)時(shí),CPU 可以執(zhí)行一條指令處理多個(gè)數(shù)據(jù)項(xiàng)(SIMD - Single Instruction, Multiple Data),或者通過(guò)循環(huán)一次性處理整個(gè)數(shù)據(jù)批次。
StarRocks 從一開(kāi)始就將向量化執(zhí)行作為其核心設(shè)計(jì)理念之一。其查詢引擎的各個(gè)層面,從數(shù)據(jù)掃描、表達(dá)式計(jì)算、聚合、排序到 Join 操作,都深度融入了向量化思想。
數(shù)據(jù)掃描與過(guò)濾:在讀取數(shù)據(jù)時(shí),StarRocks 直接以列式批處理的方式獲取數(shù)據(jù),并在這些數(shù)據(jù)批次上執(zhí)行過(guò)濾條件,高效剔除不符合條件的數(shù)據(jù)。
表達(dá)式計(jì)算:復(fù)雜的 SQL 表達(dá)式被分解為一系列針對(duì)數(shù)據(jù)批次的操作,例如,a + b * c 這樣的計(jì)算會(huì)在整個(gè)數(shù)據(jù)批次上統(tǒng)一執(zhí)行。
聚合函數(shù)優(yōu)化:SUM, COUNT, AVG, MAX, MIN 等聚合函數(shù)在向量化引擎中能夠高效處理整批數(shù)據(jù),快速得到聚合結(jié)果。StarRocks 的技術(shù)內(nèi)幕文檔中也提到了其標(biāo)量函數(shù)與聚合函數(shù)的實(shí)現(xiàn)細(xì)節(jié)。
StarRocks 的向量化編程精髓在于其對(duì) CPU 底層特性的深刻理解和極致運(yùn)用。通過(guò)精心設(shè)計(jì)的內(nèi)存布局、算法選擇以及對(duì) SIMD 指令的充分利用,StarRocks 的向量化引擎為毫秒級(jí)查詢奠定了堅(jiān)實(shí)的基礎(chǔ)。
核心技術(shù)二:CBO 優(yōu)化器——智能規(guī)劃最佳查詢路徑
對(duì)于復(fù)雜的分析查詢,尤其是涉及多表關(guān)聯(lián)、子查詢和復(fù)雜謂詞的場(chǎng)景,可能存在成千上萬(wàn)種執(zhí)行計(jì)劃。選擇一個(gè)低效的計(jì)劃可能導(dǎo)致查詢耗時(shí)指數(shù)級(jí)增加。CBO 的職責(zé)就是從眾多可能的執(zhí)行計(jì)劃中,基于成本估算模型,智能地選擇一個(gè)最優(yōu)或接近最優(yōu)的執(zhí)行計(jì)劃。
StarRocks 的 CBO 優(yōu)化器關(guān)鍵特性包括:
1. 完善的統(tǒng)計(jì)信息收集與利用
StarRocks 3.2 版本開(kāi)始支持收集外部表(包括 Hive 與 Iceberg)的統(tǒng)計(jì)信息,3.3 版本進(jìn)一步支持了直方圖統(tǒng)計(jì)信息,并且增加了對(duì)復(fù)雜類型 Struct 子列的統(tǒng)計(jì)信息收集 。
2. 智能的查詢改寫(xiě)
CBO 能夠進(jìn)行復(fù)雜的查詢改寫(xiě),例如謂詞下推、子查詢展開(kāi)、公共表達(dá)式提取等,將原始 SQL 轉(zhuǎn)化為更易于高效執(zhí)行的形式。
對(duì)于查外部 Catalog,如果外部表引擎具備計(jì)算能力,StarRocks 的 CBO 會(huì)嘗試將聚合計(jì)算(如 GROUP BY, LIMIT)盡可能推到外表引擎執(zhí)行,從而減少網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量 。
3. 物化視圖的智能選擇與改寫(xiě)
CBO 能夠識(shí)別查詢是否可以利用已有的物化視圖,并自動(dòng)改寫(xiě)查詢以從物化視圖中獲取數(shù)據(jù),從而避免對(duì)原始基表的昂貴計(jì)算。
StarRocks 的 CBO 能夠在數(shù)萬(wàn)級(jí)別的執(zhí)行計(jì)劃搜索空間中,選擇成本最低的最優(yōu)執(zhí)行計(jì)劃 ,確保即便是復(fù)雜的分析請(qǐng)求也能獲得高效的響應(yīng)。
核心技術(shù)三:列式存儲(chǔ)——為分析而生的存儲(chǔ)結(jié)構(gòu)
傳統(tǒng)的行式存儲(chǔ)(Row-based Storage)將一行中的所有列連續(xù)存儲(chǔ)在一起,這對(duì)于事務(wù)處理(OLTP)場(chǎng)景非常友好,因?yàn)槭聞?wù)通常需要訪問(wèn)或修改一整行數(shù)據(jù)。然而,分析查詢(OLAP)往往只關(guān)心表中的少數(shù)幾列,但行式存儲(chǔ)卻需要將整行數(shù)據(jù)(包括不相關(guān)的列)都讀入內(nèi)存,造成大量的 I/O 浪費(fèi)和 CPU 處理開(kāi)銷。
StarRocks 從底層設(shè)計(jì)就采用了列式存儲(chǔ)。其存儲(chǔ)引擎不僅實(shí)現(xiàn)了高效的列式數(shù)據(jù)讀寫(xiě),還結(jié)合了多種優(yōu)化技術(shù)來(lái)進(jìn)一步放大列式存儲(chǔ)的優(yōu)勢(shì):
1. 智能索引:
稀疏索引(Sparse Index):StarRocks 為每個(gè)列塊(Column Block)自動(dòng)創(chuàng)建稀疏索引,能夠快速定位到包含目標(biāo)數(shù)據(jù)的列塊,避免全列掃描。
Bitmap 索引:對(duì)于低基數(shù)列(如性別、地區(qū)),Bitmap 索引能夠高效地執(zhí)行 AND、OR、NOT 等邏輯運(yùn)算,加速?gòu)?fù)雜條件的過(guò)濾。
2. 靈活的數(shù)據(jù)模型:StarRocks 支持明細(xì)模型、聚合模型和主鍵模型。
3. 分區(qū)與分桶:
分區(qū)(Partitioning):邏輯上將表劃分為多個(gè)分區(qū),通常按時(shí)間維度分區(qū),查詢時(shí)可以只掃描相關(guān)的分區(qū),大幅減少數(shù)據(jù)掃描量。
分桶(Bucketing):將數(shù)據(jù)通過(guò)哈希方式分散到不同的 Tablet 中,Tablet 是數(shù)據(jù)均衡和副本管理的基本單位。合理的分桶策略有助于查詢并發(fā)和負(fù)載均衡。
列式存儲(chǔ)是 StarRocks 實(shí)現(xiàn)高性能分析的基礎(chǔ)。它與向量化執(zhí)行引擎、CBO 優(yōu)化器緊密配合,共同構(gòu)成了 StarRocks 強(qiáng)大的分析能力。
企業(yè)級(jí)實(shí)踐
企業(yè)在實(shí)際生產(chǎn)環(huán)境中,除了極致性能,還需要更完善的企業(yè)級(jí)特性、金融級(jí)的安全保障、便捷的運(yùn)維管理以及對(duì)國(guó)產(chǎn)化生態(tài)的兼容。鏡舟科技作為全球領(lǐng)先開(kāi)源項(xiàng)目 StarRocks 的主要貢獻(xiàn)者,基于技術(shù)積累和對(duì)行業(yè)的深刻洞察,推出了企業(yè)級(jí)產(chǎn)品——鏡舟數(shù)據(jù)庫(kù) 。鏡舟數(shù)據(jù)庫(kù)在繼承 StarRocks 核心優(yōu)勢(shì)的基礎(chǔ)上,進(jìn)行了企業(yè)級(jí)優(yōu)化和功能增強(qiáng)。
更完善的企業(yè)級(jí)功能特性
鏡舟數(shù)據(jù)庫(kù)針對(duì)企業(yè)復(fù)雜應(yīng)用場(chǎng)景,提供了更為豐富和成熟的功能:
Multi-warehouse(多虛擬數(shù)倉(cāng)):業(yè)內(nèi)領(lǐng)先的簡(jiǎn)化架構(gòu)設(shè)計(jì),允許企業(yè)根據(jù)不同部門、地域或業(yè)務(wù)集群的需求,建立多個(gè)邏輯上隔離的虛擬子數(shù)倉(cāng)。這既避免了物理集群林立導(dǎo)致的架構(gòu)臃腫,又能為每個(gè)需求分支提供隔離的計(jì)算資源,大幅提升使用性能和管理靈活性。StarRocks 的資源隔離原理解析也體現(xiàn)了其對(duì)多租戶和資源劃分的思考。
RBAC(Role-Based Access Control,基于角色的訪問(wèn)控制):提供精細(xì)化的權(quán)限管理體系,確保數(shù)據(jù)訪問(wèn)的安全合規(guī)。
可視化 SQL 編輯器:內(nèi)置易用的 SQL 開(kāi)發(fā)工具,提升數(shù)據(jù)分析和開(kāi)發(fā)效率。
物化視圖自動(dòng)推薦:基于查詢負(fù)載和數(shù)據(jù)特征,智能推薦創(chuàng)建物化視圖,進(jìn)一步加速查詢。
總結(jié)
基于向量化執(zhí)行引擎、CBO 優(yōu)化器和列式存儲(chǔ)這三大核心技術(shù)支撐的StarRocks,鏡舟科技助力多家金融、零售、制造企業(yè)構(gòu)建能夠?qū)崿F(xiàn)毫秒級(jí)實(shí)時(shí)分析的企業(yè)級(jí)數(shù)據(jù)平臺(tái)。這些技術(shù)不僅解決了傳統(tǒng)數(shù)據(jù)架構(gòu)的性能瓶頸,還大幅降低了企業(yè)的建設(shè)成本和維護(hù)復(fù)雜度。
隨著數(shù)據(jù)規(guī)模的持續(xù)增長(zhǎng)和實(shí)時(shí)性要求的不斷提升,鏡舟科技將繼續(xù)深化技術(shù)創(chuàng)新,在 AI 智能優(yōu)化、多云部署等方向持續(xù)發(fā)力,為企業(yè)數(shù)字化轉(zhuǎn)型提供更強(qiáng)大的數(shù)據(jù)分析能力支撐。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。 )