CMU Database Systems - Parallel Execution

併發執行,主要爲了增大吞吐,下降延遲,提升數據庫的可用性數據庫

 

先區分一組概念,parallel和distributed的區別架構

總的來講,parallel是指在物理上很近的節點,好比本機的多個線程或進程,不用考慮通訊代價
distributed,要充分的考慮通訊代價,failover的問題,更爲複雜併發

 

Process Model

先解釋一下概念,高併發

process model,指數據庫系統架構設計,用於支持多用戶的併發請求線程

worker,用於執行客戶端tasks的DBMS組件架構設計

 

一般的process model有3種,設計

Process Per Worker,每一個worker都是一個系統進程,3d

進程最大優勢,隔離好,不會由於一個worker影響整個庫,但問題確定是過重,比較低效,支持不了高併發
早期的數據庫每每採用這個方案,是由於那個時候線程的方案還不成熟blog

Process Pool,這個方案和上面的沒有本質不一樣,只是worker從只用一個進程,到使用一個進程pool
Pool的好處,一個worker能夠同時相應多個請求,並且一個進程hang住了,不會影響worker工做進程

壞處,一個client的連續的請求會分配到不一樣的進程,那麼CPU cache locality上就不是很好

 

Thread Per Worker

這個是當前主流的process model, 

一個數據庫實例是一個進程,worker經過線程實現,這樣由DBMS本身進行線程調度

線程模型明顯更加輕量,更容易應對高併發的場景,並且線程間通訊的成本很低

最大的問題是隔離性很差,一個線程可能把整個庫搞掛

 

Parallel Execution

並行有兩種,

不一樣的query,並行的執行

一條query中不一樣的operation並行的執行

 

Inter-query,很容易理解,要解決的也就是併發控制問題,這個後面會講

這裏重點說下Intra-query,它也是包含兩種類型,

首先是Intra-operator,水平並行,MPP
把數據水平分紅多份,分別執行,有個Exchange,相似latch,等待全部分片都執行完,作相應的merge而後再往上發送

 

 而後是,Inter-operator,DAG方式,pipeline,streaming process

 

 

I/O PARALLELISM

前面光說了,平行處理,可是數據庫的瓶頸大部分在磁盤IO

因此若是要並行計算,關鍵是數據要能劃分開,並行的讀取

一些比較簡單的方法以下,

人爲的分多塊盤,或是用raid0,raid1

 

可是若是要在表級別作劃分,就須要更爲複雜的方法,對數據作partition

劃分又分爲兩種,

垂直劃分,列存

水平劃分,sharding

相關文章
相關標籤/搜索