最近有幸參加了微軟專家進行的爲期一週PDW培訓,將一些知識點記錄以下:數據庫
不知道PDW是什麼東西的,簡單介紹一下:這是微軟與HP/Dell合做推出的SQL Server數據倉庫一體機,由HP或DELL提供硬件(機櫃,四臺服務器,兩臺交換機,IB),再由微軟預裝PDW版本的SQL Server 2012。購買了之後,直接通電就可運行。容量固然是能夠從TB級增加到PB級,處理性能比普通SQL Server 2012快幾十上百倍。主要用來進行大數據分析,不適合用於OLTP。服務器
服務器配置:oop
四臺物理的服務器:一臺是控制服務器,一臺是故障轉移服務器,兩臺是計算節點服務器。性能
控制服務器上裝了四個VM,分別是CTL、VMM、AD和MAD,計算節點每一個有8個VM,總共16個計算節點。大數據
兩個計算節點經過SAS鏈接JBOD,四個服務器經過IB鏈接。spa
四臺物理服務器作了集羣,在FabricDOM域裏,VM也進行了集羣,在APPDOM裏。設計
服務器裝的是Windows 2012,不是R2。索引
儘管管理員密碼是知道的,可是一旦裝了其它東西,微軟就再也不提供支持。字符串
使用和管理部署
能夠經過SQLCMD使用。
能夠經過DWLoader加載數據。
能夠經過VS2012/2013的SSDT進行鏈接,鏈接方式跟普通SQL Server相似,但VS2012必須裝新版的SSDT才能正確鏈接到PDW。正確的鏈接狀態下,鏈接的圖標是一個數據庫集羣樣式,與普通的SQL Server鏈接不一樣。其中的表,不一樣的表(複製表,分佈表)的圖標也會有區別。鏈接之後,能夠直接在VS裏面進行建立數據庫/表,修改等操做。沒有GUI,基本上須要用語句。
能夠經過SSIS(VS2012/2013的BI項目類型)進行數據加載。這也是微軟推薦的導入數據的方式。
能夠經過AdminConsole進行監控,經過DWconfig進行管理。
表結構
兩種表:複製表,分佈表。複製表就是每一個計算節點上都徹底相同的表。分佈表是根據選定的字段進行哈希後存儲在不一樣節點上的表。能夠在建立時進行指定,也能夠後期更改。
建立一個1G的複製表,會在每個節點上都建立一個1G的表,建立一個16G的分佈表,會在每一個節點上建立1G的分表,合起來有16G。
建立表的操做是在CTL上進行的,PDW內部會創建一系列的SQL語句,到每一個計算節點上分別建表,用戶不須要知道這些實際表的名字(其實也很是不可讀,加了很長的字符串)。CTL上的表實際是空殼。
許多字段類型不支持,包括GUID,Geometry,Text等。每行大小8k,沒有主鍵和外鍵,沒有自增,沒有惟一索引。總之就不是一個OLTP的數據庫。
基本上不該該進行數據更新和刪除。刪除應該直接使用Create TABLE as Select ...,相似於普通SQL的INSERT INTO ... Select ...,但比後者快8倍。
DSQL和DataMovement是PDW的核心
DSQL就是在PDW上執行SQL語句,特別是指Join和Group的時候,須要內在的對錶進行一系列操做。理解這個機制才能正確的設計數據庫。
Share Nothing是執行SQL語句時最但願的方式,就是說不須要在計算節點之間移動數據,每一個節點執行本身的語句,查詢結果發送給CTL,全部節點發送完畢,CTL把它們串起來就直接返回給客戶端。沒有數據須要移動,沒有數據須要在CTL進行計算合併。
但Share Nothing不是那麼輕易能作到的事情。多數狀況下,都須要對數據進行移動,移動分爲兩大類:一種是須要在計算節點之間移動數據,一種是將數據從計算節點移動到CTL節點。
複製表若是Inner Join分佈表,不須要移動,複製表和複製表之間也不須要。單獨的複製表或分佈表也不須要。
複雜的狀況發生在分佈表和分佈表之間關聯查詢時。
以SELECT ... FROM A,B WHERE A.col1 = B.col1 AND A.col2 = value爲例:若是A.col1和B.col1都是分佈依據字段,並且數據類型徹底相同,那麼就能夠達到Share Nothing的結果,性能最優。
只要有其中一個字段不是分佈依據,那就會產生數據移動,PDW內在的會判斷採用哪種移動,若是有一個數據表很小,那麼會把它進行復制,就是變成複製表,這種叫作Broadcast Move。其餘狀況下,會進行Shuffle Move,將數據在節點之間進行從新分佈,淡然最後數據會歸位。這樣會有性能開銷,但數據移動是分佈數據庫不可避免的。
這決定了設計數據庫的時候,就應該考慮到使用的一些場景,會執行什麼樣的查詢語句,基本上能夠說,明細表的ID是確定不能拿來作分佈依據的,起碼應該是類型ID之類的字段。
若是SQL語句中有Groupby語句,或者執行Count(),那麼不可避免地要進行Patition Move,就是數據在節點上查詢計算好以後,將每一個節點的SUM保存到CTL節點,再進行彙總。
數據的移動還有不少種狀況,但大多數狀況就是上面這些。
應用模式
圍繞PDW應該創建其餘的數據庫,進行專門化的工做。
一、OLTP的數據庫,是應用系統的直接數據庫,作增刪查改。
二、Loading Server,將數據從OLTP分離出來後,保存在一個Loading Server上,ETL或者ELT導入到PDW。最佳辦法是部署SSIS包進行按期任務。
三、Reporting Server,部署分析服務和報表服務,將PDW的分析結果保存在這個數據庫中,對領導上層進行服務。
四、Backup Server,進行PDW的備份,不須要高性能的計算量,只須要高存儲,經過它再往磁帶庫備份。PDW V1帶有backup Server。從V2開始不帶,爲了縮減成本,須要用戶本身搭建。
與Hadoop關係
經過叫Polybase的引擎,使你能像操做table那樣操做Hadoop,包括讀和寫。它的實質是將你的SQL轉換成MapReduce,在Hadoop中執行。
有三種方式搭建PDW支持的Hadoop:1.直接讓HP/DELL來給你搭建,往PDW機架上放兩個Hadoop服務器;2.本身搭建,只支持三家的Hadoop實現,包括微軟還有另外兩家的,名字沒記住。Apache的不支持;3.使用Windows Azure的Hadoop,15分鐘以內就能夠搭建完成。