關係代數的平行計算

2021-06-27 15:01:45 字數 2465 閱讀 6720

從dremel和impala的學習引申出了sql查詢的並行執行問題,於是藉此機會深入學習一下關聯式資料庫以及關係代數的平行計算。

speedup

指用兩倍的硬體換來一半的執行時間。scaleup指兩倍的硬體換來同等時間內執行兩倍的任務。但往往事情不是那麼簡單,兩倍的硬體也會帶來其他問題:更多cpu帶來的長啟動時間和通訊開銷,以及平行計算帶來的資料傾斜問題。

共享記憶體:任意cpu都能訪問任意的記憶體(全域性共享)和磁碟。優點是簡單,缺點是擴充套件性差,可用性低。

共享磁碟:任意cpu都能訪問任何的磁碟,但是只能訪問自己的主存。優點是可用性和擴充套件性比較好,缺點是實現複雜以及潛在的效能問題。

不共享:任意cpu都只能訪問自己的主存和磁碟。優點也是擴充套件性和可用性,缺點是實現複雜以及複雜均衡。

混合型:系統整體上是shared nothing架構,但結點內部可能是其他架構。這樣就混合了多種架構的優點。

資料分割槽的目的就是:讓資料庫能夠並行地讀寫資料,最大程度地挖掘i/o的潛力。常見的分割槽演算法有:round-robin、範圍索引、雜湊。

關係代數自身的屬性允許關係操作的並行化

並行查詢處理主要分為四步:

ø翻譯:將關係代數表示式翻譯成查詢樹。

ø優化:重排join順序,並選擇不同join演算法來最小化執行開銷。

ø並行:將查詢樹轉換成物理操作樹,並載入到處理器。

ø執行:並行執行最終的執行計畫。

首先將一條sql語句翻譯成查詢樹。

然後根據表大小、索引等情況,重新排列join順序,並選擇合適的演算法。

關於join演算法,常見的有以下幾種:

ønested loop join:思路很簡單,相當於兩層迴圈遍歷,外層是驅動表,返回滿足關聯條件的行。適用於驅動錶小(經過條件過濾後),而被驅動表上join欄位有索引的情況。在兩表都很大時效率很差。

for each row r1 in the outer table

for each row r2 in the inner table

if r1 joins with r2

return (r1, r2)

øsort-merge join:思路也很簡單,就是按join欄位排序,然後進行歸併排序。當join欄位存在重複值時,相當於每個重複值形成了乙個分割槽。join欄位是否排序和重複值的多少決定了sort-merge的效率。適用於兩表都很大的情況,尤其當join欄位上存在聚集索引時(相當於已經排好序了),效率很高。演算法主要消耗在磁碟上。

øhash join:類似於存在重複值情況時的sort-merge,只不過是人為的使用雜湊函式進行分割槽。思路是掃瞄小表建立雜湊表(build階段,小表也叫build表),然後逐行掃瞄大表進行比較(probe階段,大表也叫probe表)。適用於兩表都很大又沒有索引的情況,限制是只適用於等值連線。演算法主要消耗在cpu上。

此外,對於子查詢還有semi joinanti join等演算法。

最後將查詢樹變成物理操作樹,也就是真正的執行計畫。然後根據集群的資源情況,排程到合適的結點上進行平行計算。

1 parallel query processing

python平行計算 python平行計算

0.基礎並行 發 multiprocessing threading 1.concurrent 2.併發 asynico 3.ipython下的平行計算 使用ipyparallel庫的ipython提供了前所未有的能力,將科學python的探索能力與幾乎即時訪問多個計算核心相結合。系統可以直觀地與本...

平行計算模型

平行計算模型通常指從並行演算法 的設計和分析出發,將各種並行計算機 至少某一類並行計算機 的基本特徵抽象出來,形成乙個抽象的計算模型。從更廣的意義上說,平行計算模型為平行計算提供了硬體和軟體介面 在該介面的約定下,並行系統硬體設計者和軟體設計 者可以開發對並行性 的支援機制,從而提高系統的效能。有幾...

平行計算模型

平行計算指的在同一時刻存在多於乙個計算任務被執行。由於cpu主頻提高的上限,使用多核心處理器進行平行計算早已成為主流。gpu也是乙個多核心的處理器,但它的平行計算模型與多核的cpu有很大區別。我們有必要了解gpu的並計算模型。對平行計算模式進行分類是了解cpu和gpu平行計算區別的有效方式。一種分類...