向量化執行引擎
在三種常見的資料庫查詢引擎執行模型中我們講到了向量化執行引擎本質上是一種批處理模型。批處理思想在計算機的世界裡經常閃閃發光。高併發場景中,可以把大量的請求合併,改為呼叫批量介面;大資料下讀取分布式檔案系統時,如果要讀取大量的小檔案,可以將這些小檔案打成tar包,或者批量一次開啟100~500個檔案;資料庫插入資料時,修改單條插入為批量插入等。批處理減少了cpu的中斷次數,可以更加合理的利用資源。
在向量化執行引擎模型中,列式儲存佔據著天然的優勢:
1、壓縮能力的提公升。同一列的資料型別相同,壓縮比高。
2、io總量小。壓縮減少了一部分io,另外投影操作時,只需要讀取查詢的字段。
3、支援對某一列進行向量計算
通常向量化執行引擎都是用在olap數倉類系統。而oltp系統,由於使用行存,並且點查詢居多,所以向量化執行的優勢也很難體現出來。
兩種向量化執行引擎的實現
方法一:仍使用火山模型,將一次一tuple的處理模式,修改為一次向上返回一組列存行值(例如:100-1000行)處理方式。
compare-row-column
圖1中描述的就是火山模型實現的行存執行引擎與列存執行引擎,其中左邊代表的是傳統的行存火山模型,右邊代表的是列存實現的火山模型。
火山模式是從執行計畫樹的根節點開始向葉子節點遞迴呼叫,然後由葉子節點掃瞄節點,過濾出符合條件的tuple 給上層節點處理,agg運算元快取中間結果。
右邊列存執行引擎,執行邏輯基本上與左邊行存執行引擎一致,但是每次掃瞄處理的是一組列資料集合。這樣每次處理的資料變多,總體的呼叫次數變少,cpu的利用率得到了提高。
方法二:將整個模型改造成為層次型的執行模式,也稱編譯執行模型。
compare-batch
整個執行計畫樹從跟節點到葉子節點只需要呼叫一次。從葉子節點開始每一層都是執行完所有的操作之後,才向上返回結果。
編譯執行模型的缺點就是每乙個節點都需要將資料進行快取,在資料量比較大的情況下,記憶體可能放不下這些資料,需要寫盤。
• 拉取模型 vs 推送模型
方法一的向量化執行是自上而下的批量拉取模型;方法二的編譯執行是自低向上的推送模型。
分布式技術專題 兩種向量化執行引擎的實現方法
向量化執行引擎 在三種常見的資料庫查詢引擎執行模型中我們講到了向量化執行引擎本質上是一種批處理模型。批處理思想在計算機的世界裡經常閃閃發光。高併發場景中,可以把大量的請求合併,改為呼叫批量介面 大資料下讀取分布式檔案系統時,如果要讀取大量的小檔案,可以將這些小檔案打成tar包,或者批量一次開啟100...
mysql執行引擎 Mysql兩種引擎
innodb引擎 innodb引擎提供了對資料庫acid事務的支援,並且實現了sql標準的四種隔離級別。該引擎還提供了行級鎖和外來鍵約束,它的設計目標是處理大容量資料庫系統,它本身其實就是基於mysql後台的完整資料庫系統,mysql執行時innodb會在記憶體中建立緩衝池,用於緩衝資料和索引。但是...
兩矩陣各向量余弦相似度計算操作向量化 md
余弦相似度計算 cos bf,bf frac cos bf,bf frac 矩陣向量化操作 按行計算余弦相似度 兩矩陣計算相似度向量應為同維度 返回值res為a矩陣每行對b矩陣每行向量余弦值 res i,j 表示a矩陣第i行向量與b矩陣第j行向量余弦相似度 def cosine matrix mat...