微軟并行數(shù)據(jù)倉(cāng)庫(kù)(Parallel Data Warehouse,簡(jiǎn)稱(chēng)PDW)去年同SQL Server 2008 R2一同發(fā)布,該產(chǎn)品設(shè)計(jì)初衷是為了同Oracle Exadata和Teradata等展開(kāi)競(jìng)爭(zhēng)。PDW真正意義上實(shí)現(xiàn)了混合工作負(fù)載的能力,用戶(hù)可以在使用熟悉的SQL Server數(shù)據(jù)庫(kù)引擎的情況下,將數(shù)據(jù)從多個(gè)物理服務(wù)器上進(jìn)行擴(kuò)展。
并行數(shù)據(jù)倉(cāng)庫(kù)并不是一款軟件系統(tǒng)產(chǎn)品,在購(gòu)買(mǎi)之后你不能簡(jiǎn)單地將其安裝在硬件上。PDW最基本的配置是雙機(jī)架,其中一個(gè)機(jī)架是管理服務(wù)器,作為管理節(jié)點(diǎn)、控制節(jié)點(diǎn)、lzone節(jié)點(diǎn)和備份節(jié)點(diǎn)。另一個(gè)機(jī)架將存放所謂的計(jì)算節(jié)點(diǎn),用來(lái)真正存儲(chǔ)數(shù)據(jù),我們將其稱(chēng)為一個(gè)數(shù)據(jù)機(jī)架,它里面是一個(gè)10核芯片服務(wù)器(具體情況具體分析)和專(zhuān)有的SAN存儲(chǔ)設(shè)備。對(duì)PDW進(jìn)行擴(kuò)展十分簡(jiǎn)單,添加更多的數(shù)據(jù)機(jī)架即可。
控制節(jié)點(diǎn)提供了一系列的功能,最重要的是,它們提供了查詢(xún)并行數(shù)據(jù)倉(cāng)庫(kù)的功能。你連接到控制節(jié)點(diǎn)時(shí),并不是使用熟悉的SQL Server Management Studio(SSMS),而是使用一款第三方工具——Nexus Chameleon,它是包含在PDW安裝之內(nèi)的。由于SSMS不能夠直接連接到PDW控制節(jié)點(diǎn),因此用戶(hù)在使用PDW之前需要熟悉這款工具。
運(yùn)行在控制節(jié)點(diǎn)上的是一個(gè)特殊版本的SQL Server數(shù)據(jù)庫(kù),它能夠?qū)?font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px auto; padding-top: 0px">Transact-SQL查詢(xún)送到PDW計(jì)算節(jié)點(diǎn)來(lái)執(zhí)行。事實(shí)上,來(lái)自數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)并不會(huì)存儲(chǔ)在這個(gè)實(shí)例上,取而代之,它會(huì)存放數(shù)據(jù)庫(kù)設(shè)置方面的元數(shù)據(jù),并提供暫存空間作為臨時(shí)數(shù)據(jù)庫(kù)。
除了處理數(shù)據(jù)查詢(xún)請(qǐng)求之外,控制節(jié)點(diǎn)還會(huì)處理你的數(shù)據(jù)加載過(guò)程。數(shù)據(jù)加載能夠通過(guò)幾種不同的方式來(lái)完成,最簡(jiǎn)單的一種就是使用Business Intelligence Development Studio (BIDS)工具和最新SQL Server集成服務(wù)(SSIS)的目標(biāo)連接對(duì)象,后者是特別針對(duì)PDW研發(fā)出的產(chǎn)品;另外一種方式是將數(shù)據(jù)加載到所謂的磁頭停放區(qū)(landing zone),然后使用一個(gè)新的工具叫做DWLOADER來(lái)批量加載數(shù)據(jù)到PDW。DWLOADER的工作原理同bcp工具非常相似,它可以將數(shù)據(jù)快速地加載到目標(biāo)table中。
許多人認(rèn)為,微軟并行數(shù)據(jù)倉(cāng)庫(kù)同SQL Server或者Oracle的分區(qū)表相類(lèi)似,雖然二者的概念聽(tīng)上去很像,但實(shí)際上有著很大的差別。分區(qū)表是指你講特定區(qū)域的數(shù)據(jù)分割到單獨(dú)的分區(qū)上,這樣在查詢(xún)的時(shí)候就可以只查詢(xún)一個(gè)分區(qū)就夠了;而PDW中的原理則是截然相反的,你是將當(dāng)前數(shù)據(jù)推送到系統(tǒng)中的每一個(gè)計(jì)算節(jié)點(diǎn)上,這樣當(dāng)你查詢(xún)數(shù)據(jù)的時(shí)候?qū)嶋H是由多個(gè)計(jì)算節(jié)點(diǎn)來(lái)響應(yīng)數(shù)據(jù)請(qǐng)求的。
因此,當(dāng)使用所有的計(jì)算節(jié)點(diǎn)時(shí),你可以增加CPU的數(shù)量并提高一次生成的I/O總數(shù)。這樣的設(shè)計(jì)增加了大量的計(jì)算資源,可以很大程度上減小響應(yīng)時(shí)間。之前需要幾天來(lái)完成的操作,在使用PDW時(shí)僅需幾分鐘,傳統(tǒng)SQL Server實(shí)例無(wú)法運(yùn)行的報(bào)表,PDW可以快速地完成。
但是并行數(shù)據(jù)倉(cāng)庫(kù)并不是萬(wàn)能的,它也有自身的缺點(diǎn)。比如在PDW運(yùn)行插入insert操作會(huì)比傳統(tǒng)SQL Server更慢,由于數(shù)據(jù)插入PDW時(shí),每一行都需要進(jìn)行檢測(cè)才能夠決定存儲(chǔ)在哪些計(jì)算節(jié)點(diǎn)上。當(dāng)在PDW內(nèi)部創(chuàng)建一個(gè)表時(shí),你需要明確數(shù)據(jù)是否需要復(fù)制到所有存儲(chǔ)節(jié)點(diǎn)上;往往一個(gè)維度表可以這樣設(shè)置。
第二個(gè)表設(shè)置選項(xiàng)將用來(lái)在計(jì)算節(jié)點(diǎn)之間發(fā)布數(shù)據(jù),并具體根據(jù)每一列來(lái)決定。當(dāng)數(shù)據(jù)加載之后,聲明過(guò)的列被hash,而hash值將同一個(gè)內(nèi)部表進(jìn)行比較,以決定哪個(gè)控制節(jié)點(diǎn)存儲(chǔ)該數(shù)據(jù)。由于數(shù)據(jù)是通過(guò)控制節(jié)點(diǎn)來(lái)加載到系統(tǒng)之內(nèi)的,所以必須經(jīng)過(guò)hash過(guò)程。然后行數(shù)據(jù)將從控制節(jié)點(diǎn)轉(zhuǎn)移到計(jì)算節(jié)點(diǎn)進(jìn)行存儲(chǔ)。
另外一個(gè)PDW的缺點(diǎn)就是聚合功能。根據(jù)編寫(xiě)的查詢(xún),所有被聚合的數(shù)據(jù)需要從計(jì)算節(jié)點(diǎn)轉(zhuǎn)移到控制節(jié)點(diǎn),并存儲(chǔ)在臨時(shí)數(shù)據(jù)庫(kù)中,當(dāng)轉(zhuǎn)移完成后再進(jìn)行聚合。如果數(shù)據(jù)量非常大的話,這個(gè)過(guò)程將是非常耗費(fèi)時(shí)間的,因?yàn)閿?shù)據(jù)的轉(zhuǎn)移需要網(wǎng)絡(luò)連接來(lái)完成。在一定程度上,用戶(hù)可以避免此類(lèi)情況的發(fā)生,因此我們需要對(duì)表進(jìn)行特別的設(shè)計(jì),并重新審視我們的查詢(xún)語(yǔ)句。如果你打算做一個(gè)聚合日志,那么一定要確保徹底測(cè)試所有的查詢(xún)。
并行數(shù)據(jù)倉(cāng)庫(kù)的基礎(chǔ)架構(gòu)是高度冗余的, PDW內(nèi)幾乎所有的組件都有備份內(nèi)建在幾家之內(nèi)。兩個(gè)管理節(jié)點(diǎn)作為并行數(shù)據(jù)倉(cāng)庫(kù)的主控制器可以允許系統(tǒng)管理員對(duì)其他服務(wù)器進(jìn)行相應(yīng)配置(PDW擁有自身的動(dòng)態(tài)目錄,可以將機(jī)器同其他任何組策略進(jìn)行隔絕)。控制節(jié)點(diǎn)起到了一個(gè)主動(dòng)/被動(dòng)Windows集群的作用,計(jì)算節(jié)點(diǎn)也可以配置為一個(gè)單獨(dú)的集群,因此如果物理服務(wù)器宕機(jī),PDW將不會(huì)失去所有的CPU計(jì)算資源。
微軟的并行數(shù)據(jù)倉(cāng)庫(kù)是一個(gè)非常強(qiáng)大的系統(tǒng),企業(yè)可以根據(jù)自身需求將其的價(jià)值發(fā)揮到最大。但記住PDW并不是SQL Server實(shí)例的替代品,二者在工作原理上并不相同。企業(yè)在購(gòu)買(mǎi)并行數(shù)據(jù)倉(cāng)庫(kù)之前,一定要理解本文中所講到的內(nèi)容,以避免操作不當(dāng)帶來(lái)的不必要的麻煩。
原文鏈接:http://www.searchdatabase.com.cn/showcontent_51272.htm