相關(guān)申請案交叉申請
本申請要求于2015年1月21日遞交的發(fā)明名稱為“大規(guī)模并行處理器數(shù)據(jù)庫系統(tǒng)和方法”的第14/601,679號美國普通專利申請案的在先申請優(yōu)先權(quán),其內(nèi)容以引入的方式并入本文。
本發(fā)明涉及數(shù)據(jù)庫系統(tǒng)和方法,尤其涉及大規(guī)模并行處理器數(shù)據(jù)庫系統(tǒng)和方法。
背景技術(shù):
大規(guī)模并行處理(massivelyparallelprocessing,簡稱mpp)數(shù)據(jù)庫管理系統(tǒng)通過向服務(wù)器分配數(shù)據(jù)并在多個服務(wù)器上運行單獨事務(wù)進(jìn)行擴(kuò)展。為實現(xiàn)高吞吐量和低時延,mpp數(shù)據(jù)庫向多個服務(wù)器分配數(shù)據(jù)和查詢。無共享架構(gòu)通過添加用于集群擴(kuò)展的新服務(wù)器進(jìn)行擴(kuò)展。mpp數(shù)據(jù)庫可以通過添加更多的服務(wù)器來擴(kuò)大存儲和計算容量。在通過添加服務(wù)器進(jìn)行擴(kuò)展時,將會向新的服務(wù)器分配數(shù)據(jù)。較慢的服務(wù)器可能會支配性能,這可能會因數(shù)據(jù)分布不均勻?qū)е聬夯?。服?wù)器的工作負(fù)載可取決于存儲的數(shù)據(jù)量。
技術(shù)實現(xiàn)要素:
本發(fā)明一實施例中的方法包括:確定大規(guī)模并行處理(massivelyparallelprocessing,簡稱mpp)數(shù)據(jù)庫集群中初始服務(wù)器的數(shù)量;確定所述mpp數(shù)據(jù)庫集群的初始哈希桶配置,其中,所述初始哈希桶配置具有初始哈希桶的數(shù)量。所述方法還包括:將一定數(shù)量的附加服務(wù)器添加到所述mpp數(shù)據(jù)庫集群中以生成一定數(shù)量的更新服務(wù)器,其中,所述更新服務(wù)器包括所述初始服務(wù)器和所述附加服務(wù)器;根據(jù)所述初始服務(wù)器的數(shù)量、所述初始哈希桶配置和所述附加服務(wù)器的數(shù)量創(chuàng)建更新哈希桶配置,其中,所述更新哈希桶配置具有更新哈希桶的數(shù)量。此外,所述方法包括:根據(jù)所述更新哈希桶配置重新分配所述mpp集群的數(shù)據(jù)。
本發(fā)明一實施例中的方法包括:根據(jù)初始服務(wù)器的數(shù)量和添加的服務(wù)器的數(shù)量為大規(guī)模并行處理器(massivelyparallelprocessing,簡稱mpp)數(shù)據(jù)庫集群確定更新的哈希桶-服務(wù)器映射;根據(jù)所述更新的哈希桶-服務(wù)器映射和初始的哈希桶-服務(wù)器映射確定第一表格是否是待重新分配的。所述方法還包括:當(dāng)?shù)谝槐砀袷谴匦路峙涞模瑔拥谝皇聞?wù);執(zhí)行所述第一事務(wù),其中,所述第一事務(wù)包括將數(shù)據(jù)從所述初始服務(wù)器的一個初始服務(wù)器移動到所述添加的服務(wù)器的一個添加的服務(wù)器。此外,所述方法包括:在執(zhí)行所述第一事務(wù)之后提交所述第一事務(wù)。
本發(fā)明一實施例中的計算機(jī)包括處理器和非瞬時性計算機(jī)可讀存儲介質(zhì),用于存儲所述處理器執(zhí)行的程序。所述程序包括指令,用于:根據(jù)初始服務(wù)器的數(shù)量和添加的服務(wù)器的數(shù)量為大規(guī)模并行處理器(massivelyparallelprocessing,簡稱mpp)數(shù)據(jù)庫集群確定更新的哈希桶-服務(wù)器映射;根據(jù)所述更新的哈希桶-服務(wù)器映射和初始的哈希桶-服務(wù)器映射確定第一表格是否是待重新分配的。所述程序還包括指令,用于:當(dāng)?shù)谝槐砀袷谴匦路峙涞?,啟動第一事?wù);執(zhí)行所述第一事務(wù),其中,所述第一事務(wù)包括將數(shù)據(jù)從所述初始服務(wù)器的一個初始服務(wù)器移動到所述添加的服務(wù)器的一個添加的服務(wù)器。此外,所述程序包括指令,用于:在執(zhí)行所述第一事務(wù)之后提交所述第一事務(wù)。
上述寬泛地概括了本發(fā)明實施例的特征,以便能夠更好理解以下本發(fā)明的詳細(xì)描述。下面將對本發(fā)明實施例的其他特征和優(yōu)勢進(jìn)行說明,其也構(gòu)成了本發(fā)明權(quán)利要求的主題。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,所公開的概念和特定實施例易被用作修改或設(shè)計其他實現(xiàn)與本發(fā)明相同的目的的結(jié)構(gòu)或過程的基礎(chǔ)。本領(lǐng)域的技術(shù)人員還應(yīng)當(dāng)意識到,這種等同構(gòu)造不脫離所附權(quán)利要求書所闡述的本發(fā)明的精神和范圍。
附圖說明
為了更完整地理解本發(fā)明及其優(yōu)點,現(xiàn)在參考下文結(jié)合附圖進(jìn)行的描述,其中:
圖1說明了本發(fā)明實施例中的大規(guī)模并行處理器(massivelyparallelprocessing,簡稱mpp)數(shù)據(jù)庫系統(tǒng);
圖2說明了mpp數(shù)據(jù)庫中的哈希分布;
圖3說明了mpp數(shù)據(jù)庫中的本發(fā)明實施例中的哈希桶分布;
圖4說明了mpp數(shù)據(jù)庫集群擴(kuò)展中本發(fā)明實施例中的哈希桶-服務(wù)器映射;
圖5說明了mpp數(shù)據(jù)庫集群擴(kuò)展中附加的本發(fā)明實施例中的哈希桶-服務(wù)器映射;
圖6說明了將數(shù)據(jù)放置在mpp數(shù)據(jù)庫集群上的本發(fā)明實施例中的方法的流程圖;
圖7說明了mpp數(shù)據(jù)庫集群擴(kuò)展的本發(fā)明實施例中的方法的流程圖;
圖8說明了mpp數(shù)據(jù)庫集群擴(kuò)展中哈希桶的重新分布的本發(fā)明實施例中的方法的流程圖;
圖9說明了本發(fā)明實施例中的計算機(jī)系統(tǒng)的框圖。
除非另有指示,否則不同圖中的對應(yīng)標(biāo)號和符號通常指代對應(yīng)部分。繪制各圖是為了清楚地說明實施例的相關(guān)方面,因此未必是按比例繪制的。
具體實施方式
首先應(yīng)理解,盡管下文提供一項或多項實施例的說明性實施方案,但所公開的系統(tǒng)和/或方法可使用任何數(shù)目的技術(shù)來實施,無論該技術(shù)是當(dāng)前已知還是現(xiàn)有的。本發(fā)明決不應(yīng)限于下文所說明的說明性實施方案、附圖和技術(shù),包括本文所說明并描述的示例性設(shè)計和實施方案,而是可在所附權(quán)利要求書的范圍以及其等效物的完整范圍內(nèi)修改。
大規(guī)模并行處理(massivelyparallelprocessing,簡稱mpp)數(shù)據(jù)庫系統(tǒng)便于管理員向一定數(shù)量的處理器,稱為分區(qū)或數(shù)據(jù)節(jié)點,分配用于分布式計算應(yīng)用的數(shù)據(jù)。例如,mpp數(shù)據(jù)庫系統(tǒng)有助于以并行和分布式方式向進(jìn)行查詢處理的多個數(shù)據(jù)節(jié)點分配數(shù)據(jù)庫數(shù)據(jù)。mpp涉及多個處理器處理某個程序的協(xié)調(diào)過程,各處理器處理該程序的不同部分。各處理器運用自身的操作系統(tǒng)和內(nèi)存資源相互通信,共同完成一項任務(wù)。mpp數(shù)據(jù)庫系統(tǒng)的一個挑戰(zhàn)是在通過添加服務(wù)器來擴(kuò)展集群時數(shù)據(jù)的重新分布。
圖1說明了mpp數(shù)據(jù)庫系統(tǒng)200的一個示例。系統(tǒng)200說明了四個節(jié)點:第一節(jié)點202、第二節(jié)點204、第三節(jié)點206和第四節(jié)點208。各個節(jié)點可以與其它節(jié)點相互通信。為清楚起見描述了四個節(jié)點,但是,在實踐中,可以使用包括更多節(jié)點的更多節(jié)點。
mpp數(shù)據(jù)庫可以通過分區(qū)以及通過向單獨的服務(wù)器分配分區(qū)來管理數(shù)據(jù)。該分配方法使用諸如哈希函數(shù)、模函數(shù)和輪循調(diào)度函數(shù)的算法計算表格中稱為分布列的一列的取值。所述分布列用于確定哪個服務(wù)器和/或數(shù)據(jù)庫實例將存儲相應(yīng)的記錄。那些算法的結(jié)果取決于集群中服務(wù)器或數(shù)據(jù)庫實例的數(shù)量。添加新的服務(wù)器是有問題的,因為mpp數(shù)據(jù)庫無法使用它們來確定哪個服務(wù)器包含所請求的記錄?;诎ㄐ绿砑拥姆?wù)器在內(nèi)的服務(wù)器數(shù)量的數(shù)據(jù)重新分布用于恢復(fù)分布算法結(jié)果和所用記錄的位置之間的一致性。
在一示例中,一致性哈希算法用于在對等分布式文件系統(tǒng)中定位分布式和重復(fù)數(shù)據(jù)。例如,一致性哈希算法可用于對數(shù)據(jù)進(jìn)行分區(qū)。在一致性哈希中,哈希函數(shù)的輸出范圍被視為固定圓形空間或環(huán),即,最大哈希值和最小哈希值首尾相接環(huán)繞,系統(tǒng)中每個服務(wù)器都被賦予了該空間中的隨機(jī)值,代表其在該環(huán)上的位置。通過對數(shù)據(jù)項的鍵進(jìn)行哈希操作以獲得其在環(huán)上的位置,然后按順時針沿著所述環(huán)找到位置大于其它項位置的第一個服務(wù)器,從而將鍵標(biāo)識的每個數(shù)據(jù)項分配給服務(wù)器。然后,每個服務(wù)器負(fù)責(zé)在環(huán)上其本身及其前一個服務(wù)器之間的環(huán)中的區(qū)域。當(dāng)添加了一個服務(wù)器時,新服務(wù)器負(fù)責(zé)數(shù)據(jù)范圍,形式上是環(huán)中現(xiàn)有的鄰近服務(wù)器的子集。因此,新服務(wù)器只分擔(dān)單獨服務(wù)器的工作負(fù)載。當(dāng)服務(wù)器的工作負(fù)載失衡對整個系統(tǒng)的性能并不是至關(guān)重要時,這種方法適用于成千上萬的服務(wù)器。然而,mpp數(shù)據(jù)庫對工作負(fù)載失衡可能會很敏感,其性能可能會受集群中響應(yīng)緩慢的服務(wù)器的嚴(yán)重影響。
在另一示例中,在集群擴(kuò)展期間使用了隨機(jī)分布。為了數(shù)據(jù)訪問的適用性,在重新分布開始后,數(shù)據(jù)分布會變得隨機(jī)。然而,由于那些分布算法不容易定位數(shù)據(jù),所以查詢性能會下降。相反地,使用了表格掃描。整個表格被重新分配。
在一附加示例中,當(dāng)某些現(xiàn)有數(shù)據(jù)庫分區(qū)超過特定大小時,添加新的數(shù)據(jù)庫分區(qū)以分擔(dān)工作負(fù)載。根據(jù)部署和復(fù)制將各條數(shù)據(jù)移動到新的數(shù)據(jù)庫分區(qū)。復(fù)制數(shù)據(jù)分布的更多細(xì)節(jié)在于2014年12月19日遞交的發(fā)明名稱為“用于集群重新配置后工作負(fù)載平衡的復(fù)制數(shù)據(jù)庫分布”的第14/577,629號美國專利申請案中進(jìn)行進(jìn)一步討論,其內(nèi)容以引入的方式并入本文。
在一實施例中,在mpp數(shù)據(jù)庫集群擴(kuò)展后,對數(shù)據(jù)庫數(shù)據(jù)進(jìn)行重新分配。將哈希分布式數(shù)據(jù)作為目標(biāo)。在重新分配期間,可以在不影響查詢性能的情況下實現(xiàn)在線擴(kuò)展。由于只有移動到新服務(wù)器的數(shù)據(jù)被重新分配,且在現(xiàn)有服務(wù)器之間數(shù)據(jù)沒有進(jìn)行交換,所以待重新分配的數(shù)據(jù)量很少。當(dāng)故障發(fā)生時,重新分配可能會終止。目前正在進(jìn)行重新分配的表格返回到之前的數(shù)據(jù)分布,而已經(jīng)完成重新分配的表格則保持重新分配狀態(tài),包括在新服務(wù)器上。所述重新分配可以重新啟動以對剩下的表格進(jìn)行重新分配。
在一實施例中,表中的數(shù)據(jù)放在哈希桶中,其中,所述哈希桶與特定的服務(wù)器相關(guān)聯(lián)。哈希桶的數(shù)量可在線調(diào)整,其中,哈希桶的數(shù)量可能會在服務(wù)器數(shù)量增加時增加。在添加服務(wù)器時,一些哈希桶會移動到新的服務(wù)器??梢园错樞蛞淮螌σ粋€表進(jìn)行重新分配。在故障發(fā)生時,已經(jīng)重新分配的表格保持重新分配狀態(tài)。由于對復(fù)制和主復(fù)制的重新分配是同時進(jìn)行且是透明進(jìn)行,一個實施例會無縫地使用復(fù)制。在大規(guī)模的集群中,給不同組的服務(wù)器重新分配了表格。可以調(diào)整表級服務(wù)器-哈希桶映射以減少開銷并實現(xiàn)工作負(fù)載平衡。本發(fā)明實施例中的過程是原子性和隔離性的。
圖2說明了使用哈希函數(shù)將數(shù)據(jù)庫數(shù)據(jù)分配給mpp數(shù)據(jù)庫集群中的服務(wù)器。表格,例如表102,具有分布列和在表格創(chuàng)建時定義的表格標(biāo)識(identifier,簡稱id)。當(dāng)插入一行時,以服務(wù)器數(shù)量為模,使用分布列的值計算哈希值。結(jié)果代表該行所應(yīng)存儲到的服務(wù)器。例如,服務(wù)器104存儲行1、9和12,服務(wù)器106存儲行3、4和10,服務(wù)器108存儲行5、7和11,服務(wù)器109存儲行2、6和8。
圖3說明了重新分配方法。當(dāng)將一行插入表中時,計算哈希值。通過哈希桶的數(shù)量計算哈希值的模。哈希桶的數(shù)量可以是全局定義的大數(shù)字,例如4096。哈希桶的數(shù)量可以是2的冪?;蛘撸M暗臄?shù)量不是2的冪。哈希桶的數(shù)量可以動態(tài)地改變。模的結(jié)果確定哪個哈希桶對應(yīng)所述行。然后將所述行存儲到基于哈希桶-服務(wù)器映射將所述哈希桶分配到的服務(wù)器中。例如,將表格112中的行分配到哈希桶中。例如,行1、7和9放置在哈希桶114中,行2、5和11放置在哈希桶116中,行3、8和12放置在哈希桶118中,行4、6和10放置在哈希桶120中?;诠V档哪⑺鲂蟹胖迷诠M爸?。所述哈希桶是邏輯組的記錄,不是物理單位。然后,將所述哈希桶放置在服務(wù)器中。例如,基于哈希桶-服務(wù)器映射將哈希桶1和9放置在服務(wù)器122中,將哈希桶2和10放置在服務(wù)器124中,將哈希桶3和11放置在服務(wù)器126中。哈希桶的數(shù)量可與服務(wù)器的數(shù)量相關(guān)。例如,當(dāng)服務(wù)器的數(shù)量增加時,可增加哈希桶的數(shù)量以平衡負(fù)載。
哈希桶-服務(wù)器映射確定哪個服務(wù)器包含給定的哈希桶,因此也包括屬于該哈希桶的記錄。在一示例中,哈希桶-服務(wù)器映射被實現(xiàn)為陣列,其中陣列的索引代表了哈希桶的數(shù)量,而元素值則是服務(wù)器的數(shù)量。圖4說明了具有4096個哈希桶的哈希桶-服務(wù)器映射130。將四個服務(wù)器添加到具有四個服務(wù)器的集群中,那么一共有八個服務(wù)器。在原始的哈希桶-服務(wù)器映射132中,4096個哈希桶在四個服務(wù)器之間分配。哈希桶-服務(wù)器映射陣列的元素值在1和4之間。可以通過哈希桶的數(shù)量模除服務(wù)器的數(shù)量來確定所述哈希桶-服務(wù)器映射陣列。例如,由于1mod4=1,哈希桶1存儲在服務(wù)器1中,由于2mod4=2,哈希桶2存儲在服務(wù)器2中,等等。
當(dāng)添加另外四個服務(wù)器時,數(shù)據(jù)的哈希桶也將被分配。例如,服務(wù)器1最初包含哈希桶1、5、9、……、4093。在集群從四個擴(kuò)展到八個后,服務(wù)器1中哈希桶的一半被重新分配到新的服務(wù)器中。數(shù)據(jù)重新分布可遵循新哈希桶分布以均勻地向包括新服務(wù)器在內(nèi)的服務(wù)器分配數(shù)據(jù)。具有分布在八個服務(wù)器上4096個哈希桶的哈希桶-服務(wù)器映射134說明了此過程。由于只有重新分配給新服務(wù)器的數(shù)據(jù)被移動,因此傳輸?shù)臄?shù)據(jù)量很低。另外,現(xiàn)有服務(wù)器分擔(dān)數(shù)據(jù)重新分布工作負(fù)載,所述重新分布不會造成熱點。
當(dāng)哈希桶的總數(shù)十分接近服務(wù)器的數(shù)量時,由于哈希桶的粒度,工作負(fù)載可能會失衡。在一示例中,有4096個哈希桶和1024個服務(wù)器,其中,每個服務(wù)器有四個哈希桶。集群通過添加另外512個服務(wù)器進(jìn)行擴(kuò)展。當(dāng)哈希桶的數(shù)量仍是4096時,1024個服務(wù)器有三個哈希桶,512個服務(wù)器有兩個哈希桶。盡管相對于其他服務(wù)器,一些服務(wù)器只有一個附加的哈希桶,但是在工作負(fù)載上這會有很大的不同。例如,在每個服務(wù)器只有兩個哈希桶的情況下,工作負(fù)載差別可能為50%左右。
隨著集群的擴(kuò)展,可以在線調(diào)整哈希桶-服務(wù)器映射。在一示例中,哈希桶的數(shù)量以2的冪增加。例如,哈希桶的數(shù)量可能會翻一番或翻兩番。具有四個或八個服務(wù)器的小型集群可能有32個哈希桶。當(dāng)服務(wù)器的數(shù)量增加時,哈希桶的數(shù)量可能會增加到64、128、256等。映射開銷是有限的,而且服務(wù)器具有相對均衡的工作負(fù)載平衡。
哈希桶的數(shù)量取決于現(xiàn)有服務(wù)器的數(shù)量、新服務(wù)器的數(shù)量和預(yù)期的工作負(fù)載傾斜水平。圖5說明了一個具有八個原始服務(wù)器使用32個哈希桶的映射142的集群,所以每個服務(wù)器有四個哈希桶。添加另外四個服務(wù)器。當(dāng)仍然使用32個哈希桶時,在映射144中,八個服務(wù)器各自有三個哈希桶,四個服務(wù)器各自有兩個哈希桶。三哈希桶服務(wù)器的工作負(fù)載比兩哈希桶服務(wù)器高大約50%。當(dāng)哈希桶的數(shù)量增加到64個哈希桶時,四個服務(wù)器有六個哈希桶,而八個服務(wù)器有五個哈希桶,工作負(fù)載傾斜約為20%。因此,增加哈希桶的數(shù)量減少了工作負(fù)載傾斜。
同時增加哈希桶和服務(wù)器的數(shù)量可以分三個階段進(jìn)行。在第一階段,基于原始的哈希桶-服務(wù)器映射增加哈希桶的數(shù)量并重新分配哈希桶,而數(shù)據(jù)分布保持不變。在第二階段,改變哈希桶-服務(wù)器映射以包括新的服務(wù)器。在第三階段,基于新的哈希桶-服務(wù)器映射重新分配數(shù)據(jù)。
映射146示出了增加哈希桶的數(shù)量并重新分配哈希桶的示例。在映射146中,哈希桶的數(shù)量從32個哈希桶(在映射142中)增加到64個哈希桶,而服務(wù)器的數(shù)量仍然是8。在改變之前有32個哈希桶的情況下,將一行分配給哈希桶1,因為其哈希值mod32等于1(或由于之前的重新分布)?;谟成?42中的哈希桶-服務(wù)器映射(針對32個元素),哈希桶1在服務(wù)器1中,所以對應(yīng)的行在服務(wù)器1中。有64個哈希桶的情況下,可以將該行分配給哈希桶33、41、49和57。為保持相同的數(shù)據(jù)分布,新的哈希桶-服務(wù)器映射(有64個元素)針對哈希桶1、33、41、49和57有一個為1的值。
作為一示例,映射148有64個哈希桶,分布在12個服務(wù)器上。一些哈希桶從原來的8個服務(wù)器移動到4個新的服務(wù)器。所述移動遵循規(guī)則以實現(xiàn)工作負(fù)載平衡,其中,當(dāng)原始服務(wù)器提供相同數(shù)量的哈希桶(或者至多少一個或加一個哈希桶)時,新的服務(wù)器有相同數(shù)量的哈希桶(或者至多少一個或加一個哈希桶)。
在一示例中,舊的哈希桶-服務(wù)器映射在過渡時期仍在使用,所以在過渡時期可以正常訪問表格。因為使用了多版本并行性,所以直到提交了重新分布,在重新分布過程中的訪問才可看見重新分布結(jié)果。在提交所述重新分布時,使用了新的映射,重新分布結(jié)果是可見的。
圖6說明了使用哈希桶將數(shù)據(jù)分配給mpp數(shù)據(jù)庫集群中的服務(wù)器的方法的流程圖210。在步驟212中,系統(tǒng)確定mpp數(shù)據(jù)庫集群中服務(wù)器的數(shù)量。
接著,在步驟214中,系統(tǒng)確定哈希桶-服務(wù)器映射,并確定了待使用的哈希桶的數(shù)量。選擇哈希桶的數(shù)量以保持可接受的粒度水平。所述數(shù)量可與服務(wù)器的數(shù)量成比例。哈希桶的數(shù)量可取決于可接受的負(fù)載變化水平。在一示例中,哈希桶的數(shù)量是2的冪。或者,使用了另一數(shù)量的哈希桶。所述哈希桶與特定服務(wù)器相關(guān)聯(lián)以創(chuàng)建哈希桶-服務(wù)器映射。所述哈希桶可以在多個服務(wù)器之間平均分配。
然后,在步驟216中,基于所述哈希桶-服務(wù)器映射將數(shù)據(jù)存儲在服務(wù)器上。所述哈希桶與特定服務(wù)器相關(guān)聯(lián)。例如,數(shù)據(jù)的行與哈希桶相關(guān)聯(lián)。當(dāng)數(shù)據(jù)被放置在某個哈希桶中時,它是基于哈希值的模被放置在與來自哈希桶-服務(wù)器映射的該哈希桶相關(guān)聯(lián)的服務(wù)器上。
圖7說明了在mpp數(shù)據(jù)庫集群中重新分配數(shù)據(jù)的方法的流程圖150。首先,在步驟151中,安裝新的服務(wù)器以擴(kuò)展集群。mpp數(shù)據(jù)庫二進(jìn)制安裝在新添加的服務(wù)器中。已安裝的服務(wù)器開始正常工作。
接著,在步驟152中,啟動重新分配。將表格從舊的服務(wù)器中重新分配到新舊服務(wù)器中。
然后,在步驟154中,確定新的哈希桶-服務(wù)器映射。所述哈希桶-服務(wù)器映射指示哪些哈希桶與各個服務(wù)器相關(guān)聯(lián)。所述新的哈希桶-服務(wù)器映射是基于原始的哈希桶-服務(wù)器映射、現(xiàn)有服務(wù)器的數(shù)量和正在添加的新服務(wù)器的數(shù)量確定的。當(dāng)只是將哈希桶從舊服務(wù)器移動到新服務(wù)器時,當(dāng)前服務(wù)器中的哈希桶可以在新舊服務(wù)器間進(jìn)行相對平均地分配。在一示例中,當(dāng)哈希桶的數(shù)量無法完全平均地分配時,新服務(wù)器具有的哈希桶就相對較少。在另一示例中,新服務(wù)器比現(xiàn)有服務(wù)器具有更多的哈希桶。或者,所有服務(wù)器具有相同數(shù)量的哈希桶。確定新的重新分布是否發(fā)生了可接受的變化。當(dāng)所述新的分布發(fā)生了可接受的變化時,則使用該重新分布。當(dāng)所述新的重新分布發(fā)生了不可接受的變化時,則增加哈希桶的數(shù)量。例如,哈希桶的數(shù)量可能會翻一番、翻兩番,或者增加了另一個2的冪、或其它次冪,如3或10。然后,所述哈希桶被重新分配到新服務(wù)器,所以所述哈希桶是均勻分布的。
在確定所述新的哈希桶-服務(wù)器映射之后,在步驟156中,建立待重新分配的表格列表。這是待重新分配的現(xiàn)有表格的列表。所述待重新分配的表格列表來自現(xiàn)有系統(tǒng)配置。所述待重新分配的表格包括具有在正被重新分配的哈希桶中的行的表格。
然后,在步驟158中,系統(tǒng)確定是否有更多待重新分配的表格。該步驟將已經(jīng)進(jìn)行了分配(都不是針對第一次迭代的)的表格與所述待重新分配的表格列表進(jìn)行對比。所述系統(tǒng)按順序一次重新分配一個表格。當(dāng)所有待重新分配的表格都已經(jīng)被重新分配,所述系統(tǒng)繼續(xù)進(jìn)行步驟160。另一方面,當(dāng)有待重新分配的表格還未被重新分配時,所述系統(tǒng)繼續(xù)進(jìn)行步驟162。
在步驟160中,所述系統(tǒng)移除了舊的哈希桶-服務(wù)器映射,所以只有新的哈希桶-服務(wù)器映射是可用的。然后,所述重新分配完成,該流程結(jié)束。使用所述新的哈希桶-服務(wù)器映射正常訪問所述表格。
在步驟162中,所述系統(tǒng)為一個待重新分配的表格啟動一項事務(wù)。針對每個待重新分配的表格都有一項新的事務(wù)。針對每個表格的新事務(wù)促進(jìn)了隔離性和原子性。在不影響性能的情況下,訪問當(dāng)前正被重新分配的表格的其它事務(wù)利用所述舊的哈希桶-服務(wù)器映射看見所有數(shù)據(jù)。當(dāng)表格的數(shù)據(jù)重新分布在所述事務(wù)的中間失敗時,所述事務(wù)被中止,所述失敗的重新分布則被回滾或?qū)ζ渌聞?wù)不可見。
在步驟164中,基于所述新的哈希桶-服務(wù)器映射為所述待重新分配的表格創(chuàng)建臨時表。當(dāng)其數(shù)據(jù)分布是基于所述新的哈希桶-服務(wù)器映射時,所述臨時表與所述待重新分配的表格具有相同的模式?;谒鲂碌墓M?服務(wù)器映射選擇待重新分配的哈希桶,所述新的映射可以基于所述舊的哈希桶-映射、舊服務(wù)器數(shù)量和新服務(wù)器數(shù)量計算出來。將屬于重新分配中的哈希桶的記錄插入到所述臨時表中,這會導(dǎo)致所述記錄被分配到新服務(wù)器中的臨時表的分區(qū)中。
接著,在步驟166中,基于待移動到新服務(wù)器的哈希桶建立刪除和插入語句。該步驟利用所述舊的哈希桶-服務(wù)器映射和所述新的哈希桶-服務(wù)器映射之間的差別來完成。
然后,在步驟168中,下發(fā)所述刪除和插入語句。通過下發(fā)所述刪除和插入語句,屬于新服務(wù)器中的哈希桶的記錄將從原始表中刪除并插入到臨時表中。分布在現(xiàn)有服務(wù)器的原始表不包括移動到新服務(wù)器的數(shù)據(jù)。另一方面,分布在所有服務(wù)器上的臨時表具有只在新服務(wù)器中的重新分配的數(shù)據(jù)。
在執(zhí)行所述刪除和插入語句之后,在步驟170中,交換元數(shù)據(jù)并將臨時表并入原始表。元數(shù)據(jù)在新服務(wù)器中的原始表和臨時表之間進(jìn)行交換,將臨時表并入原始表。
在步驟172中,提交事務(wù)。臨時表已刪除,所述過程將原始表設(shè)置為使用新的哈希桶-服務(wù)器映射。原始表目前分布在所有服務(wù)器上,包括新服務(wù)器。然后,所述流程返回到步驟158,以將待重新分配的任意剩余的表格進(jìn)行重新分配。
圖8說明了為擴(kuò)展的mpp數(shù)據(jù)庫集群確定哈希桶-服務(wù)器映射的方法的流程圖180。首先,在步驟182中,向mpp集群添加服務(wù)器時,系統(tǒng)確定具有哈希桶的現(xiàn)有數(shù)量的初始哈希桶配置。所述哈希桶配置包括哈希桶的信息,例如,哈希桶的數(shù)量和哈希桶-服務(wù)器映射?;诠M暗墓V祵⒐M皬默F(xiàn)有服務(wù)器重新分配到新服務(wù)器。有充足的哈希桶進(jìn)行重新分配,所以所述哈希桶分布是盡可能均勻的。
接著,在步驟184中,確定負(fù)載變化是否是可接受的。服務(wù)器的負(fù)載可以與在該服務(wù)器上的數(shù)據(jù)量成正比,因此也和哈希桶的數(shù)量成正比。可以確定負(fù)載變化的百分比變化。所述系統(tǒng)可以有預(yù)先確定的可接受的負(fù)載變化?;蛘?,可以動態(tài)地改變可接受的負(fù)載變化。在具有哈希桶的現(xiàn)有數(shù)量的情況下,當(dāng)負(fù)載變化是可接受的,所述系統(tǒng)繼續(xù)進(jìn)行步驟190,并使用更新哈希桶配置。當(dāng)負(fù)載變化是不可接受的,所述系統(tǒng)繼續(xù)進(jìn)行步驟186。
在步驟186中,所述系統(tǒng)增加哈希桶的數(shù)量。例如,哈希桶的數(shù)量可能翻一番、翻兩番,或增加了另一個2的冪,如16。在其它示例中,哈希桶的數(shù)量增加了另一個數(shù)量,如因子1.5、3、或10。將新哈希桶例如按照與現(xiàn)有哈希桶分布成比例地分配給現(xiàn)有服務(wù)器。例如,每個現(xiàn)有哈希桶可被劃分為兩個哈希桶。
接著,在步驟188中,對數(shù)量增加了的哈希桶進(jìn)行重新分配以生成更新哈希桶配置??梢詫M斑M(jìn)行相對均勻的重新分配。在一示例中,對最小數(shù)量的哈希桶進(jìn)行重新分配。然后所述系統(tǒng)返回到步驟184以確定新的重新分布是否有可接受的負(fù)載變化。
刪除/插入語句,例如結(jié)構(gòu)化查詢語言(structuredquerylanguage,簡稱sql)語句,的使用促進(jìn)了數(shù)據(jù)庫復(fù)制的透明度。使用了與在主數(shù)據(jù)庫中相同的方法在復(fù)制側(cè)進(jìn)行重新分配。由于一次處理一個表格,所以每個表格都可以有自己的重新分配。在另一示例中,因為工作負(fù)載的隔離性和性能調(diào)諧,每個表格被分配給不同組的服務(wù)器。此外,為實現(xiàn)更高的吞吐量,可以對多個表格或一個表格中的多個分區(qū)進(jìn)行并行處理。
圖9是處理系統(tǒng)270的方框圖,該處理系統(tǒng)可以用來實現(xiàn)本文公開的設(shè)備和方法。特定設(shè)備可利用所有所示的組件或所述組件的僅一子集,且設(shè)備之間的集成程度可能不同。此外,設(shè)備可以包括部件的多個實例,例如多個處理單元、處理器、存儲器、發(fā)射器、接收器等。處理系統(tǒng)可以包括配備一個或多個輸入設(shè)備,例如麥克風(fēng)、鼠標(biāo)、觸摸屏、按鍵、鍵盤等的處理單元。另外,處理系統(tǒng)270可配備一個或多個輸出設(shè)備,例如揚(yáng)聲器、打印機(jī)、顯示器等。處理單元可以包括中央處理器(centralprocessingunit,簡稱cpu)274、存儲器276、大容量存儲器設(shè)備278、視頻適配器280以及連接至總線的i/o接口288。
總線可以是任意類型的若干總線架構(gòu)中的一個或多個,包括存儲總線或存儲控制器、外設(shè)總線、視頻總線等等。cpu274可包括任意類型的電子數(shù)據(jù)處理器。存儲器276可包括任何類型的非瞬時性系統(tǒng)存儲器,例如靜態(tài)隨機(jī)存取存儲器(staticrandomaccessmemory,簡稱sram)、動態(tài)隨機(jī)存取存儲器(dynamicrandomaccessmemory,簡稱dram)、同步dram(synchronousdram,簡稱sdram)、只讀存儲器(read-onlymemory,簡稱rom)或其組合等等。在一實施例中,存儲器可包括在開機(jī)時使用的rom以及執(zhí)行程序時使用的程序和數(shù)據(jù)存儲器的dram。
大容量存儲器設(shè)備278可包括任意類型的非瞬時性存儲設(shè)備,其用于存儲數(shù)據(jù)、程序和其它信息,并使這些數(shù)據(jù)、程序和其它信息通過總線訪問。大容量存儲器設(shè)備278可包括如下項中的一種或多種:固態(tài)磁盤、硬盤驅(qū)動器、磁盤驅(qū)動器、光盤驅(qū)動器等等。
視頻適配器280以及i/o接口288提供接口以將外部輸入以及輸出設(shè)備耦合到處理單元上。如所圖示,輸入以及輸出設(shè)備的示例包含耦合到視頻適配器上的顯示器以及耦合到i/o接口上的鼠標(biāo)/鍵盤/打印機(jī)。其它設(shè)備可以耦合到處理單元上,并且可以利用額外的或較少的接口卡。舉例來說,串行接口卡(未圖示)可以用于為打印機(jī)提供串行接口。
處理單元還包含一個或多個網(wǎng)絡(luò)接口284,所述網(wǎng)絡(luò)接口284可以包括例如以太網(wǎng)電纜或其類似者等有線鏈路,和/或用以接入節(jié)點或不同網(wǎng)絡(luò)的無線鏈路。網(wǎng)絡(luò)接口284允許處理單元經(jīng)由網(wǎng)絡(luò)與遠(yuǎn)程單元通信。舉例來說,網(wǎng)絡(luò)接口可以經(jīng)由一個或多個發(fā)射器/發(fā)射天線以及一個或多個接收器/接收天線提供無線通信。在一實施例中,所述處理單元與局域網(wǎng)或者廣域網(wǎng)耦合以進(jìn)行數(shù)據(jù)處理以及與遠(yuǎn)端設(shè)備比如其它處理單元、因特網(wǎng)、遠(yuǎn)端存儲設(shè)備等通信。
在一示例性實施例中,計算機(jī)或處理系統(tǒng)包括:數(shù)量確定模塊,用于確定大規(guī)模并行處理(massivelyparallelprocessing,簡稱mpp)數(shù)據(jù)庫集群中初始服務(wù)器的數(shù)量;哈希桶配置模塊,用于確定所述mpp數(shù)據(jù)庫集群的初始哈希桶配置,其中,所述初始哈希桶配置具有初始哈希桶的數(shù)量;服務(wù)器添加模塊,用于將一定數(shù)量的附加服務(wù)器添加到所述mpp數(shù)據(jù)庫集群中以生成一定數(shù)量的更新服務(wù)器,其中所述更新服務(wù)器包括所述初始服務(wù)器和所述附加服務(wù)器;哈希桶更新模塊,用于根據(jù)所述初始服務(wù)器的數(shù)量、所述初始哈希桶配置和所述附加服務(wù)器的數(shù)量創(chuàng)建更新哈希桶配置,其中,所述更新哈希桶配置具有更新哈希桶的數(shù)量;數(shù)據(jù)重新分布模塊,用于根據(jù)所述更新哈希桶配置重新分配所述mpp集群的數(shù)據(jù)。在一些實施例中,計算機(jī)或處理系統(tǒng)可以包括其它或附加的模塊來執(zhí)行所述實施例描述的步驟的任何一個或組合。
在一示例性實施例中,計算機(jī)或處理系統(tǒng)包括:映射模塊,用于根據(jù)初始服務(wù)器的數(shù)量和添加的服務(wù)器的數(shù)量為大規(guī)模并行處理器(massivelyparallelprocessor,簡稱mpp)數(shù)據(jù)庫集群確定更新的哈希桶-服務(wù)器映射;重新分布確定模塊,用于根據(jù)所述更新的哈希桶-服務(wù)器映射和初始的哈希桶-服務(wù)器映射確定第一表格是否是待重新分配的;事務(wù)啟動模塊,用于當(dāng)?shù)谝槐砀袷谴匦路峙涞?,啟動第一事?wù);數(shù)據(jù)移動模塊,用于執(zhí)行所述第一事務(wù),其中,所述第一事務(wù)包括將數(shù)據(jù)從所述初始服務(wù)器的一個初始服務(wù)器移動到所述添加的服務(wù)器的一個添加的服務(wù)器;提交模塊,用于在執(zhí)行所述第一事務(wù)之后提交所述第一事務(wù)。在一些實施例中,計算機(jī)或處理系統(tǒng)可以包括其它或附加的模塊來執(zhí)行所述實施例描述的步驟的任何一個或組合。
雖然本發(fā)明中已提供若干實施例,但應(yīng)理解,在不脫離本發(fā)明的精神或范圍的情況下,本發(fā)明所公開的系統(tǒng)和方法可以以許多其它特定形式來體現(xiàn)。本發(fā)明的示例應(yīng)被視為說明性而非限制性的,且本發(fā)明并不限于本文本所給出的細(xì)節(jié)。例如,各種元件或部件可以在另一系統(tǒng)中組合或合并,或者某些特征可以省略或不實施。
此外,在不脫離本發(fā)明的范圍的情況下,各種實施例中描述和說明為離散或單獨的技術(shù)、系統(tǒng)、子系統(tǒng)和方法可以與其它系統(tǒng)、模塊、技術(shù)或方法進(jìn)行組合或合并。展示或論述為彼此耦合或直接耦合或通信的其它項也可以采用電方式、機(jī)械方式或其它方式通過某一接口、設(shè)備或中間部件間接地耦合或通信。其它變化、替代和改變的示例可以由本領(lǐng)域的技術(shù)人員在不脫離本文精神和所公開的范圍的情況下確定。