向量化執行引擎
在三種常見的資料庫查詢引擎執行模型中我們講到了向量化執行引擎本質上是一種批處理模型。批處理思想在計算機的世界裡經常閃閃發光。高併發場景中,可以把大量的請求合併,改為呼叫批量介面;大資料下讀取分布式檔案系統時,如果要讀取大量的小檔案,可以將這些小檔案打成tar包,或者批量一次開啟100~500個檔案;資料庫插入資料時,修改單條插入為批量插入等。批處理減少了cpu的中斷次數,可以更加合理的利用資源。
在向量化執行引擎模型中,列式儲存佔據著天然的優勢:
1、壓縮能力的提公升。同一列的資料型別相同,壓縮比高。
2、io總量小。壓縮減少了一部分io,另外投影操作時,只需要讀取查詢的字段。
3、支援對某一列進行向量計算
通常向量化執行引擎都是用在olap數倉類系統。而oltp系統,由於使用行存,並且點查詢居多,所以向量化執行的優勢也很難體現出來。
兩種向量化執行引擎的實現
方法一:仍使用火山模型,將一次一tuple的處理模式,修改為一次向上返回一組列存行值(例如:100-1000行)處理方式。
compare-row-column
圖1中描述的就是火山模型實現的行存執行引擎與列存執行引擎,其中左邊代表的是傳統的行存火山模型,右邊代表的是列存實現的火山模型。
火山模式是從執行計畫樹的根節點開始向葉子節點遞迴呼叫,然後由葉子節點掃瞄節點,過濾出符合條件的tuple 給上層節點處理,agg運算元快取中間結果。
右邊列存執行引擎,執行邏輯基本上與左邊行存執行引擎一致,但是每次掃瞄處理的是一組列資料集合。這樣每次處理的資料變多,總體的呼叫次數變少,cpu的利用率得到了提高。
方法二:將整個模型改造成為層次型的執行模式,也稱編譯執行模型。
整個執行計畫樹從跟節點到葉子節點只需要呼叫一次。從葉子節點開始每一層都是執行完所有的操作之後,才向上返回結果。
編譯執行模型的缺點就是每乙個節點都需要將資料進行快取,在資料量比較大的情況下,記憶體可能放不下這些資料,需要寫盤。
• 拉取模型 vs 推送模型
方法一的向量化執行是自上而下的批量拉取模型;方法二的編譯執行是自低向上的推送模型。
原則上這兩個模型是不相容的,二者只能取其一。但是也有人在嘗試編譯執行融合向量化:把查詢樹分解,部分用向量化方式,部分用編譯執行方式。
兩種向量化執行引擎思路
向量化執行引擎 在三種常見的資料庫查詢引擎執行模型中我們講到了向量化執行引擎本質上是一種批處理模型。批處理思想在計算機的世界裡經常閃閃發光。高併發場景中,可以把大量的請求合併,改為呼叫批量介面 大資料下讀取分布式檔案系統時,如果要讀取大量的小檔案,可以將這些小檔案打成tar包,或者批量一次開啟100...
分布式的兩種演算法
這種演算法非常的簡單,就是根據伺服器台數的餘數進行分散,求得整數值的hash值,再除以伺服器的台數,根據其餘數來選擇伺服器,將server的hash值與server的總台數進行求餘,即hash n。但是在這種演算法對快取命中率的影響下 我們假設有8臺伺服器,執行中突然down了一台,則求餘的底數變成...
分布式共享記憶體兩種實現方式
分布式共享記憶體 這裡,我們介紹兩種分布式共享記憶體,一種是分布式共享記憶體,另外一種是 分布式共享記憶體 簡單的分布式共享記憶體 所有的程序去訪問乙個共享記憶體,這個共享記憶體是虛擬的,他可能分布在不同的物理機上,其實可以理解為一種抽象,他整合了所有的儲存資源,然後所有的排程 分配 讀寫都對程式設...