天天看點

doris 資料庫優化

文章目錄

  • ​​存儲​​
  • ​​索引​​
  • ​​MPP​​
  • ​​算子優化​​
  • ​​向量化執行引擎​​
  • ​​資料模型​​
  • ​​導入​​
  • ​​事務​​
  • ​​标準sql​​
  • ​​高并發​​
  • ​​資源隔離​​

存儲

列示存儲
  • 資料按列連續存儲,按需讀取
  • 多種編碼方式和自适應編碼
  • 在編碼基礎上基于Lz4算法進行壓縮
  • 1:8資料壓縮比
存儲編碼方式
doris 資料庫優化
檔案格式
doris 資料庫優化
多副本存儲,自動資料遷移、副本均衡
doris 資料庫優化

索引

自動寫入的智能索引
  • 字首稀疏索引:快速定位起始行
  • doris 資料庫優化
  • Min Max 索引:等值/範圍查詢快速過濾
使用者自主選擇的二級索引
  • Bloom Filter 索引:高基數上實作等值查詢
  • doris 資料庫優化
  • 反向索引:基于Bitmap位圖快速精确查詢

MPP

基于MPP的火山模型
doris 資料庫優化

利用多節點間并行資料處理

節點内并行執行,充分利用多CPU資源

算子優化

自适應的兩階段聚合算子,避免阻塞等待。

大量優化Join算子,以Runtime Filter為例

  • 為連接配接列生成過濾結構并下推,減少需要傳輸和對比的資料量。
  • 實作了In/Min Max/Bloom Filter等Filter類型,根據不同場景選擇。
  • 節點自動穿透,将Filter穿透下推到最底層掃描節點。

    *

  • doris 資料庫優化

向量化執行引擎

向量化:一次對一組值進行運算的過程

充分提升CPU執行效率

進一步利用CPU SIMD指令加速計算效率

doris 資料庫優化
規則優化RBO

常量折疊:

  • 基于常量計算,利于分區分桶裁剪以資料過濾。

子查詢改寫:

  • 将子查詢改寫成Join,利用Join優化來提升查詢效率。

謂詞下推:

  • 謂詞下推至存儲引擎,利用索引進行資料過濾。
代價優化CBO

Join Reorder

  • 自動調整Join順序,降低中間資料集大小。

Colocation Join

  • 利用資料分布情況在本地完成join,避免資料Shuffle。

Bucket Join

智能判斷關聯條件和資料分布關系,減少Shuffle資料量。

資料模型

建表
  • 定義 Key 次元列和 Value 名額列
  • 選擇資料模型:Agg /Uniq /Dup
  • 選擇資料分布方式: Partition 分區和 Bucket 分桶
  • 指定副本數量和存儲媒體
doris 資料庫優化
模型
  • Unique Key主鍵唯一模型,Key唯一、不聚合,實作精準去重和行級别資料更新;
  • Aggregate聚合模型:相同key列其Value列合并(SUM,MIN,MAX,REPLACE),通過提前聚合顯著提升查詢性能
  • Duplicate Key明細模型,不提前聚合、實作快速排序
  • 同時支援星型模型/雪花模型/寬表模型
doris 資料庫優化

導入

Broker Load

HDFS或所有支援S3協定的對象存儲。

Stream Load

通過 HTTP 協定導入本地檔案或資料流中的資料。

Routine Load

生成例行作業,直接訂閱Kafka消息隊列中的資料。

Binlog Load *

增量同步使用者在Mysql資料庫的對資料更新操作的CDC。

Flink Connector

在Flink中注冊資料源,實作對Doris資料的讀寫。

Spark Load

通過外部的 Spark 資源實作對導入資料的預處理。

Insert Into

庫内資料ETL轉換或ODBC外表資料導入。

事務

多版本機制解決讀寫沖突,寫入帶版本、查詢帶版本

兩階段導入保證多表原子生效

  • 支援并行導入
  • 有沖突時按導入順序生效,無沖突導入時并行生效
doris 資料庫優化

标準sql

  • 單表聚合、排序、過濾
  • 多表關聯、子查詢
  • 複雜SQL、視窗函數、GroupingSet等進階文法
  • UDF、UDAF
doris 資料庫優化
  • 修改密碼

    SET PASSWORD FOR ‘root’ = PASSWORD(‘123456’);

高并發

通過分區分桶裁剪,減少查詢對系統資源消耗

資源隔離