文章目錄
- 存儲
- 索引
- MPP
- 算子優化
- 向量化執行引擎
- 資料模型
- 導入
- 事務
- 标準sql
- 高并發
- 資源隔離
存儲
列示存儲
- 資料按列連續存儲,按需讀取
- 多種編碼方式和自适應編碼
- 在編碼基礎上基于Lz4算法進行壓縮
- 1:8資料壓縮比
存儲編碼方式
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CMygjN4gzMlZGNmhzMhFDZyYzXzQzNyEDM2EzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
檔案格式
多副本存儲,自動資料遷移、副本均衡
索引
自動寫入的智能索引
- 字首稀疏索引:快速定位起始行
- Min Max 索引:等值/範圍查詢快速過濾
使用者自主選擇的二級索引
- Bloom Filter 索引:高基數上實作等值查詢
- 反向索引:基于Bitmap位圖快速精确查詢
MPP
基于MPP的火山模型
利用多節點間并行資料處理
節點内并行執行,充分利用多CPU資源
算子優化
自适應的兩階段聚合算子,避免阻塞等待。
大量優化Join算子,以Runtime Filter為例
- 為連接配接列生成過濾結構并下推,減少需要傳輸和對比的資料量。
- 實作了In/Min Max/Bloom Filter等Filter類型,根據不同場景選擇。
-
節點自動穿透,将Filter穿透下推到最底層掃描節點。
*
向量化執行引擎
向量化:一次對一組值進行運算的過程
充分提升CPU執行效率
進一步利用CPU SIMD指令加速計算效率
規則優化RBO
常量折疊:
- 基于常量計算,利于分區分桶裁剪以資料過濾。
子查詢改寫:
- 将子查詢改寫成Join,利用Join優化來提升查詢效率。
謂詞下推:
- 謂詞下推至存儲引擎,利用索引進行資料過濾。
代價優化CBO
Join Reorder
- 自動調整Join順序,降低中間資料集大小。
Colocation Join
- 利用資料分布情況在本地完成join,避免資料Shuffle。
Bucket Join
智能判斷關聯條件和資料分布關系,減少Shuffle資料量。
資料模型
建表
- 定義 Key 次元列和 Value 名額列
- 選擇資料模型:Agg /Uniq /Dup
- 選擇資料分布方式: Partition 分區和 Bucket 分桶
- 指定副本數量和存儲媒體
模型
- Unique Key主鍵唯一模型,Key唯一、不聚合,實作精準去重和行級别資料更新;
- Aggregate聚合模型:相同key列其Value列合并(SUM,MIN,MAX,REPLACE),通過提前聚合顯著提升查詢性能
- Duplicate Key明細模型,不提前聚合、實作快速排序
- 同時支援星型模型/雪花模型/寬表模型
導入
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外表資料導入。
事務
多版本機制解決讀寫沖突,寫入帶版本、查詢帶版本
兩階段導入保證多表原子生效
- 支援并行導入
- 有沖突時按導入順序生效,無沖突導入時并行生效
标準sql
- 單表聚合、排序、過濾
- 多表關聯、子查詢
- 複雜SQL、視窗函數、GroupingSet等進階文法
- UDF、UDAF
-
修改密碼
SET PASSWORD FOR ‘root’ = PASSWORD(‘123456’);
高并發
通過分區分桶裁剪,減少查詢對系統資源消耗