相關(guān)申請案交叉申請本發(fā)明要求于2014年12月19日遞交發(fā)明名稱為“用于在集群重新配置后的工作負(fù)載平衡的復(fù)制型數(shù)據(jù)庫分配”的美14/577,629號美國非臨時專利申請案的在先申請優(yōu)先權(quán),該在先申請的內(nèi)容以引入的方式并入本文。本發(fā)明大體涉及分配式數(shù)據(jù)庫,更具體地,涉及分配式關(guān)系數(shù)據(jù)庫的復(fù)制型分區(qū)在網(wǎng)絡(luò)計算機(jī)節(jié)點上的布局。
背景技術(shù):
::數(shù)據(jù)庫用來存儲信息和信息片之間的關(guān)系。一些數(shù)據(jù)庫由單個網(wǎng)絡(luò)或者多個互聯(lián)的網(wǎng)絡(luò)存儲在多臺計算機(jī)上的分配式文件系統(tǒng)中。通常,數(shù)據(jù)庫劃分成大小相等、相似或不相等的分區(qū),并且信息數(shù)據(jù)的一個或多個分區(qū)存儲在經(jīng)由網(wǎng)絡(luò)的系統(tǒng)與多臺服務(wù)器相關(guān)聯(lián)的存儲器設(shè)備中。在一些現(xiàn)有的分配式文件系統(tǒng)中,如典型的hadoop分配式文件系統(tǒng)(hadoopdistributedfilesystem,簡稱hdfs)或典型的對等網(wǎng)絡(luò)(peer-to-peer,簡稱p2p)分配式文件系統(tǒng),各數(shù)據(jù)庫文件劃分成數(shù)據(jù)塊,所述數(shù)據(jù)塊分配到多個計算機(jī)節(jié)點上以便保持?jǐn)?shù)據(jù)冗余并實現(xiàn)工作負(fù)載平衡。一些現(xiàn)有的分配式文件系統(tǒng)利用相當(dāng)大量的節(jié)點,包括成千上萬個節(jié)點,當(dāng)附加的節(jié)點動態(tài)添加到和從所述集群去除時,所述節(jié)點隨時間變化。這些系統(tǒng)中的計算機(jī)節(jié)點通常由商用硬件,如個人電腦(personalcomputer,簡稱pc)組成,并且可包括各用戶系統(tǒng)?,F(xiàn)有的方法能夠?qū)崿F(xiàn)顯著的數(shù)據(jù)冗余和相當(dāng)高的數(shù)據(jù)可用性來用于面向吞吐量的大規(guī)模松散耦合的分配式系統(tǒng),如hdfs和p2p分配式文件系統(tǒng)。其他現(xiàn)有的分配式文件系統(tǒng)包括大規(guī)模并行處理(massivelyparallelprocessing,簡稱mpp)數(shù)據(jù)庫管理系統(tǒng),通過分配數(shù)據(jù)到具有相當(dāng)高性能的一群或多群服務(wù)器如數(shù)據(jù)倉儲設(shè)備中,以及通過在多臺服務(wù)器上并行地運(yùn)行各計算事務(wù)向外擴(kuò)展。mpp數(shù)據(jù)庫系統(tǒng)通常比hdfs或p2p分配式文件系統(tǒng)包括更少的節(jié)點,并且mpp數(shù)據(jù)庫系統(tǒng)中的節(jié)點的數(shù)量相比于hdfs或p2p大體上相對更穩(wěn)定。因此,有時mpp數(shù)據(jù)庫的性能由并行處理計算機(jī)的集群中的更慢的各節(jié)點來控制。結(jié)果,工作負(fù)載平衡有時就變成同時實現(xiàn)高吞吐量和低延時的關(guān)鍵因素。在高性能的基于服務(wù)器的分配式文件系統(tǒng)中,假設(shè)各節(jié)點上的數(shù)據(jù)接收到計算資源的相似訪問,那么數(shù)據(jù)在所述分配式服務(wù)器節(jié)點之間的均勻分配大體上就能夠平衡工作負(fù)載。典型的mpp數(shù)據(jù)庫集群使用“非共享”存儲架構(gòu),其中存儲硬件如磁盤驅(qū)動器,在所述集群的各節(jié)點之間不共享。在mpp數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)位置信息在運(yùn)行時是不可用的。另外,mpp數(shù)據(jù)庫集群越來越多地利用商用硬件資源,如pc。因此,如果集群中的單個服務(wù)器故障的話,存儲在故障服務(wù)器上的數(shù)據(jù)就變得對該集群不可用。高可用性mpp數(shù)據(jù)庫系統(tǒng)的設(shè)計要求所述集群能夠容忍各服務(wù)器故障而提供持續(xù)的不丟失數(shù)據(jù)的服務(wù)。數(shù)據(jù)在多個服務(wù)器中的復(fù)制已與故障轉(zhuǎn)移過程相結(jié)合,使其在單個服務(wù)器出現(xiàn)故障的情況下仍然能夠進(jìn)行,以便達(dá)到容忍服務(wù)器故障的一般水平。此外,特別是關(guān)于節(jié)點故障以及冗余恢復(fù)期間,工作負(fù)載平衡沒有高設(shè)計優(yōu)先。例如,一致性哈希算法經(jīng)常使用來在對等網(wǎng)絡(luò)分配式文件系統(tǒng)中定位分配式和復(fù)制型數(shù)據(jù)。在一致性哈希算法中,哈希函數(shù)的輸出范圍會處理當(dāng)作固定的圓形空間或環(huán)(例如,最大的哈希值繞接到最小的哈希值)。每個系統(tǒng)節(jié)點在這個空間內(nèi)指定有一個值來代表環(huán)上的節(jié)點的位置。每個數(shù)據(jù)項在環(huán)內(nèi)指定到其中一個節(jié)點,通過識別標(biāo)識或與數(shù)據(jù)項相關(guān)聯(lián)的密鑰來在環(huán)上產(chǎn)生唯一位置,然后順時針方向沿環(huán)“行走”或移動來找出位置比其他項更大的第一服務(wù)器。也就是說,每個節(jié)點變成對所述節(jié)點和其在環(huán)上的處理器節(jié)點之間的環(huán)的區(qū)域負(fù)責(zé)。然后,當(dāng)節(jié)點故障時,對應(yīng)的工作負(fù)載就轉(zhuǎn)發(fā)到環(huán)上的下一個服務(wù)器。類似地,當(dāng)一個新的節(jié)點附加到環(huán)上時,該節(jié)點僅共同承擔(dān)環(huán)中相鄰服務(wù)器的工作負(fù)載,結(jié)果導(dǎo)致工作負(fù)載不平衡。雖然在包括成千上萬個節(jié)點的集群中可以合理地容忍這種不平衡的工作負(fù)載,但是相同水平的工作負(fù)載不平衡可在mpp數(shù)據(jù)庫中對性能具有很大的負(fù)面影響。由于吞吐量和時延都具有相當(dāng)?shù)闹匾裕Y(jié)果導(dǎo)致當(dāng)一些現(xiàn)有的文件分配方法用于mpp數(shù)據(jù)庫系統(tǒng)中時會有缺點。技術(shù)實現(xiàn)要素:根據(jù)一個一般方面,一種方法包括:將數(shù)據(jù)庫劃分成多個主分區(qū);將所述主分區(qū)存儲在與計算機(jī)網(wǎng)絡(luò)相關(guān)聯(lián)的多個節(jié)點上,其中,所述主分區(qū)大致均勻地分配在所述節(jié)點之間,并且所述主分區(qū)可用來服務(wù)系統(tǒng)工作負(fù)載;復(fù)制所述主分區(qū)來創(chuàng)建多個從分區(qū);將所述從分區(qū)存儲在所述節(jié)點上,其中,所述從分區(qū)大致均勻地分配在所述節(jié)點之間,各從分區(qū)而不是其對應(yīng)的主分區(qū)存儲在不同節(jié)點上,關(guān)于各從分區(qū)和存儲其的節(jié)點存在分集,并且故障節(jié)點的一個或多個主分區(qū)對應(yīng)的一個或多個從分區(qū)可用于在所述計算機(jī)節(jié)點中的一個故障之后就升級到主用狀態(tài)來保持工作負(fù)載平衡和數(shù)據(jù)的可用性。根據(jù)另一個一般方面,一種用于將多個數(shù)據(jù)分區(qū)分配在一群計算機(jī)節(jié)點之間的計算機(jī)程序產(chǎn)品包括:非瞬時性的有形計算機(jī)可讀存儲介質(zhì),所述介質(zhì)具有呈現(xiàn)在其中的計算機(jī)可讀指令,所述計算機(jī)可讀指令適配來執(zhí)行實現(xiàn)將數(shù)據(jù)庫劃分成多個主分區(qū),將所述主分區(qū)存儲在與計算機(jī)網(wǎng)絡(luò)相關(guān)聯(lián)的多個節(jié)點上,其中,所述主分區(qū)大致均勻地分配在所述節(jié)點之間,并且所述主分區(qū)可用來服務(wù)于系統(tǒng)工作負(fù)載,復(fù)制所述主分區(qū)來創(chuàng)建多個從分區(qū),以及將所述從分區(qū)存儲在所述節(jié)點上,其中,所述從分區(qū)大致均勻地分配在所述節(jié)點之間,各從分區(qū)而不是其對應(yīng)的主分區(qū)存儲在不同節(jié)點上,關(guān)于各從分區(qū)和存儲其的節(jié)點存在分集,并且故障節(jié)點的一個或多個主分區(qū)對應(yīng)的一個或多個從分區(qū)可用于在所述計算機(jī)節(jié)點中的一個故障之后就升級到主用狀態(tài)來保持工作負(fù)載平衡和數(shù)據(jù)的可用性。根據(jù)另一個一般方面,一種用于將多個數(shù)據(jù)分區(qū)分配在一群計算機(jī)節(jié)點之間的設(shè)備包括:分區(qū)器,用于將數(shù)據(jù)庫劃分成多個主分區(qū);復(fù)制器,用于將所述主分區(qū)復(fù)制來創(chuàng)建多個從分區(qū);初始分配器,用于將所述主分區(qū)和所述從分區(qū)存儲在與計算機(jī)網(wǎng)絡(luò)相關(guān)聯(lián)的多個節(jié)點上,其中,所述主分區(qū)和所述從分區(qū)大致均勻地分配在所述節(jié)點之間,所述主分區(qū)可用來服務(wù)系統(tǒng)工作負(fù)載,各從分區(qū)而不是其對應(yīng)的主分區(qū)存儲在不同節(jié)點上,關(guān)于各從分區(qū)和存儲其的節(jié)點存在分集,并且故障節(jié)點的一個或多個主分區(qū)對應(yīng)的一個或多個從分區(qū)可用于在所述計算機(jī)節(jié)點中的一個故障之后就升級到主用狀態(tài)來保持工作負(fù)載平衡和數(shù)據(jù)的可用性。本發(fā)明的一個或多個實施例的細(xì)節(jié)在附圖和下面的詳細(xì)描述中闡明。本發(fā)明的其他特征、目的和優(yōu)點從詳細(xì)描述和附圖并從權(quán)利要求書中將是明顯的。附圖說明圖1是描述一種用于在一群計算機(jī)節(jié)點之間分配數(shù)據(jù)分區(qū)的設(shè)備的示意圖。圖2是描述數(shù)據(jù)庫數(shù)據(jù)分區(qū)在一群計算機(jī)節(jié)點之間的分區(qū)和分配的示意圖。圖3是表示主分區(qū)和從分區(qū)在一群計算機(jī)節(jié)點之間的分配的表格。圖4是表示主分區(qū)和從分區(qū)在出現(xiàn)節(jié)點故障之后重新分配的表格。圖5是表示一個集群中的各計算節(jié)點的等級的數(shù)組。圖6是表示主分區(qū)和從分區(qū)在附加一個節(jié)點到所述集群中之后重新分配的表格。圖7是示出一種在一群計算機(jī)節(jié)點之間初始化分配數(shù)據(jù)分區(qū)的方法的流程圖。圖8是示出一種在出現(xiàn)節(jié)點故障之后重新分配數(shù)據(jù)的方法的流程圖。圖9是示出一種在附加一個節(jié)點到所述集群中之后重新分配數(shù)據(jù)分區(qū)的方法的流程圖。具體實施方式圖1中示出了根據(jù)本發(fā)明的一個實施例,來詳細(xì)說明用于將與數(shù)據(jù)庫相關(guān)聯(lián)的信息數(shù)據(jù)分區(qū)、復(fù)制和分配在多臺互聯(lián)的服務(wù)器之間的裝置10。裝置10可在例如一個或多個關(guān)系數(shù)據(jù)庫管理系統(tǒng)協(xié)調(diào)器節(jié)點、數(shù)據(jù)節(jié)點或任何其組合中應(yīng)用。所述裝置10包括由數(shù)據(jù)中繼器26互聯(lián)的輸入/輸出設(shè)備23、存儲器22和處理器24。存儲器22包括分區(qū)器12、復(fù)制器14、初始分配器16、故障轉(zhuǎn)移分配器18和插入分配器20。使用裝置10的結(jié)果可導(dǎo)致保持?jǐn)?shù)據(jù)冗余的同時提高工作負(fù)載平衡,并提供關(guān)于現(xiàn)有文件分配系統(tǒng)高的數(shù)據(jù)可用性。特別地,使用裝置10的結(jié)果可導(dǎo)致在出現(xiàn)單個計算機(jī)節(jié)點故障或多個節(jié)點故障之后,或在系統(tǒng)容量出現(xiàn)其他改變,如插入一個附加的節(jié)點之后,提高關(guān)于現(xiàn)有布局方法的工作負(fù)載平衡。結(jié)果,裝置10可在大規(guī)模并行處理(massivelyparallelprocessing,簡稱mpp)數(shù)據(jù)庫系統(tǒng)中提供顯著優(yōu)勢。分區(qū)器12可將與數(shù)據(jù)庫相關(guān)聯(lián)的信息數(shù)據(jù)劃分或分區(qū)成各種數(shù)據(jù)分組或大小相等、相似或不相等的分區(qū)。例如,分區(qū)器12可利用哈希函數(shù)來操作與數(shù)據(jù)庫中的各數(shù)據(jù)項或信息段相關(guān)聯(lián)的關(guān)鍵值來創(chuàng)建唯一標(biāo)識符,該唯一標(biāo)識符進(jìn)一步將所述數(shù)據(jù)項或信息段與單個分區(qū)相關(guān)聯(lián)。在一個優(yōu)選實施例中,各分區(qū)的大小相當(dāng)相似或幾乎相等。復(fù)制器14可復(fù)制任何或所有的分區(qū)來創(chuàng)建所述一個或多個分區(qū)的備份副本或復(fù)制物。復(fù)制器14還可復(fù)制任何或所有的分區(qū)來創(chuàng)建所述一個或多個分區(qū)的附加備份復(fù)制物。初始分配器16在將要初始化分配式數(shù)據(jù)庫時可影響所述數(shù)據(jù)分區(qū)在多個計算機(jī)節(jié)點上的布局。如果一個計算機(jī)節(jié)點故障,那么故障轉(zhuǎn)移分配器18就可在幸存節(jié)點之間重新分配所述數(shù)據(jù)分區(qū)來實現(xiàn)工作負(fù)載平衡。類似地,如果一個節(jié)點附加到計算機(jī)的集群中,那么插入分配器20就可將數(shù)據(jù)分區(qū)從現(xiàn)有節(jié)點重新分配到新添加的節(jié)點來保持工作負(fù)載平衡。輸入/輸出設(shè)備23、存儲器22和處理器24可為一般計算機(jī)設(shè)備,如個人電腦(personalcomputer,簡稱pc)、服務(wù)器或大型計算機(jī)的一部分。外接組件可包括存儲在計算機(jī)可讀介質(zhì)上的編程代碼,如源代碼、目標(biāo)代碼或可執(zhí)行代碼,這些代碼可加載到存儲器22中并由處理器24來執(zhí)行以便實現(xiàn)裝置10的功能。因此,在各種實施例中,裝置10的功能可在任何合適的處理器,如服務(wù)器、大型計算機(jī)、pc、pda、網(wǎng)絡(luò)服務(wù)器的集合或pc的集合等上來執(zhí)行。此外,由于已研制出裝置10的改進(jìn)或改良的版本以便例如,來修訂或添加一個模板或特定國家的信息,因此就可升級與處理器相關(guān)聯(lián)的軟件。在各種實施例中,裝置10可連接到可包括能夠鏈接基于計算機(jī)的系統(tǒng)的任意設(shè)備和系統(tǒng)的可行組合的通信網(wǎng)絡(luò),如互聯(lián)網(wǎng);企業(yè)內(nèi)部網(wǎng)或外部網(wǎng);局域網(wǎng)(localareanetwork,簡稱lan);廣域網(wǎng)(wideareanetwork,簡稱wan);直接電纜連接;專用網(wǎng)絡(luò);公用網(wǎng)絡(luò);基于以太網(wǎng)的系統(tǒng);令牌環(huán)網(wǎng);增值網(wǎng)絡(luò);基于電話的系統(tǒng),例如,包括t1或e1設(shè)備;異步傳輸模式(asynchronoustransfermode,atm)網(wǎng)絡(luò);有線系統(tǒng);無線系統(tǒng);光纖系統(tǒng);任意數(shù)量的分配式處理網(wǎng)絡(luò)或系統(tǒng)等的組合。地址數(shù)據(jù)收集系統(tǒng)10可經(jīng)由本地數(shù)據(jù)鏈26耦合到通信網(wǎng)絡(luò),該系統(tǒng)在多種實施例中,可包含設(shè)備的任意組合,以及包含用于耦合基于處理器的系統(tǒng)的相關(guān)軟件或固件,如調(diào)制解調(diào)器、網(wǎng)絡(luò)接口卡、串行總線、并行總線、lan或wan接口、無線或光纖接口等,連同包含如同設(shè)計可能需要或要求的任意相關(guān)的傳輸協(xié)議。本發(fā)明的一個實施例可將信息通信給用戶并請求用戶經(jīng)由,例如,交互的、菜單驅(qū)動的、基于視覺顯示的用戶界面或圖形用戶界面(graphicaluserinterface,簡稱gui)輸出信息。所述用戶界面可在,例如,個人電腦(personalcomputer,簡稱pc)上用鼠標(biāo)和鍵盤來執(zhí)行,通過鍵盤和鼠標(biāo)用戶可利用gui的直接操縱來交互地輸入信息。直接操縱可包括使用如鼠標(biāo)或手寫筆的定點設(shè)備,來從各種可選的字段,包括可選菜單、下拉菜單、選項卡、按鈕、項目符號、復(fù)選框、文本框等中進(jìn)行選擇。盡管如此,本發(fā)明的各種實施例可包含任意數(shù)量的使用或不使用鼠標(biāo)或按鈕或鍵的附加功能的用戶接口方案,包括,例如軌跡球、觸摸屏或聲控系統(tǒng)來代替這個接口方案。參照圖2,數(shù)據(jù)庫表28可由圖1中的分區(qū)器12劃分成包括來自于數(shù)據(jù)庫表28的字段的多個行30的各種分區(qū)28。在本例中,分割器12可使用一個哈希函數(shù)在與每個行30相關(guān)聯(lián)的識別號(identificationnumber,簡稱id)34上操作,以創(chuàng)建一個唯一標(biāo)識符,唯一標(biāo)識符進(jìn)一步將數(shù)據(jù)庫表28的行30的每個與分區(qū)28的其中一個在哈希桶中相關(guān)聯(lián)。數(shù)據(jù)庫表28的大小大致相等的記錄可大致均勻地分配在各分區(qū)28之間來創(chuàng)建大小大致相等的分區(qū)28。所述分區(qū)28可隨后布局,或分配在與數(shù)據(jù)庫相關(guān)聯(lián)的計算機(jī)集群的多個節(jié)點28之間。大體而言,當(dāng)前正在任何給定時間服務(wù)于系統(tǒng)工作負(fù)載,或當(dāng)前可用來服務(wù)于系統(tǒng)工作負(fù)載的存儲分區(qū),可為指定的“主”分區(qū)。當(dāng)前不正在服務(wù)于工作負(fù)載,或當(dāng)前不可用來服務(wù)于工作負(fù)載的存儲備份復(fù)制物,可為指定的“從”分區(qū)。在任意給定的時間,任何單個主分區(qū)可對應(yīng)多個從分區(qū)或復(fù)制物。大體而言,各分區(qū)在以下三種情況之一可分配到各計算機(jī)節(jié)點:1)一經(jīng)數(shù)據(jù)庫初始化時;2)一個或多個節(jié)點出現(xiàn)故障之后;或3)一經(jīng)一個附加節(jié)點或各節(jié)點插入到所述集群中時。分區(qū)布局或分配算法,以在各節(jié)點之間平衡工作負(fù)載并提供高水平的數(shù)據(jù)可用性的方式,在各節(jié)點之間分配各分區(qū)。為此,大體而言,所述主分區(qū)和從分區(qū)都大致均勻地分配在各計算機(jī)節(jié)點之間。主分區(qū)的均勻分配大體促進(jìn)了工作負(fù)載平衡,而所述從分區(qū)的均勻分配在一個或多個節(jié)點故障之后,促進(jìn)了故障轉(zhuǎn)移情況期間的工作負(fù)載平衡。為了推進(jìn)工作負(fù)載平衡并提供k-安全數(shù)據(jù)可用性(即基于對應(yīng)于各主分區(qū)的k從分區(qū),容忍k同步節(jié)點故障的能力),所述布局算法大體上遵從下述四項準(zhǔn)則:●任意單個分區(qū)的主副本和各從復(fù)制物位于不同節(jié)點上;●各主分區(qū)基本均勻地分配在各節(jié)點之間;●各從分區(qū)基本均勻地分配在各節(jié)點之間;●各從分區(qū)分配來最大化分集。第一準(zhǔn)則大體是在一個或多個節(jié)點出現(xiàn)故障時,避免或最小化數(shù)據(jù)丟失。第二和第三準(zhǔn)則大體上促進(jìn)工作負(fù)載平衡。第四準(zhǔn)則在一個或多個節(jié)點出現(xiàn)故障之后,推進(jìn)故障轉(zhuǎn)移情況期間的工作負(fù)載平衡。這里,分集指的是其中對應(yīng)于一個特定節(jié)點上的從分區(qū)的主分區(qū)均勻分配在其他節(jié)點之間的程度。雖然布局算法試圖盡可能遵從所有四個準(zhǔn)則,但是嚴(yán)格遵守第二、第三和第四準(zhǔn)則不是絕對的要求。因此,數(shù)據(jù)庫初始化期間,一旦來自數(shù)據(jù)庫中的信息已分組成各分區(qū),初始分配器16就可根據(jù)本發(fā)明中所描述的分區(qū)布局算法將每個分區(qū)儲存或布局在與數(shù)據(jù)庫相關(guān)聯(lián)的多個計算機(jī)節(jié)點之一中。需要訪問數(shù)據(jù)庫記錄的后續(xù)查詢可轉(zhuǎn)發(fā)到存儲包含該記錄的分區(qū)的節(jié)點。參照圖3,如數(shù)據(jù)庫初始化期間分區(qū)布局的一個具體的例子,表40示出了主分區(qū)42和從分區(qū)44在與數(shù)據(jù)庫相關(guān)聯(lián)的一群服務(wù)器的節(jié)點46之間的布局。來自數(shù)據(jù)庫表中的得分分為編號為1到32的三十二個分區(qū)。每個分區(qū)的主副本和從復(fù)制物分配在指定為n1到n8的一群八計算節(jié)點之間。為了實現(xiàn)工作負(fù)載平衡,每個節(jié)點46上分配有四個主分區(qū)42和四個從分區(qū)44。因此,例如,主分區(qū)42使用循環(huán)布局算法來均勻地分配在各節(jié)點之間,節(jié)點n1上分配編號為1、9、17和25的四個主分區(qū);節(jié)點n2上分配編號為2、10、18和26的四個主分區(qū);節(jié)點n3上分配編號為3、11、19和27的四個主分區(qū);節(jié)點n4上分配編號為4、12、20和28的四個主分區(qū);節(jié)點n5上分配編號為5、13、21和29的四個主分區(qū);節(jié)點n6上分配編號為6、14、22和30的四個主分區(qū);節(jié)點n7上分配編號為7、15、23和31的四個主分區(qū);節(jié)點n8上分配編號為8、16、24和32的四個主分區(qū)。然后,從分區(qū)44使用改進(jìn)的循環(huán)布局算法均勻地分配在各節(jié)點46之間。每個從分區(qū)44分配到除了其中存儲對應(yīng)的主分區(qū)的節(jié)點之外的一個節(jié)點。例如,對應(yīng)于存儲在節(jié)點n1上的主分區(qū)1的從分區(qū)存儲在節(jié)點n5上。此外,每個對應(yīng)于存儲在單個節(jié)點上的主分區(qū)42的從分區(qū)44優(yōu)選存儲在獨(dú)立的節(jié)點40上。例如,對應(yīng)于存儲在節(jié)點n1上的主分區(qū)1、9、17和25的從分區(qū)存儲在四個獨(dú)立的節(jié)點上:n5、n6、n7和n8。類似地,從分區(qū)44優(yōu)選布局使得每個對應(yīng)于存儲在單個節(jié)點上的從分區(qū)44的主分區(qū)42存儲在獨(dú)立的節(jié)點46上。例如,對應(yīng)于存儲在節(jié)點n1上的從分區(qū)5、12、19和26的主分區(qū)42存儲在四個獨(dú)立的節(jié)點:n5、n4、n3和n2上。這種布局算法大體上確保每對對應(yīng)的主分區(qū)和從分區(qū)42,44中的至少一對在一個節(jié)點出現(xiàn)故障之后仍然保持在幸存節(jié)點上。如果附加的分區(qū)復(fù)制物按照關(guān)于對應(yīng)主分區(qū)和各對應(yīng)從分區(qū)的所述相同的準(zhǔn)則來存儲,那么系統(tǒng)就可容忍盡可能多的從分區(qū)的存儲復(fù)制物的同步節(jié)點故障的數(shù)量。因此,如果存儲兩個從分區(qū)復(fù)制物,那么系統(tǒng)就能夠容忍兩個同步節(jié)點故障而不丟失數(shù)據(jù)。也就是說,k從分區(qū)復(fù)制物的存儲提供了k-安全數(shù)據(jù)可用性。大體而言,當(dāng)一個節(jié)點離開或加入分配式文件系統(tǒng)集群時,需要在各節(jié)點之間重新分配或轉(zhuǎn)移數(shù)據(jù)分區(qū),以便保持或恢復(fù)適當(dāng)?shù)墓ぷ髫?fù)載平衡。分區(qū)分配在完成重新分配后來繼續(xù)滿足上述四個準(zhǔn)則是非常重要的。由于單個分區(qū)可包含例如從多個千兆字節(jié)到多個萬億字節(jié)的范圍的大量數(shù)據(jù),所述重新分配過程可潛在地消耗非常重要的能夠暫時影響查詢性能的網(wǎng)絡(luò)和存儲帶寬。因此,最大限度地在重新分配中減少分區(qū)的數(shù)量同工作負(fù)載平衡一樣重要。當(dāng)一個服務(wù)器節(jié)點故障或從網(wǎng)絡(luò)斷開連接或解離,將重新分配以便恢復(fù)數(shù)據(jù)冗余的分區(qū)的最小數(shù)量大體上等于存儲在故障或斷開連接的節(jié)點上的分區(qū)的總數(shù)。存儲在故障或斷開連接的節(jié)點上的主分區(qū)不能再服務(wù)于工作負(fù)載的請求。由于這個原因,與存儲在故障的或斷開連接的節(jié)點上的主分區(qū)相對應(yīng)的存儲在其他當(dāng)前運(yùn)行的節(jié)點上的從分區(qū)就升級到主用狀態(tài)來應(yīng)對節(jié)點故障的檢測。這種情況就稱為“故障轉(zhuǎn)移”。對應(yīng)于故障的節(jié)點的主分區(qū)的后續(xù)請求被轉(zhuǎn)發(fā)到存儲對應(yīng)的從分區(qū)的節(jié)點。創(chuàng)建已被提升到主用狀態(tài)的從分區(qū)的新復(fù)制物,以便在故障轉(zhuǎn)移后恢復(fù)數(shù)據(jù)冗余。工作負(fù)載在故障轉(zhuǎn)移情況下仍然保持適當(dāng)?shù)钠胶?,因為受影響的從分區(qū)在重新分配期間均勻地分配于剩余的節(jié)點上。本發(fā)明中所描述的布局算法在一個節(jié)點出現(xiàn)故障后,當(dāng)從分區(qū)升級到主用狀態(tài)并布局在幸存節(jié)點中時,可大體上平衡故障轉(zhuǎn)移情況下的工作負(fù)載。重新分配的工作負(fù)載應(yīng)當(dāng)由所有的節(jié)點均勻地分擔(dān)。本發(fā)明中所描述的布局算法最小化重新分配過程中的分區(qū)數(shù),并且在重新分配期間以及之后實現(xiàn)工作負(fù)載平衡的同時保持?jǐn)?shù)據(jù)冗余的水平。參照圖4,如分區(qū)布局在一個節(jié)點故障或離開集群之后的重新分配過程中的一個具體例子,表50示出了主分區(qū)52和從分區(qū)54在與數(shù)據(jù)庫相關(guān)聯(lián)的一群服務(wù)器的節(jié)點56之間的布局。圖3的配置中的所述三十二個分區(qū)的主副本和從復(fù)制物在圖3的節(jié)點n8故障或離開集群之后,已重新分配在剩余七個指定為n1到n7的計算機(jī)節(jié)點56之間。為了實現(xiàn)工作負(fù)載平衡,每個節(jié)點56分配有四個或五個主分區(qū)52和四個或五個從分區(qū)54。由于存儲在圖3的節(jié)點n8上的編號為8、16、24和32的主分區(qū)在出現(xiàn)故障或從節(jié)點n8上的集群網(wǎng)絡(luò)斷開后不再可用,存儲在節(jié)點n4、n5、n6和n7上的對應(yīng)從分區(qū)就升級到主用狀態(tài)。其結(jié)果是,如圖3的配置中的每個節(jié)點n1、n2和n3在節(jié)點n8故障或斷開連接之前繼續(xù)存儲相同的四個主分區(qū),而在重新分配后每個節(jié)點n4、n5、n6和n7則存儲五個主分區(qū):其中,節(jié)點n1繼續(xù)存儲編號為1、9、17和25的四個主分區(qū);節(jié)點n2繼續(xù)存儲編號為2、10、18和26的四個主分區(qū);節(jié)點n3繼續(xù)存儲編號為3、11、19和27的四個主分區(qū);節(jié)點n4上分配編號為4、8、12、20和28的五個主分區(qū);節(jié)點n5上分配編號為5、13、16、21和29的五個主分區(qū);節(jié)點n6上分配編號為6、14、22、24和30的五個主分區(qū);節(jié)點n7上分配編號為7、15、23、31和32的五個主分區(qū)。節(jié)點n8不再包含在所述集群中并且當(dāng)前不存儲任何分區(qū),而直接定向編號為8、16、24和32的分區(qū)查詢則被重定向或從節(jié)點n8分別故障轉(zhuǎn)移到節(jié)點n4、n5、n6和n7。只要編號為8、16、24和32的四個分區(qū)已升級到主用狀態(tài),那么所有的數(shù)據(jù)庫中的數(shù)據(jù)對于數(shù)據(jù)庫用戶仍然是可用的。在四個故障轉(zhuǎn)移分區(qū)自從從用狀態(tài)升級到主用狀態(tài)之后的時間點,沒有分區(qū)重新分配的介入。然而,新指定的編號為8、16、24和32的主分區(qū)不會一開始就具有對應(yīng)的從分區(qū)。此外,先前存儲在節(jié)點n8上的編號為4、11、18和25的從分區(qū)不再可用。其結(jié)果是,八個從分區(qū)(編號為4、8、11、16、18、24、25和32)需復(fù)制并重新分配到其他節(jié)點以便保持?jǐn)?shù)據(jù)冗余。這是分區(qū)重新分配的最小數(shù)量,因為它是節(jié)點故障之前先前存儲在節(jié)點n8上的分區(qū)的數(shù)量。再次,從分區(qū)使用改進(jìn)的循環(huán)布局算法均勻地分配在幸存節(jié)點之間。每個從分區(qū)優(yōu)先分配到除了其中存儲對應(yīng)的主分區(qū)的節(jié)點之外的一個節(jié)點。例如,對應(yīng)于現(xiàn)有儲在節(jié)點n4上的主分區(qū)8的從分區(qū)存儲在節(jié)點n6上。編號為8的從分區(qū)不會優(yōu)選布局在節(jié)點n4上,因為編號為8的對應(yīng)主分區(qū)位于節(jié)點n4上。此外,每個對應(yīng)于存儲在單個節(jié)點上的主分區(qū)的從分區(qū)優(yōu)選存儲在獨(dú)立的節(jié)點上。例如,對應(yīng)于存儲在節(jié)點n4上的主分區(qū)4、8、12、20和28的從分區(qū)分別存儲在五個獨(dú)立的節(jié)點:n5、n6、n1、n2和n3上。類似地,從分區(qū)優(yōu)選地布局使得每個對應(yīng)于存儲在單個節(jié)點上的從分區(qū)的主分區(qū)存儲在獨(dú)立的節(jié)點上。例如,對應(yīng)于從分區(qū)3、10、16和17的各主分區(qū)分別存儲在四個獨(dú)立的節(jié)點:n3、n2、n5和n1上。所述重新分配主要是由有關(guān)布局算法的四個準(zhǔn)則的強(qiáng)制執(zhí)行來驅(qū)動的,即,最大限度地提高分集或一個特定節(jié)點上的從分區(qū)對應(yīng)的主分區(qū)在其他節(jié)點之間均勻分配的程度。例如,在改進(jìn)的循環(huán)方法中,如果第一節(jié)點遇到關(guān)于該方法存在分集,則可選擇來用于正被考慮的從分區(qū)的布局。因此,例如,如圖4中所示,在節(jié)點n8故障之后的重新分配期間,由于關(guān)于節(jié)點n6上的從分區(qū)存在分集,因此新創(chuàng)建的編號為8的從分區(qū)布局在節(jié)點n6上。該從分區(qū)優(yōu)選地不布局在節(jié)點n1上,因為關(guān)于節(jié)點n1上的該從分區(qū)不存在分集,由于位于節(jié)點n1上的編號為12的從分區(qū)對應(yīng)節(jié)點n4上的主分區(qū),其中編號為8的主分區(qū)布局在n4上。類似地,編號為8的從分區(qū)優(yōu)選地不布局在節(jié)點n2、n3或n5上,因為關(guān)于該從分區(qū)不存在分集,由于分別位于節(jié)點n2、n3和n5上的編號為20、28和4的從分區(qū)對應(yīng)節(jié)點n4上的各主分區(qū)。這種方法是一種貪婪算法,因為單個從分區(qū)的布局完全基于關(guān)于該從分區(qū)的分集。因此,該結(jié)果可能不是全局最優(yōu)的。在重新分配期間,關(guān)于分區(qū)布局算法可基于在重新分配期間轉(zhuǎn)移到或從單個節(jié)點轉(zhuǎn)移的分區(qū)的數(shù)量施加一個附加的準(zhǔn)則,該數(shù)量稱為節(jié)點的等級。因此,為了在重新分配期間平衡工作負(fù)載,一個數(shù)組可以創(chuàng)建來表示與數(shù)據(jù)庫集群中的每個節(jié)點相關(guān)聯(lián)的當(dāng)前等級值。該數(shù)組可以改良來反映各分區(qū)到和從集群中的每個節(jié)點的每個移動或轉(zhuǎn)移。因此,等級數(shù)組記錄了分區(qū)從每個相應(yīng)的節(jié)點轉(zhuǎn)移的數(shù)量。如一個具體的例子,在圖3的配置和圖4的配置中的數(shù)據(jù)分區(qū)的重新分配期間,八個從分區(qū)被復(fù)制并分配在七個幸存的節(jié)點之間。每個分區(qū)布局會影響兩個節(jié)點:即一個發(fā)送該分區(qū)的節(jié)點和另一接收該分區(qū)的節(jié)點。因此,在本例中共發(fā)送了八個分區(qū)并接收了八個分區(qū)。從單個節(jié)點的角度來看,共有十六個發(fā)送和接收的操作,其中每個操作導(dǎo)致與受影響的節(jié)點相關(guān)聯(lián)的等級值的增量。為了在重新分配期間平衡工作負(fù)載,一個有資格接收從分區(qū)的節(jié)點的最大允許等級優(yōu)選地等于對分區(qū)轉(zhuǎn)移操作的總數(shù)量除以幸存節(jié)點的數(shù)量的值加1的和取整(四舍五入,取最近的整數(shù)值):在本例中,該最大等級是3,如下所示:當(dāng)選擇一個節(jié)點用于布局從分區(qū)時,優(yōu)選地僅考慮那些當(dāng)前還未達(dá)到最大等級值的節(jié)點?,F(xiàn)參照圖5,在本例中示出了隨著重新分配布局過程中的時間62推移(縱向前進(jìn))的一個示例性等級數(shù)組60。一開始,所有節(jié)點的等級為零。然后,隨著重新分配的發(fā)生,每個受影響的節(jié)點對應(yīng)的等級數(shù)組元素在每次節(jié)點被選擇來布局從分區(qū)時就遞增,因為該元素對應(yīng)于復(fù)制的分區(qū)所位于的節(jié)點。因此,例如,在圖5中所示的在第一個重新分配布局的步驟64中,當(dāng)節(jié)點n4中編號為8的主分區(qū)被復(fù)制并且編號為8的從分區(qū)被布局在節(jié)點n6中時,對應(yīng)于n4和n6的元素都遞增為一的值。隨后,在布局步驟6中,當(dāng)確定從分區(qū)11的布局時,盡管分區(qū)將有資格在節(jié)點n4中布局,對應(yīng)的等級值卻已經(jīng)達(dá)到用于重新分配的最大值三。其結(jié)果是,n5替代來選擇用于從分區(qū)11的布局。當(dāng)一個附加的服務(wù)器節(jié)點連接到網(wǎng)絡(luò)上新與集群相關(guān)聯(lián)或者集群的容量另有變化時,數(shù)據(jù)分區(qū)一般需要重新分配,以便在計算機(jī)節(jié)點的當(dāng)前集群之間恢復(fù)工作負(fù)載平衡。分區(qū)重新分配以便恢復(fù)數(shù)據(jù)冗余的最小數(shù)量可基于主從分區(qū)的總數(shù)量以及集群中的節(jié)點數(shù)來計算。例如,主分區(qū)將轉(zhuǎn)移到新添加的節(jié)點上的最小數(shù)量可計算為對每個節(jié)點上的主分區(qū)的平均數(shù)量取整,并且相同數(shù)量的從分區(qū)也可轉(zhuǎn)移到所述新添加的節(jié)點上??商娲?,分區(qū)將轉(zhuǎn)移到新添加的節(jié)點上的最小總數(shù)量可計算為對每個節(jié)點上的分區(qū)的總數(shù)量取整,并且這些可基本均勻地劃分在主從分區(qū)之間。將要移動到新插入的節(jié)點上的特定主分區(qū)和從分區(qū)可優(yōu)選地使用每個分區(qū)的分集來在附加節(jié)點插入之前的原始分配中確定。關(guān)于主分區(qū)的分集被認(rèn)為與對應(yīng)的從分區(qū)的分集相同,或等價地,對應(yīng)的從分區(qū)的分集也用于對應(yīng)主分區(qū)。因此,所公開的方法,或布局算法,建立一個表示各分區(qū)的分集的數(shù)組。缺乏分集或分集等于零的分區(qū)被給予優(yōu)先權(quán)來用于轉(zhuǎn)移到新添加的節(jié)點,以便增加這些分區(qū)的分集。參照圖6,如分區(qū)布局在容量改變后的重新分配期間的一個具體例子導(dǎo)致,當(dāng)一個附加節(jié)點插入到集群中時,表70示出主分區(qū)72和從分區(qū)74在與數(shù)據(jù)庫相關(guān)聯(lián)的一群服務(wù)器的節(jié)點76之間的布局。圖3中所示的配置中的三十二個分區(qū)的主副本和從復(fù)制物在節(jié)點n9加至集群之后已重新分配在九個當(dāng)前指定為n1到n9的計算機(jī)節(jié)點76之間。為了實現(xiàn)工作負(fù)載平衡,每個節(jié)點分配有三個或四個主分區(qū)以及三個或四個從分區(qū)。分區(qū)的最小數(shù)量為六個,包括三個主分區(qū)和三個從分區(qū),布局在節(jié)點n9上。最小數(shù)量的三個主分區(qū)轉(zhuǎn)移到新添加的節(jié)點n9,并且所述主分區(qū)使用循環(huán)布局算法基本均勻地分配在所有當(dāng)前的集群節(jié)點之間。編號最后或最高的主分區(qū)來自圖3中示出的配置中的前三個節(jié)點中的每個,如來自節(jié)點n1編號為25的主分區(qū),來自點n2編號為26的主分區(qū),以及來自節(jié)點n3編號為27的主分區(qū),轉(zhuǎn)移到新添加的節(jié)點n9來在新添加的服務(wù)器上構(gòu)成主分區(qū)的最小數(shù)量。另外,編號最后或最高的從分區(qū)來自圖3中示出的配置中的后續(xù)三個節(jié)點中的每個,如來自節(jié)點n4編號為29的從分區(qū),來自節(jié)點n5編號為30的從分區(qū),來自節(jié)點n6編號為31的從分區(qū),轉(zhuǎn)移到新添加的節(jié)點n9來在新添加的服務(wù)器上構(gòu)成從分區(qū)的最小數(shù)量。其結(jié)果是,在節(jié)點n9加至集群之前,每個如圖3的配置中所示的節(jié)點n4、n5、n6和n7繼續(xù)存儲四個相同主分區(qū),而在重新分配后,各節(jié)點n1、n2、n3和n8則存儲三個主分區(qū):節(jié)點n1上分配編號為1、9和17的三個主分區(qū);節(jié)點n2上分配編號為2、10和18的三個主分區(qū);節(jié)點n3上分配編號為3、11和19的三個主分區(qū);節(jié)點n4繼續(xù)存儲編號為4、12、20和28的四個主分區(qū);節(jié)點n5繼續(xù)存儲編號為5、13、21和29的四個主分區(qū);節(jié)點n6繼續(xù)存儲編號為6、14、22和30的四個主分區(qū);節(jié)點n7繼續(xù)存儲編號為7、15、23和31的四個主分區(qū);節(jié)點n8繼續(xù)存儲編號為8、16、24和32的四個主分區(qū)。新添加的節(jié)點n9分配編號為25、26和27的三個主分區(qū)。每種布局遵從關(guān)于本發(fā)明中所描述的布局算法的適用準(zhǔn)則。因此,每個分配到新添加的節(jié)點n9上的編號為25、26和27的主分區(qū)與每個分配到新添加的節(jié)點n9上的編號為39、30和31的從分區(qū)不同。此外,每個節(jié)點n1至n9存儲三個或四個主分區(qū),連同三個或四個從分區(qū)。此外,與存儲在新添加的節(jié)點n9上的編號為29、30和31的從分區(qū)相對應(yīng)的每個主分區(qū)分別存儲在單獨(dú)的節(jié)點n5、n6和n7上,其中各主分區(qū)保持關(guān)于各從分區(qū)的分集?,F(xiàn)參照圖7,示出了一個可由圖1的裝置10在初始化數(shù)據(jù)庫時使用來實現(xiàn)在本發(fā)明中所描述的分區(qū)布局算法的流程圖。該過程在框70處開始“啟動分區(qū)布局”。在框72中,節(jié)點號變量(例如,“n”)設(shè)定為等于與數(shù)據(jù)庫相關(guān)聯(lián)的一群服務(wù)器中的節(jié)點的編號,分區(qū)號變量(例如,“m”)設(shè)定為等于自數(shù)據(jù)庫中的記錄創(chuàng)建的數(shù)據(jù)分區(qū)的編號,以及主/從變量(例如,“isprimary=true”)設(shè)定為指示當(dāng)前所考慮的分區(qū)是一個主分區(qū)。在框74中,兩種計數(shù)變量,第一種指示當(dāng)前所考慮的節(jié)點編號(例如,“i”)并且第二種指示當(dāng)前所考慮的分區(qū)編號(例如,“j”),被設(shè)定為等于值“1”。在框76中,判定關(guān)于當(dāng)前所考慮的分區(qū)是否是一個主分區(qū)。如果是主分區(qū),則在框78中傾斜變量設(shè)定為等于值“0”。否則,如果當(dāng)前所考慮的分區(qū)不是主分區(qū)而是一個從分區(qū),那么在框80中的傾斜變量設(shè)定為等于值“3”。在這兩種情況下,程序從框78或80進(jìn)行到框82,在框82中來進(jìn)行判定關(guān)于當(dāng)前所考慮的分區(qū)數(shù)量是否小于或等于預(yù)先在框72中設(shè)定的分區(qū)的數(shù)量。如果不是主分區(qū)(即,當(dāng)前所考慮的分區(qū)數(shù)量大于預(yù)先在框72中設(shè)定的分區(qū)的數(shù)量),那么在框84中的主/從變量則設(shè)定為指示當(dāng)前所考慮的分區(qū)不是一個主分區(qū)而是一個從分區(qū),并且程序如上所述繼續(xù)在框74處進(jìn)行。在另一方面,如果在框82中判定目前所考慮的分區(qū)數(shù)量小于或等于預(yù)先在框72中設(shè)定的分區(qū)的數(shù)量,那么在塊86中則進(jìn)一步判定關(guān)于當(dāng)前考慮的分區(qū)是否為一個主分區(qū)。如果不是主分區(qū),而是相反目前所考慮的分區(qū)是一個從分區(qū),則在框88中進(jìn)行分析,以判定包含相同數(shù)據(jù)的對應(yīng)主分區(qū)是否存儲在當(dāng)前所考慮的節(jié)點上。如果不是這種情況,而是所述對應(yīng)主分區(qū)存儲在另一個節(jié)點上,則在框90中進(jìn)行關(guān)于存儲在當(dāng)前所考慮的節(jié)點上的其他從分區(qū)的有關(guān)分集的分析。分集指的是其中對應(yīng)于一個特定節(jié)點上的從分區(qū)的主分區(qū)均勻分配在其他節(jié)點之間的程度。完全或最大分集是指與一個特定節(jié)點上的從分區(qū)相對應(yīng)的每個主分區(qū)存儲在集群中的獨(dú)立的單個節(jié)點上。這就是說,對應(yīng)于存儲在特定節(jié)點上的從分區(qū)的兩個主分區(qū)存儲在集群中的任何單個節(jié)點上。在框90處執(zhí)行的分析,可例如,在沒有與存儲在所考慮的節(jié)點上的任意從節(jié)點相對應(yīng)的主節(jié)點,同被考慮用于布局的從分區(qū)的主分區(qū)一樣也存儲在所述同一節(jié)點上的情況下,來判定分集的存在(“分集=1”)。否則,例如,分集可判定為不存在(“分集=0”)。這種方法是一種貪婪算法,因為它僅基于特定的從分區(qū)的分集來判定特定從分區(qū)的布局。因此,該結(jié)果可能不是全局最優(yōu)的。在一個可選實施方案中,在框90處執(zhí)行的分析可,例如,進(jìn)一步判定當(dāng)沒有對應(yīng)于在所考慮的節(jié)點上的從分區(qū)的兩個主分區(qū)存儲在集群中的任意單個節(jié)點上時,存在分集。如果分集判定為不存在框90中,或者,在另一方面,如果要被存儲在同一節(jié)點上的對應(yīng)主分區(qū)確定在框88中,則在框92中的節(jié)點號變量被增量值增加一,并且程序繼續(xù)到框88。否則,如果分集判定為存在于框90中,或者如果在框82中的判定為當(dāng)前所考慮的分區(qū)數(shù)大于預(yù)先前在框72中設(shè)定的分區(qū)的數(shù)量,那么所考慮的主分區(qū)或從分區(qū)則在框94中布局在節(jié)點上,該節(jié)點具有來源于對存儲在節(jié)點數(shù)變量中的值加上存儲在傾斜變量中的值的和相比于存儲在節(jié)點數(shù)變量中的值執(zhí)行模運(yùn)算的數(shù)字:布局=(所考慮的節(jié)點數(shù)+傾斜變量值)mod(集群中的節(jié)點數(shù))=(i+傾斜)modn現(xiàn)參照圖8,示出了一個可由圖1的裝置10在數(shù)據(jù)庫中的節(jié)點故障或者從網(wǎng)絡(luò)斷開連接之后使用的以便實現(xiàn)本發(fā)明中所描述的分區(qū)布局算法的流程圖。在節(jié)點出現(xiàn)故障或斷開連接之后來執(zhí)行分區(qū)布局算法之前,與先前存儲在故障或斷開連接的節(jié)點上的主分區(qū)對應(yīng)的從分區(qū)應(yīng)當(dāng)在存儲那些從分區(qū)的同一節(jié)點上升級到主用狀態(tài)。下面的過程然后相對于每個新升級的主分區(qū)以及關(guān)于每個先前存儲在故障或斷開連接的節(jié)點上的從分區(qū)在復(fù)制這些分區(qū)時來執(zhí)行。從分區(qū)布局程序開始于框100,“啟動故障轉(zhuǎn)移重新分配?!痹诳?02中,兩種計數(shù)變量,第一種指示當(dāng)前所考慮的節(jié)點編號(例如,“i”)以及第二種指示當(dāng)前所考慮的分區(qū)編號(例如:“j”),被設(shè)定為等于值“1”。在框104中執(zhí)行分析,以判定同當(dāng)前所考慮的從節(jié)點包含相同數(shù)據(jù)的對應(yīng)主分區(qū)是否存儲在當(dāng)前所考慮的節(jié)點上。如果不是這種情況,而是所述對應(yīng)主分區(qū)存儲在另一節(jié)點上,則在框106中進(jìn)行關(guān)于存儲在當(dāng)前所考慮的節(jié)點上的其他從分區(qū)的有關(guān)分集的分析,所述分集如上所述與框90相聯(lián)系。上述分集分析可例如,在沒有與存儲在所考慮的節(jié)點上的任意從節(jié)點相對應(yīng)的主節(jié)點,同被考慮用于布局的從分區(qū)的主分區(qū)一樣也存儲在所述同一節(jié)點上的情況下,來判定分集的存在(“分集=1”)。如果在框106中的分析判定關(guān)于當(dāng)前所考慮的從分區(qū)存在分集,則在框108中執(zhí)行對有關(guān)與當(dāng)前所考慮的節(jié)點相關(guān)聯(lián)的當(dāng)前等級的分析,如上所述。所述等級分析可,例如,判定該節(jié)點有資格用于分區(qū)布局,如果其等級的當(dāng)前值小于最大可接受值的話。如果在框108中的分析判定所考慮的節(jié)點的等級還未達(dá)到可接受的最大等級,則所考慮的從分區(qū)在框110中布局在所考慮的節(jié)點上。在塊112中,節(jié)點數(shù)和分區(qū)數(shù)計數(shù)變量由增量值1在框114中增加,并且程序在框104中繼續(xù)下一個復(fù)制分區(qū)。否則,如果在框104中的分析判定對應(yīng)的主分區(qū)存儲在同一節(jié)點上,或者如果判定分集不存在于框106中,或者如果判定所考慮的節(jié)點的等級在框108中已達(dá)到最大可接受值,那么節(jié)點數(shù)計數(shù)變量(i)由增量值1在框112中增加,并且程序通過考慮從分區(qū)在下一個節(jié)點上的布局在框104中繼續(xù)?,F(xiàn)參照圖9,示出了一個可由圖1的裝置10在一個附加節(jié)點已插入到數(shù)據(jù)庫集群中之后使用以便實現(xiàn)本發(fā)明中所描述的分區(qū)布局算法的流程圖。下面的程序是關(guān)于要轉(zhuǎn)移到新添加的節(jié)點的最小數(shù)量的主分區(qū)以及關(guān)于要轉(zhuǎn)移到新添加的節(jié)點的最小數(shù)量的從分區(qū)來執(zhí)行的。該過程開始于框120,“啟動插入重新分配”。在框122中,從分區(qū)“j”基于關(guān)于從分區(qū)在初始位置或當(dāng)前位置缺乏分集而選擇來將要移動到新添加的節(jié)點“i”。例如,將要移動到新插入的節(jié)點上的特定主分區(qū)和從分區(qū)可優(yōu)選地使用每個節(jié)點的分集來在附加節(jié)點插入之前確定。關(guān)于主分區(qū)的分集被認(rèn)為與對應(yīng)的從分區(qū)的分集相同,或等價地,對應(yīng)的從分區(qū)的分集也用于對應(yīng)主分區(qū)。因此,例如,一個陣列可創(chuàng)建來表示每個節(jié)點的分集,并且可給予節(jié)點缺乏分集或分集等于零的那些分區(qū)優(yōu)先級,用于轉(zhuǎn)移到新添加的節(jié)點,以便增加那些節(jié)點的分集??商娲?,循環(huán)算法(圖9中未示出)可用來判定主從分區(qū)在新添加的節(jié)點上的布局。在框124中,如果一個主分區(qū)正考慮轉(zhuǎn)移到新添加的節(jié)點,則有關(guān)同當(dāng)前所考慮的從節(jié)點包含相同數(shù)據(jù)的對應(yīng)從分區(qū)是否存儲在新添加的節(jié)點上的判定就進(jìn)行。相應(yīng)地,如果一個從分區(qū)正考慮轉(zhuǎn)移到新添加的節(jié)點,則有關(guān)同當(dāng)前所考慮的從節(jié)點包含相同數(shù)據(jù)的對應(yīng)主分區(qū)是否存儲在新添加的節(jié)點上的判定就進(jìn)行。如果不是這種情況,而是所述對應(yīng)主分區(qū)或從分區(qū)存儲在另一節(jié)點上,則在框126中進(jìn)行關(guān)于所選分區(qū)和存儲在新添加的節(jié)點上的其他分區(qū)是否存在分集的分析。如果在框126中的分析判定關(guān)于當(dāng)前所考慮的分區(qū)存在分集,則在框128中執(zhí)行對有關(guān)與新添加的節(jié)點相關(guān)聯(lián)的當(dāng)前等級的分析,如上所述。所述等級分析可,例如,判定所述新添加的節(jié)點有資格用于分區(qū)布局,如果其等級的當(dāng)前值小于最大可接受值的話。如果在框128中的分析判定新添加的節(jié)點的等級還未達(dá)到可接受的最大等級,則在框130中所考慮的分區(qū)布局在新添加的節(jié)點上,并且該程序通過選擇另一被考慮來轉(zhuǎn)移到框122中新添加的節(jié)點上的主分區(qū)或從分區(qū)而繼續(xù)。否則,如果在框124中的分析判定對應(yīng)的主分區(qū)或從分區(qū)存儲在新添加的節(jié)點上,或者如果判定在框126中不存在分集,或者如果判定新添加的節(jié)點的等級在框128中還未達(dá)到最大可接受值,那么程序就通過選擇另一被考慮來轉(zhuǎn)移到框122中新添加的節(jié)點上的主分區(qū)或從分區(qū)而繼續(xù)。本發(fā)明的方面是參照流程圖或框圖來描述的,其中,每個框或任意框的組合可通過計算機(jī)程序指令來實施。所述指令可提供給通用計算機(jī),專用計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器,以實現(xiàn)機(jī)器或制品的生產(chǎn),并且當(dāng)由處理器執(zhí)行時,所述指令創(chuàng)建用于實現(xiàn)在每個框或多個框的組合中指定的所述功能、動作或事件的方法。在這方面,流程圖或框圖中的每個框可對應(yīng)于包括用于實現(xiàn)指定的邏輯功能(多個)的一個或多個可執(zhí)行指令的模塊、段或代碼的一部分。還應(yīng)當(dāng)指出的是,在一些替代實施方式中,與任意框相關(guān)聯(lián)的功能可能會脫離圖中指出的順序發(fā)生。例如,連續(xù)示出的兩個框?qū)嶋H上可大致同時地執(zhí)行,或者框有時可以相反的順序來執(zhí)行。本領(lǐng)域的普通技術(shù)人員的人員將會理解,本發(fā)明的各方面可以體現(xiàn)為設(shè)備、系統(tǒng)、方法或計算機(jī)程序產(chǎn)品。因此,本發(fā)明的各方面,此處通常指電路、模塊、部件或系統(tǒng),可以體現(xiàn)在硬件、軟件(包括固件、駐留軟件、微代碼等),或在軟件和硬件的任意組合,包括體現(xiàn)在具有計算機(jī)可讀程序代碼的計算機(jī)可讀介質(zhì)中的計算機(jī)程序產(chǎn)品。在這方面,可以利用一個或多個計算機(jī)可讀介質(zhì)的任何組合,包括但不限于:電子,磁,光,電磁,紅外,或半導(dǎo)體系統(tǒng),裝置或設(shè)備,或上述的任意合適組合。計算機(jī)可讀存儲介質(zhì)的更具體的例子包括以下的非詳盡列表:便攜式計算機(jī)磁盤、硬盤、隨機(jī)存取存儲器(randomaccessmemory,簡稱ram)、只讀存儲器(read-onlymemory,簡稱rom)、可擦除可編程只讀存儲器(erasableprogrammableread-onlymemory,簡稱eprom)、閃存、便攜式光盤只讀只讀存儲器(portablecompactdiscread-onlymemory,簡稱cd-rom)、光存儲設(shè)備,網(wǎng)絡(luò)連接存儲(network-attachedstorage,簡稱nas)、存儲區(qū)域網(wǎng)絡(luò)(storageareanetwork,簡稱san)、磁帶,或上述的任意合適組合。在本發(fā)明的上下文中,計算機(jī)可讀存儲介質(zhì)可包括能夠包含或存儲被數(shù)據(jù)處理系統(tǒng)、裝置或設(shè)備使用或與其相關(guān)的程序指令的任何有形介質(zhì)??梢杂靡粋€或多個編程語言的任意組合來寫用于實現(xiàn)與本發(fā)明的各方面的操作的計算機(jī)程序代碼,包括如java、smalltalk或c++等面向?qū)ο蟮某绦蛟O(shè)計語言,以及如“c”、fortran、cobol或pascal等傳統(tǒng)過程化編程語言。程序代碼可完全地在個人計算機(jī)上作為一個獨(dú)立的軟件包執(zhí)行,部分地在客戶端計算機(jī)上部分地在遠(yuǎn)程服務(wù)器計算機(jī)上執(zhí)行,以及完全地在遠(yuǎn)程服務(wù)器或計算機(jī)或分配式計算機(jī)節(jié)點的集群上執(zhí)行。大體而言,遠(yuǎn)程計算機(jī)、服務(wù)器或分配式計算機(jī)節(jié)點的群集可以通過任何類型的網(wǎng)絡(luò)連接到個人(用戶)計算機(jī),包括一個局域網(wǎng)(localareanetwork,簡稱lan)、廣域網(wǎng)(wideareanetwork,簡稱wan)、互聯(lián)網(wǎng)接入點,或上述的任意組合。在一個示例性實施例中,使用一種設(shè)備來在一群計算機(jī)節(jié)點之間分配多個數(shù)據(jù)分區(qū)。所述設(shè)備包括:劃分模塊,用于將數(shù)據(jù)庫劃分成多個主分區(qū);主存儲模塊,用于將所述主分區(qū)存儲在與計算機(jī)網(wǎng)絡(luò)相關(guān)聯(lián)的多個節(jié)點上,其中,所述主分區(qū)大致均勻地分配在所述節(jié)點之間,并且所述主分區(qū)可用來服務(wù)系統(tǒng)工作負(fù)載;復(fù)制模塊,用于復(fù)制所述主分區(qū)來創(chuàng)建多個從分區(qū);從存儲模塊,用于將所述從分區(qū)存儲在所述節(jié)點上,其中,所述從分區(qū)大致均勻地分配在所述節(jié)點之間,各從分區(qū)而不是其對應(yīng)的主分區(qū)存儲在不同節(jié)點上,關(guān)于各從分區(qū)和存儲其的節(jié)點存在分集,并且故障節(jié)點的一個或多個主分區(qū)對應(yīng)的一個或多個從分區(qū)可用于在所述計算機(jī)節(jié)點中的一個節(jié)點故障之后就升級到主用狀態(tài)來保持工作負(fù)載平衡和數(shù)據(jù)的可用性。在一些實施例中,所述設(shè)備可包括其他或附加的模塊用于完成所述實施例中所描述的步驟的任何一個步驟或步驟的組合??梢岳斫獾氖强梢赃M(jìn)行各種修改。例如,如果所公開的技術(shù)的步驟以不同的順序進(jìn)行,和/或如果所公開的系統(tǒng)中的組件以不同的方式合并,和/或由其他組件代替或補(bǔ)充,有用的結(jié)果仍可能會實現(xiàn)。因此,其他實現(xiàn)方式在以下權(quán)利要求的保護(hù)范圍之內(nèi)。當(dāng)前第1頁12當(dāng)前第1頁12