極速查詢的單表查詢
StarRocks 在極速查詢方面上做了很多,下面著重介紹四點:
1)向量化執行:StarRocks 實現了從存儲層到查詢層的全面向量化執行,這是 StarRocks 速度優勢的基礎。向量化執行充分發揮了 CPU 的處理能力。
全面向量化引擎按照列式的方式組織和處理數據。StarRocks 的數據存儲、內存中數據的組織方式,以及 SQL 算子的計算方式,都是列式實現的。按列的數據組織也會更加充分利用 CPU 的 Cache,按列計算會有更少的虛函數調用以及更少的分支判斷,從而獲得更加充分的 CPU 指令流水。
另一方面,StarRocks 的全面向量化引擎通過向量化算法充分利用了 CPU 提供的 SIMD 指令。這樣 StarRocks 可以用更少的指令數目,完成更多的數據操作。經過標準測試集的驗證,StarRocks 的全面向量化引擎可以將執行算子的性能,整體提升 3-10 倍。
2)物化視圖加速查詢:在實際分析場景中,我們經常遇到分析百億級大表的情況。盡管 StarRocks 性能優異,但數據量過大對查詢速度還是有影響,此時在用戶經常聚合的維度加上物化視圖,在不改變查詢語句的情況下查詢速度能提升 10 倍以上。StarRocks 智能化的物化視圖可以讓請求自動匹配視圖,無需手動查詢視圖。
3)CBO:CBO 優化器(Cost-based Optimizer ) 采用 Cascades 框架,使用多種統計信息來完善成本估算,同時補充邏輯轉換(Transformation Rule)和物理實現(Implementation Rule)規則,能夠在數萬級別執行計劃的搜索空間中,選擇成本最低的最優執行計劃。
4)自適應低基數優化:StarRocks 可以自適應地根據數據分布,對低基數的字符串類型的列構建一張全局字典,用 Int 類型做存儲和查詢,使得內存開銷更小,有利于 SIMD 指令執行,加快了查詢速度。ClickHouse 也有低基數優化,只是在建表時候需要聲明,使用起來會麻煩一些。
極速的多表關聯
在實時數據分析場景中只滿足單表極速查詢是不夠的。為了加速查詢速度,業內習慣于把多張表打成一張大寬表,大寬表雖速度快,但是帶來的問題是極其不靈活,實時數據加工層是用 Flink 將多表 Join 成一張表寫入大寬表。
當業務方想修改或增加分析維度時,往往數據開發周期過長,數據加工完成后發現已經錯過了分析最佳時機。因此就需要更靈活的數據模型,把大寬表模式退歸回星型模型或者雪花模型是比較理想的方法。
在此場景下,查詢引擎對多表數據關聯查詢的性能成了關鍵,以往 ClickHouse 以大寬表為主,多表聯查情況下無法保證查詢相應時間,甚至有很大幾率出現 OOM。StarRocks 很好解決了這個問題,大表 Join 性能提升 3-5 倍以上,成為星型模型分析利器。CBO 是多表關聯極致性能關鍵,同時 StarRocks 支持 Broadcost Join、Shuffle Join、Bucket shuffle Join、Colocated Join、Replicated Join 等多種 Join 方式,CBO 可以智能地選擇 Join 順序和 Join 方式。
參考
京東物流 × StarRocks : 打造服務分析一體化平臺Udata