專利名稱:分布式數(shù)據(jù)庫并行處理系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)庫系統(tǒng),尤其涉及一種同時(shí)提高數(shù)據(jù)庫數(shù)據(jù)處理性能和提高 數(shù)據(jù)庫可靠度的帶有可控?cái)?shù)據(jù)冗余度的分布式數(shù)據(jù)庫并行處理系統(tǒng)。
背景技術(shù):
數(shù)據(jù)庫數(shù)據(jù)高速處理性能和數(shù)據(jù)庫高可靠度這兩個(gè)指標(biāo)都是商用數(shù)據(jù)庫系統(tǒng)的 重要指標(biāo),為了向客戶提供迅速及時(shí)且穩(wěn)定可靠的服務(wù),商用數(shù)據(jù)庫系統(tǒng)對(duì)這兩個(gè)指標(biāo)都 有非常高的要求。在現(xiàn)有軟件和硬件條件的限制下,傳統(tǒng)的方法只能以犧牲一個(gè)性能指標(biāo) 來提升另外一個(gè)性能指標(biāo)。
為了提高數(shù)據(jù)庫系統(tǒng)的處理性能,現(xiàn)有的數(shù)據(jù)庫系統(tǒng)通常選用盡可能快速和大容 量的硬件設(shè)備(例如處理器、內(nèi)存、系統(tǒng)總線和存儲(chǔ)設(shè)備等等),并為一個(gè)大型服務(wù)器提供 大型硬盤陣列來提高數(shù)據(jù)讀寫和處理速度。帶有這樣高端設(shè)備和大型硬盤陣列的數(shù)據(jù)庫系 統(tǒng)往往造價(jià)昂貴,但其昂貴的硬盤陣列設(shè)備只能保證個(gè)別硬盤出現(xiàn)故障時(shí)整個(gè)數(shù)據(jù)庫系統(tǒng) 能夠維持正常工作,而當(dāng)系統(tǒng)其他設(shè)備或軟件出現(xiàn)故障時(shí)(例如中央處理器、主板、內(nèi)存、 操作系統(tǒng)、數(shù)據(jù)庫軟件等),整個(gè)系統(tǒng)就無法繼續(xù)正常工作,也就是說現(xiàn)有的數(shù)據(jù)庫系統(tǒng)仍 然無法避免單點(diǎn)故障源造成的整個(gè)數(shù)據(jù)庫系統(tǒng)的癱瘓。
為了防止單點(diǎn)故障源癱瘓整個(gè)數(shù)據(jù)庫系統(tǒng),數(shù)據(jù)庫軟件商采用多臺(tái) (shared-nothing)分布式計(jì)算機(jī)的數(shù)據(jù)庫系統(tǒng)來解決系統(tǒng)可靠度的問題。例如最普通的 數(shù)據(jù)庫集群的架構(gòu)請(qǐng)參見圖1,這個(gè)架構(gòu)包括一個(gè)應(yīng)用程序服務(wù)器和多個(gè)(圖中示為1 4號(hào)服務(wù)器)服務(wù)器節(jié)點(diǎn)構(gòu)成,每個(gè)數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)只負(fù)責(zé)存儲(chǔ)一部分?jǐn)?shù)據(jù),各服務(wù)器節(jié) 點(diǎn)存儲(chǔ)的數(shù)據(jù)無交集。其中應(yīng)用程序服務(wù)器接收用戶端(即,客戶1 客戶η)的查詢和寫 操作請(qǐng)求,并將服務(wù)器節(jié)點(diǎn)返回的結(jié)果回送給用戶端。應(yīng)用程序服務(wù)器在接收到用戶端的 查詢和寫操作請(qǐng)求后,根據(jù)所掌握的分布式數(shù)據(jù)庫架構(gòu)信息向服務(wù)器節(jié)點(diǎn)分配查詢和寫操 作請(qǐng)求。服務(wù)器節(jié)點(diǎn)會(huì)將操作結(jié)果反饋至應(yīng)用程序服務(wù)器。在這種架構(gòu)的分布式數(shù)據(jù)庫集 群中,整個(gè)數(shù)據(jù)庫集群的規(guī)模(服務(wù)器節(jié)點(diǎn)數(shù)目)及各服務(wù)器上的數(shù)據(jù)分布方式都要在數(shù) 據(jù)庫設(shè)計(jì)階段固定下來。在為客戶提供服務(wù)時(shí),往往需要多個(gè)節(jié)點(diǎn)參與以提供完整的數(shù)據(jù) 信息,這就要求各服務(wù)器之間進(jìn)行大量的數(shù)據(jù)交換和通訊。這樣的設(shè)計(jì)造成各節(jié)點(diǎn)之間彼 此嚴(yán)重依賴并容易引發(fā)因大量數(shù)據(jù)傳遞而造成的網(wǎng)絡(luò)堵塞,只要當(dāng)系統(tǒng)中的一個(gè)服務(wù)器節(jié) 點(diǎn)出現(xiàn)故障時(shí),整個(gè)系統(tǒng)將無法正常為用戶提供服務(wù)??梢哉f,這種不帶有數(shù)據(jù)冗余優(yōu)化配 置的分布式數(shù)據(jù)庫系統(tǒng)不能用來解決系統(tǒng)可靠度的問題,其只能以犧牲系統(tǒng)可靠度來突破 使用單機(jī)型服務(wù)器的數(shù)據(jù)處理極限。
當(dāng)前,使用分布式計(jì)算機(jī)構(gòu)造數(shù)據(jù)庫集群系統(tǒng)的主要有以下三種構(gòu)架(1)將數(shù) 據(jù)分布在多臺(tái)服務(wù)器節(jié)點(diǎn)上,利用各個(gè)節(jié)點(diǎn)下的本機(jī)專屬中央處理器(CPU)和硬盤同步處 理數(shù)據(jù),以期獲得高速處理性能。( 使用并行處理技術(shù)和Two Phase Commit協(xié)議來把所 有的數(shù)據(jù)都實(shí)時(shí)同步備份到多個(gè)服務(wù)器上,每個(gè)服務(wù)器都保留一份完整的數(shù)據(jù)。C3)利用異 步復(fù)制技術(shù)來提高處理性能和可靠度。基本原理是建立一個(gè)主服務(wù)器和多個(gè)輔助服務(wù)器,主服務(wù)器上存放著全部實(shí)時(shí)數(shù)據(jù),每個(gè)輔助服務(wù)器定時(shí)從主服務(wù)器獲取最新的數(shù)據(jù)。所有 對(duì)數(shù)據(jù)的更新和增加(亦即寫操作)都要經(jīng)過主服務(wù)器處理,然后復(fù)制到各個(gè)輔助服務(wù)器 上。各個(gè)輔助服務(wù)器可以分擔(dān)一部分?jǐn)?shù)據(jù)查詢(亦即只讀操作)的負(fù)載。
上述的三種方法都有各自的缺點(diǎn),無法同時(shí)提高數(shù)據(jù)處理速度和提高數(shù)據(jù)庫可靠 度。對(duì)于第(1)種方法,將數(shù)據(jù)分布在多個(gè)服務(wù)器節(jié)點(diǎn)后,當(dāng)任一節(jié)點(diǎn)出現(xiàn)故障時(shí),任何對(duì) 該節(jié)點(diǎn)的數(shù)據(jù)訪問和更新都無法繼續(xù)進(jìn)行,隨著服務(wù)器節(jié)點(diǎn)數(shù)據(jù)的增加,整個(gè)數(shù)據(jù)庫系統(tǒng) 的可靠性持續(xù)下降。這種方法是以犧牲數(shù)據(jù)庫的可靠性來提高數(shù)據(jù)庫系統(tǒng)的處理性能。此 外,因?yàn)槊總€(gè)節(jié)點(diǎn)和其上存貯的數(shù)據(jù)相對(duì)固定,增減服務(wù)器節(jié)點(diǎn)會(huì)影響原有數(shù)據(jù)分布,這些 計(jì)劃內(nèi)的系統(tǒng)維護(hù)任務(wù)也會(huì)造成數(shù)據(jù)庫的服務(wù)間斷。
對(duì)于第( 種方法,在多個(gè)服務(wù)器上都存儲(chǔ)一份完整的數(shù)據(jù),這要求每次數(shù)據(jù)更 新都必須在每個(gè)服務(wù)器上同步完成。這使得整個(gè)數(shù)據(jù)庫的處理速度永遠(yuǎn)不超過該數(shù)據(jù)庫集 群中最慢的一臺(tái)服務(wù)器,整個(gè)系統(tǒng)的處理性能非但無法按照服務(wù)器節(jié)點(diǎn)數(shù)目線性增加,反 而會(huì)永遠(yuǎn)按照最慢的一臺(tái)服務(wù)器節(jié)點(diǎn)速度來統(tǒng)一步調(diào),造成資源浪費(fèi)。這是靠犧牲數(shù)據(jù)庫 處理性能來提高數(shù)據(jù)庫可靠度的方法。
對(duì)于第( 種方法,由于主服務(wù)器和輔助服務(wù)器之間的異步復(fù)制技術(shù)存在時(shí)間上 的延遲,當(dāng)主服務(wù)器出現(xiàn)故障時(shí),在主服務(wù)器上尚未被復(fù)制到輔助服務(wù)器的數(shù)據(jù)將有可能 丟失,在修復(fù)主服務(wù)器之前整個(gè)系統(tǒng)無法恢復(fù)正常工作,系統(tǒng)的可靠度不會(huì)高于單臺(tái)主服 務(wù)器的可靠度,整個(gè)系統(tǒng)的可靠度并未提高。另外,所有的寫操作必須先由主服務(wù)器完成, 這決定了整個(gè)系統(tǒng)的處理速度在主服務(wù)器達(dá)到負(fù)載飽和后將無法提高。從主服務(wù)器向輔 助服務(wù)器傳遞最新數(shù)據(jù)還會(huì)消耗主服務(wù)器上寶貴的系統(tǒng)資源從而降低主服務(wù)器處理數(shù)據(jù) 的能力,這種復(fù)制方式?jīng)Q定了數(shù)據(jù)復(fù)制速度將由數(shù)據(jù)復(fù)制隊(duì)列兩端(主服務(wù)器和輔助服務(wù) 器)中速度較慢的一端來決定,這種瓶頸效應(yīng)和寫操作必須由主服務(wù)器處理的結(jié)構(gòu)性要求 限制了數(shù)據(jù)庫系統(tǒng)的規(guī)模擴(kuò)展。這種方法實(shí)際上比使用單臺(tái)主服務(wù)器的可靠性更低,數(shù)據(jù) 處理性能更差。
綜上所述,現(xiàn)有技術(shù)中不存在一種技術(shù)可以同時(shí)解決數(shù)據(jù)庫高處理性能和數(shù)據(jù)庫 高可靠度這兩個(gè)看似矛盾的需求。發(fā)明內(nèi)容
本發(fā)明的目的在于解決上述問題,提供了一種帶有可控?cái)?shù)據(jù)冗余度的分布式數(shù)據(jù) 庫并行處理系統(tǒng),第一方面提供了一個(gè)可以動(dòng)態(tài)調(diào)節(jié)易于使用和管理的分布式并行數(shù)據(jù)庫 架構(gòu)以消除性能瓶頸,解決了數(shù)據(jù)庫集群的大規(guī)模擴(kuò)展和提高處理性能的問題;第二方面 利用可控?cái)?shù)據(jù)冗余構(gòu)架可以提高數(shù)據(jù)庫可靠度;第三方面解決了集群規(guī)模最優(yōu)化的問題。 第四方面解決了數(shù)據(jù)庫節(jié)點(diǎn)之間相互依賴的問題。
本發(fā)明的技術(shù)方案為本發(fā)明揭示了一種分布式數(shù)據(jù)庫并行處理系統(tǒng),通過動(dòng)態(tài) 可控冗余架構(gòu)將數(shù)據(jù)庫內(nèi)的數(shù)據(jù)分布到由多個(gè)服務(wù)器節(jié)點(diǎn)組成的數(shù)據(jù)庫集群中,該系統(tǒng)包 括以下組成部分
數(shù)據(jù)庫應(yīng)用程序服務(wù)器,掌握帶有動(dòng)態(tài)可控冗余度的分布式數(shù)據(jù)庫集群的架構(gòu)信 息和數(shù)據(jù)分布情況,接收用戶遞交的對(duì)數(shù)據(jù)庫的操作指令并按照操作的特征動(dòng)態(tài)選定能夠 完成該操作的服務(wù)器節(jié)點(diǎn)來執(zhí)行該操作指令;
多個(gè)服務(wù)器節(jié)點(diǎn),該數(shù)據(jù)庫應(yīng)用程序服務(wù)器連接多個(gè)服務(wù)器節(jié)點(diǎn),該些服務(wù)器節(jié) 點(diǎn)用于存儲(chǔ)實(shí)體數(shù)據(jù)并執(zhí)行用戶遞交的對(duì)數(shù)據(jù)庫的操作指令,該些服務(wù)器節(jié)點(diǎn)分為兩類
第一類服務(wù)器節(jié)點(diǎn)非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),每個(gè)非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)只 存儲(chǔ)指定的一部分分布式數(shù)據(jù),各非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)彼此獨(dú)立工作,不直接與其他 非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)交換數(shù)據(jù),該非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)內(nèi)包含以下信息模塊
存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊,該些分布式數(shù)據(jù)架構(gòu)信息由該數(shù) 據(jù)庫應(yīng)用程序服務(wù)器負(fù)責(zé)維護(hù);
存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊;
存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊,虛擬 表本身不存儲(chǔ)數(shù)據(jù),每個(gè)虛擬表下管理多個(gè)數(shù)據(jù)分區(qū)模塊,分布式數(shù)據(jù)的實(shí)體數(shù)據(jù)存儲(chǔ)于 該些數(shù)據(jù)分區(qū)模塊中,存有分布式數(shù)據(jù)的分區(qū)模塊為有效數(shù)據(jù)分區(qū)模塊,未存有分布式數(shù) 據(jù)的分區(qū)為空分區(qū)模塊,非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)所屬的數(shù)據(jù)分區(qū)模塊中至少有一個(gè)是空 分區(qū)模塊,所有對(duì)有效數(shù)據(jù)分區(qū)模塊內(nèi)數(shù)據(jù)的操作指令都由其上的虛擬表來接收并轉(zhuǎn)發(fā)至 各個(gè)存有實(shí)體數(shù)據(jù)的有效數(shù)據(jù)分區(qū)模塊上執(zhí)行;
第二類服務(wù)器節(jié)點(diǎn)虛空型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),虛空型服務(wù)器節(jié)點(diǎn)本身只保存非 分布式數(shù)據(jù),不存儲(chǔ)任何實(shí)體的分布式數(shù)據(jù),依賴其他存有分布式數(shù)據(jù)的服務(wù)器節(jié)點(diǎn)為其 提供實(shí)體數(shù)據(jù),每個(gè)虛空型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)將各個(gè)存有分布式數(shù)據(jù)的服務(wù)器節(jié)點(diǎn)動(dòng)態(tài)鏈 接起來為用戶提供一份覆蓋全部分布式數(shù)據(jù)的完整數(shù)據(jù)集合,該虛空型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn) 內(nèi)包含以下信息模塊
存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊;
存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊;
存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊,該虛 擬表本身不存儲(chǔ)數(shù)據(jù),每個(gè)虛擬表下管理多個(gè)數(shù)據(jù)分區(qū)模塊,虛空型服務(wù)器節(jié)點(diǎn)上所有的 數(shù)據(jù)分區(qū)模塊均為空模塊,不存儲(chǔ)實(shí)體數(shù)據(jù),其下每個(gè)數(shù)據(jù)分區(qū)模塊與集群中其他存有有 效數(shù)據(jù)的服務(wù)器節(jié)點(diǎn)的分區(qū)模塊保持動(dòng)態(tài)鏈接,當(dāng)虛空型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)上的虛擬表接 收到數(shù)據(jù)操作請(qǐng)求時(shí),虛擬表通過該些動(dòng)態(tài)鏈接從其他服務(wù)器節(jié)點(diǎn)獲取數(shù)據(jù)并返回查詢結(jié)果。
根據(jù)本發(fā)明的分布式數(shù)據(jù)庫并行處理系統(tǒng)的一實(shí)施例,該服務(wù)器節(jié)點(diǎn)還包括
第三類服務(wù)器節(jié)點(diǎn)滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),其上存儲(chǔ)有全部非分布式數(shù)據(jù)和一 份完整的分布式數(shù)據(jù)的數(shù)據(jù)集,單獨(dú)提供用戶所需的全部數(shù)據(jù),滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)內(nèi) 包括以下模塊
存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊;
存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊;
存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊,該虛 擬表本身不存儲(chǔ)數(shù)據(jù),每個(gè)虛擬表下管理多個(gè)數(shù)據(jù)分區(qū)模塊,各滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)下 的數(shù)據(jù)分區(qū)模塊均為有效數(shù)據(jù)分區(qū)模塊,每個(gè)滿型服務(wù)器節(jié)點(diǎn)上的全部有效數(shù)據(jù)分區(qū)模塊 組成一套完整的分布式數(shù)據(jù)以保證該滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)獨(dú)立為用戶提供完整的數(shù)據(jù)。
根據(jù)本發(fā)明的分布式數(shù)據(jù)庫并行處理系統(tǒng)的一實(shí)施例,該數(shù)據(jù)庫應(yīng)用程序服務(wù)器 監(jiān)控和管理每個(gè)服務(wù)器節(jié)點(diǎn),把整個(gè)數(shù)據(jù)庫集群的最新狀態(tài)和最近變更記錄作為分布式數(shù)據(jù)庫集群架構(gòu)的信息保存在每個(gè)服務(wù)器節(jié)點(diǎn)上,在收到用戶操作時(shí)根據(jù)用戶操作的特征將 其發(fā)往對(duì)應(yīng)的服務(wù)器節(jié)點(diǎn)如果該用戶操作是針對(duì)某一數(shù)據(jù)分區(qū)模塊的只讀操作,則選擇 任意一個(gè)包含對(duì)應(yīng)有效數(shù)據(jù)分區(qū)模塊的服務(wù)器節(jié)點(diǎn)來執(zhí)行該只讀操作;如果該用戶操作是 針對(duì)某一數(shù)據(jù)分區(qū)模塊的寫操作,則將該寫操作發(fā)往所有存儲(chǔ)對(duì)應(yīng)有效數(shù)據(jù)分區(qū)模塊的服 務(wù)器節(jié)點(diǎn)來執(zhí)行該寫操作;如果該用戶操作是針對(duì)非分布式數(shù)據(jù)的只讀操作,則可選擇任 意一個(gè)服務(wù)器節(jié)點(diǎn)來執(zhí)行該只讀操作;如果該用戶操作是針對(duì)非分布式數(shù)據(jù)的寫操作,則 將該寫操作發(fā)往所有服務(wù)器節(jié)點(diǎn)來執(zhí)行該寫操作。
根據(jù)本發(fā)明的分布式數(shù)據(jù)庫并行處理系統(tǒng)的一實(shí)施例,集群內(nèi)的虛空型數(shù)據(jù)庫服 務(wù)器節(jié)點(diǎn)動(dòng)態(tài)鏈接數(shù)據(jù)庫集群內(nèi)的非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)和滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)以 組成一個(gè)覆蓋全部分布式數(shù)據(jù)的星型網(wǎng)絡(luò)結(jié)構(gòu),該星型網(wǎng)絡(luò)結(jié)構(gòu)將涉及大量數(shù)據(jù)操作的用 戶指令分割成多個(gè)并行執(zhí)行的指令,分配到多個(gè)獨(dú)立的服務(wù)器節(jié)點(diǎn)上同步運(yùn)行。
根據(jù)本發(fā)明的分布式數(shù)據(jù)庫并行處理系統(tǒng)的一實(shí)施例,滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)在 數(shù)據(jù)庫管理員需要縮減數(shù)據(jù)庫集群規(guī)?;蛘邔?shù)據(jù)庫集群合并至單臺(tái)服務(wù)器時(shí)為用戶提 供安全的合并方案,或者為在數(shù)據(jù)庫應(yīng)用程序開發(fā)人員在單個(gè)服務(wù)器節(jié)點(diǎn)上開發(fā)針對(duì)整個(gè) 數(shù)據(jù)庫集群的應(yīng)用程序時(shí)提供便利的調(diào)試環(huán)境。
本發(fā)明還揭示了一種分布式數(shù)據(jù)庫并行處理系統(tǒng),通過動(dòng)態(tài)可控冗余架構(gòu)將數(shù)據(jù) 庫內(nèi)的數(shù)據(jù)分布到由多個(gè)服務(wù)器節(jié)點(diǎn)組成的數(shù)據(jù)庫集群中,該系統(tǒng)包括以下組成部分
數(shù)據(jù)庫應(yīng)用程序服務(wù)器,掌握帶有動(dòng)態(tài)可控冗余度的分布式數(shù)據(jù)庫集群的架構(gòu)信 息和數(shù)據(jù)分布情況,接收用戶遞交的對(duì)數(shù)據(jù)庫的操作指令并按照操作的特征動(dòng)態(tài)選定能夠 完成該操作的服務(wù)器節(jié)點(diǎn)來執(zhí)行該操作指令;
多個(gè)服務(wù)器節(jié)點(diǎn),該數(shù)據(jù)庫應(yīng)用程序服務(wù)器連接多個(gè)服務(wù)器節(jié)點(diǎn),該些服務(wù)器節(jié) 點(diǎn)用于存儲(chǔ)實(shí)體數(shù)據(jù)并執(zhí)行用戶遞交的對(duì)數(shù)據(jù)庫的操作指令,該些服務(wù)器節(jié)點(diǎn)分為兩類
第一類服務(wù)器節(jié)點(diǎn)非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),每個(gè)非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)只 存儲(chǔ)指定的一部分分布式數(shù)據(jù),各非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)彼此獨(dú)立工作,不直接與其他 非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)交換數(shù)據(jù),該非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)內(nèi)包含以下信息模塊
存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊,該些分布式數(shù)據(jù)架構(gòu)信息由該數(shù) 據(jù)庫應(yīng)用程序服務(wù)器負(fù)責(zé)維護(hù);
存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊;
存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊,虛擬 表本身不存儲(chǔ)數(shù)據(jù),每個(gè)虛擬表下管理多個(gè)數(shù)據(jù)分區(qū)模塊,分布式數(shù)據(jù)的實(shí)體數(shù)據(jù)存儲(chǔ)于 該些數(shù)據(jù)分區(qū)模塊中,存有分布式數(shù)據(jù)的分區(qū)模塊為有效數(shù)據(jù)分區(qū)模塊,未存有分布式數(shù) 據(jù)的分區(qū)為空分區(qū)模塊,非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)所屬的數(shù)據(jù)分區(qū)模塊中至少有一個(gè)是空 分區(qū)模塊,所有對(duì)有效數(shù)據(jù)分區(qū)模塊內(nèi)數(shù)據(jù)的操作指令都由其上的虛擬表來接收并轉(zhuǎn)發(fā)至 各個(gè)存有實(shí)體數(shù)據(jù)的有效數(shù)據(jù)分區(qū)模塊上執(zhí)行;
第二類服務(wù)器節(jié)點(diǎn)滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),其上存儲(chǔ)有全部非分布式數(shù)據(jù)和一 份完整的分布式數(shù)據(jù)的數(shù)據(jù)集,單獨(dú)提供用戶所需的全部數(shù)據(jù),滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)內(nèi) 包括以下模塊
存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊;
存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊;
存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊,該虛 擬表本身不存儲(chǔ)數(shù)據(jù),每個(gè)虛擬表下管理多個(gè)數(shù)據(jù)分區(qū)模塊,各滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)下 的數(shù)據(jù)分區(qū)模塊均為有效數(shù)據(jù)分區(qū)模塊,每個(gè)滿型服務(wù)器節(jié)點(diǎn)上的全部有效數(shù)據(jù)分區(qū)模塊 組成一套完整的分布式數(shù)據(jù)以保證該滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)獨(dú)立為用戶提供完整的數(shù)據(jù)。
根據(jù)本發(fā)明的分布式數(shù)據(jù)庫并行處理系統(tǒng)的一實(shí)施例,該數(shù)據(jù)庫應(yīng)用程序服務(wù)器 監(jiān)控和管理每個(gè)服務(wù)器節(jié)點(diǎn),把整個(gè)數(shù)據(jù)庫集群的最新狀態(tài)和最近變更記錄作為分布式數(shù) 據(jù)庫集群架構(gòu)的信息保存在每個(gè)服務(wù)器節(jié)點(diǎn)上,在收到用戶操作時(shí)根據(jù)用戶操作的特征將 其發(fā)往對(duì)應(yīng)的服務(wù)器節(jié)點(diǎn)如果該用戶操作是針對(duì)某一數(shù)據(jù)分區(qū)模塊的只讀操作,則選擇 任意一個(gè)包含對(duì)應(yīng)有效數(shù)據(jù)分區(qū)模塊的服務(wù)器節(jié)點(diǎn)來執(zhí)行該只讀操作;如果該用戶操作是 針對(duì)某一數(shù)據(jù)分區(qū)模塊的寫操作,則將該寫操作發(fā)往所有存儲(chǔ)對(duì)應(yīng)有效數(shù)據(jù)分區(qū)模塊的服 務(wù)器節(jié)點(diǎn)來執(zhí)行該寫操作;如果該用戶操作是針對(duì)非分布式數(shù)據(jù)的只讀操作,則可選擇任 意一個(gè)服務(wù)器節(jié)點(diǎn)來執(zhí)行該只讀操作;如果該用戶操作是針對(duì)非分布式數(shù)據(jù)的寫操作,則 將該寫操作發(fā)往所有服務(wù)器節(jié)點(diǎn)來執(zhí)行該寫操作。
根據(jù)本發(fā)明的分布式數(shù)據(jù)庫并行處理系統(tǒng)的一實(shí)施例,滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)在 數(shù)據(jù)庫管理員需要縮減數(shù)據(jù)庫集群規(guī)?;蛘邔?shù)據(jù)庫集群合并至單臺(tái)服務(wù)器時(shí)為用戶提 供安全的合并方案,或者為在數(shù)據(jù)庫應(yīng)用程序開發(fā)人員在單個(gè)服務(wù)器節(jié)點(diǎn)上開發(fā)針對(duì)整個(gè) 數(shù)據(jù)庫集群的應(yīng)用程序時(shí)提供便利的調(diào)試環(huán)境。
本發(fā)明對(duì)比現(xiàn)有技術(shù)有如下的有益效果本發(fā)明的技術(shù)方案是采用分布式并行數(shù) 據(jù)庫可控冗余架構(gòu),在數(shù)據(jù)庫系統(tǒng)中使用不同類型的數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)(滿型數(shù)據(jù)庫服務(wù) 器、非滿型數(shù)據(jù)庫服務(wù)器和虛空型數(shù)據(jù)庫服務(wù)器)。數(shù)據(jù)庫集群主要由非滿型數(shù)據(jù)庫服務(wù)器 組成,每個(gè)非滿型服務(wù)器上存儲(chǔ)著數(shù)據(jù)庫集群中的部分?jǐn)?shù)據(jù)來分擔(dān)工作負(fù)載,多個(gè)非滿型 服務(wù)器可以通過虛空型數(shù)據(jù)庫服務(wù)器組成多份完整的數(shù)據(jù)集合,虛空型數(shù)據(jù)庫服務(wù)器從功 能上保證了數(shù)據(jù)集合的完整。滿型數(shù)據(jù)庫服務(wù)器也可以單獨(dú)提供數(shù)據(jù)集合的完整。這樣的 構(gòu)架既可以提供高速同步的數(shù)據(jù)處理性能,又可提高數(shù)據(jù)庫可靠度。虛空型數(shù)據(jù)庫服務(wù)器 選擇數(shù)據(jù)庫集群中的服務(wù)器節(jié)點(diǎn)組成一個(gè)覆蓋全部數(shù)據(jù)的星型網(wǎng)絡(luò),用于檢索數(shù)據(jù)庫集群 中的全部數(shù)據(jù),這樣可以將存儲(chǔ)于多個(gè)數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)上的數(shù)據(jù)分區(qū)動(dòng)態(tài)鏈接起來,提 高數(shù)據(jù)庫處理性能尤其是數(shù)據(jù)讀取操作的性能。
圖1是傳統(tǒng)的普通數(shù)據(jù)庫集群的示意圖。
圖2是本發(fā)明的帶有可控冗余構(gòu)架的分布式數(shù)據(jù)庫并行處理系統(tǒng)的第一實(shí)施例 的架構(gòu)全局視圖。
圖3是本發(fā)明的帶有可控冗余構(gòu)架的分布式數(shù)據(jù)庫并行處理系統(tǒng)的第二實(shí)施例 的架構(gòu)全局視圖。
圖4是本發(fā)明的帶有可控冗余構(gòu)架的分布式數(shù)據(jù)庫并行處理系統(tǒng)的三類服務(wù)器 節(jié)點(diǎn)的真實(shí)數(shù)據(jù)分布示意圖。
圖5是本發(fā)明的帶有可控冗余構(gòu)架的分布式數(shù)據(jù)庫并行處理系統(tǒng)中用戶及數(shù)據(jù) 庫程序員可見的數(shù)據(jù)視圖。
圖6是本發(fā)明的帶有可控冗余構(gòu)架的分布式數(shù)據(jù)庫并行處理系統(tǒng)的構(gòu)造方法的流程圖。
圖7是本發(fā)明的系統(tǒng)構(gòu)造方法中的滿型數(shù)據(jù)庫服務(wù)器的構(gòu)造示意圖。
圖8是本發(fā)明的系統(tǒng)構(gòu)造方法中的從工作節(jié)點(diǎn)向新服務(wù)器節(jié)點(diǎn)復(fù)制同步數(shù)據(jù)的 示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的描述。
分布式數(shù)據(jù)庫并行處理系統(tǒng)的第一實(shí)施例
圖2示出了本發(fā)明的帶有可控冗余構(gòu)架的分布式數(shù)據(jù)庫并行處理系統(tǒng)的第一實(shí) 施例。請(qǐng)參見圖2,本實(shí)施例的分布式數(shù)據(jù)庫并行處理系統(tǒng)包括數(shù)據(jù)庫應(yīng)用程序服務(wù)器10 以及數(shù)據(jù)庫應(yīng)用程序服務(wù)器10連接的多個(gè)服務(wù)器節(jié)點(diǎn)。本實(shí)施例的分布式數(shù)據(jù)庫并行處 理系統(tǒng)通過一個(gè)獨(dú)特的動(dòng)態(tài)可控冗余架構(gòu)將數(shù)據(jù)庫內(nèi)的數(shù)據(jù)分布到由多個(gè)服務(wù)器節(jié)點(diǎn)組 成的數(shù)據(jù)庫集群當(dāng)中。數(shù)據(jù)庫中的數(shù)據(jù)可以根據(jù)工作負(fù)載的特征劃分為兩類分布式數(shù)據(jù) 和非分布式數(shù)據(jù)。分布式數(shù)據(jù)的特點(diǎn)是此類數(shù)據(jù)往往只在個(gè)別數(shù)據(jù)操作中被訪問或更改, 例如某個(gè)銀行儲(chǔ)戶的某筆存款記錄。非分布式數(shù)據(jù)的特點(diǎn)是此類數(shù)據(jù)往往被大量的操作所 查詢和使用,例如銀行系統(tǒng)中某類賬戶的存款利息。在動(dòng)態(tài)可控冗余架構(gòu)下,非分布式數(shù)據(jù) 存儲(chǔ)于普通數(shù)據(jù)表內(nèi)并被同步復(fù)制到每個(gè)服務(wù)器節(jié)點(diǎn)上,以便于各個(gè)數(shù)據(jù)庫節(jié)點(diǎn)可以從本 地存儲(chǔ)系統(tǒng)內(nèi)查詢到此類數(shù)據(jù)而無需依賴其它節(jié)點(diǎn)提供此類信息;分布式數(shù)據(jù)存儲(chǔ)于按照 數(shù)據(jù)庫管理員指定的模式分割至多個(gè)數(shù)據(jù)分區(qū)內(nèi),在這些數(shù)據(jù)分區(qū)之上建立虛擬表來代表 和管理其所屬的數(shù)據(jù)分區(qū)和分區(qū)內(nèi)的數(shù)據(jù)。這種虛擬表和數(shù)據(jù)分區(qū)的架構(gòu)被復(fù)制到每個(gè)服 務(wù)器節(jié)點(diǎn)上,而這些分區(qū)內(nèi)的數(shù)據(jù)可以按照數(shù)據(jù)庫管理員的規(guī)劃在多個(gè)服務(wù)器節(jié)點(diǎn)內(nèi)進(jìn)行 分配和同步復(fù)制每個(gè)服務(wù)器節(jié)點(diǎn)只負(fù)責(zé)存儲(chǔ)和管理其指定的數(shù)據(jù)分區(qū)。在這種獨(dú)特的動(dòng) 態(tài)可控冗余架構(gòu)管理下,數(shù)據(jù)庫集群中的服務(wù)器節(jié)點(diǎn)可以提供多個(gè)完整的數(shù)據(jù)備份以增強(qiáng) 數(shù)據(jù)庫的可靠度,整個(gè)系統(tǒng)的工作負(fù)載可以被分配到各個(gè)服務(wù)器節(jié)點(diǎn)上以提高數(shù)據(jù)庫系統(tǒng) 的工作吞吐量。本實(shí)施例中的服務(wù)器節(jié)點(diǎn)用于存儲(chǔ)數(shù)據(jù)并執(zhí)行數(shù)據(jù)指令操作,本實(shí)施例中 的服務(wù)器節(jié)點(diǎn)按照其上存儲(chǔ)的分布式數(shù)據(jù)的情況分為兩種滿型數(shù)據(jù)庫服務(wù)器12和非滿 型數(shù)據(jù)庫服務(wù)器14。值得注意的是,全部服務(wù)器節(jié)點(diǎn)上都存有同樣的數(shù)據(jù)分區(qū)模塊構(gòu)架,但 不是每個(gè)數(shù)據(jù)分區(qū)模塊內(nèi)部都存有具體的實(shí)體數(shù)據(jù)。因?yàn)榇藢?shí)施例中沒有包含虛空型數(shù)據(jù) 庫服務(wù)器,所以滿型數(shù)據(jù)庫服務(wù)器12在本實(shí)施例中的首要用途是提供數(shù)據(jù)的完整。
在本實(shí)施例中,用戶端(即圖2中的客戶1 客戶η)和網(wǎng)頁服務(wù)器建立數(shù)據(jù)連接, 網(wǎng)頁服務(wù)器和數(shù)據(jù)庫應(yīng)用程序服務(wù)器10建立數(shù)據(jù)連接。用戶端和網(wǎng)頁服務(wù)器之間,以及網(wǎng) 頁服務(wù)器和數(shù)據(jù)庫應(yīng)用程序服務(wù)器10之間傳輸用戶端的查詢和寫操作請(qǐng)求和服務(wù)器反饋 fn息ο
數(shù)據(jù)庫應(yīng)用程序服務(wù)器10負(fù)責(zé)維護(hù)整個(gè)數(shù)據(jù)庫集群上的動(dòng)態(tài)可控冗余度的架構(gòu) 信息和數(shù)據(jù)分布信息,系統(tǒng)管理員可以為該應(yīng)用程序服務(wù)器配置一個(gè)后備應(yīng)用程序服務(wù) 器,在數(shù)據(jù)庫應(yīng)用程序服務(wù)器10出現(xiàn)故障時(shí)將后備應(yīng)用程序服務(wù)器投入使用(其中各服務(wù) 器節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊可以用來幫助后備應(yīng)用程序服務(wù) 器準(zhǔn)確了解集群內(nèi)的最新數(shù)據(jù)分布情況和各節(jié)點(diǎn)的工作狀態(tài))。數(shù)據(jù)庫應(yīng)用程序服務(wù)器10 的功能是監(jiān)控下面的每一個(gè)數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)的狀態(tài),把整個(gè)數(shù)據(jù)庫集群的最新狀態(tài)和最近變更記錄作為分布式數(shù)據(jù)架構(gòu)的信息保存在每一個(gè)服務(wù)器節(jié)點(diǎn)上,并在收到用戶端操 作指令(例如查詢和寫操作請(qǐng)求)時(shí)根據(jù)用戶端操作的特征向下面的服務(wù)器節(jié)點(diǎn)分配這一 操作,以及接收服務(wù)器節(jié)點(diǎn)返回的處理結(jié)果。至于如何將用戶端的查詢和寫操作請(qǐng)求分配 到對(duì)應(yīng)的服務(wù)器節(jié)點(diǎn),將在描述完滿型數(shù)據(jù)庫服務(wù)器12和非滿型數(shù)據(jù)庫服務(wù)器14的結(jié)構(gòu) 之后再作詳細(xì)說明。
滿型數(shù)據(jù)庫服務(wù)器12上保存了整個(gè)數(shù)據(jù)庫集群中的全部非分布式數(shù)據(jù)和一份完 整的分布式數(shù)據(jù)的數(shù)據(jù)集,可以單獨(dú)提供用戶所需的全部數(shù)據(jù)服務(wù)功能。滿型數(shù)據(jù)庫服務(wù) 器節(jié)點(diǎn)12進(jìn)一步包括存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊120、存儲(chǔ)數(shù)據(jù)庫集群 中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊121、存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及 其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊122、及其下屬的三個(gè)數(shù)據(jù)分區(qū)模塊123 125(在圖2的滿型 數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)12中示為1號(hào)數(shù)據(jù)分區(qū)模塊123、2號(hào)數(shù)據(jù)分區(qū)模塊124、3號(hào)數(shù)據(jù)分區(qū) 模塊125,當(dāng)然本實(shí)施例僅為示例,實(shí)際上數(shù)據(jù)分區(qū)模塊的數(shù)量可以有更多個(gè))。其中這三 個(gè)數(shù)據(jù)分區(qū)模塊123 125與代表分布式數(shù)據(jù)的虛擬表模塊122建立從屬關(guān)系,每個(gè)數(shù)據(jù) 分區(qū)都僅從屬于一個(gè)預(yù)先為其指定的虛擬表,用戶只對(duì)虛擬表提交操作指令,該虛擬表根 據(jù)預(yù)先定義的數(shù)據(jù)分區(qū)算法得出正確執(zhí)行用戶操作指令所需訪問的數(shù)據(jù)分區(qū)并將這些操 作指令傳遞到這些數(shù)據(jù)分區(qū)。虛擬表本身不存儲(chǔ)數(shù)據(jù),這三個(gè)數(shù)據(jù)分區(qū)模塊123 125是 由虛擬表管理的。存儲(chǔ)數(shù)據(jù)庫集群中的分布式數(shù)據(jù)架構(gòu)信息的模塊120和存儲(chǔ)非分布式數(shù) 據(jù)的普通數(shù)據(jù)表的模塊121在每個(gè)服務(wù)器節(jié)點(diǎn)中都實(shí)體存在且都是相同的,這些技術(shù)均是 現(xiàn)有技術(shù),在此不再贅述。之所以要區(qū)分非分布式數(shù)據(jù)和分布式數(shù)據(jù),是因?yàn)樵谶M(jìn)行數(shù)據(jù) 分區(qū)設(shè)計(jì)時(shí),內(nèi)容更新頻繁的數(shù)據(jù)表都可以通過被分割并分布到多個(gè)節(jié)點(diǎn)上以降低寫操作 在單個(gè)服務(wù)器節(jié)點(diǎn)上可能引起的負(fù)載瓶頸。而其余的數(shù)據(jù)表因?yàn)閿?shù)據(jù)更新頻率低,不占用 過多的寫操作資源,可以完整地復(fù)制到每個(gè)節(jié)點(diǎn)上,以分擔(dān)對(duì)這些數(shù)據(jù)表的只讀操作負(fù)載。 本實(shí)施例的特點(diǎn)在于代表分布式區(qū)數(shù)據(jù)的虛擬表的模塊122和其所管轄的三個(gè)數(shù)據(jù)分區(qū) 模塊123 125。虛擬表本身不存儲(chǔ)實(shí)體數(shù)據(jù),而是專門負(fù)責(zé)管理其下屬的數(shù)據(jù)分區(qū)模塊 123 125,通過添加trigger或利用現(xiàn)有數(shù)據(jù)庫分區(qū)功能可使得所有對(duì)其下屬數(shù)據(jù)塊分區(qū) 的訪問都通過這個(gè)虛擬表來進(jìn)行,具體的讀寫操作在該虛擬表所管理的底層的數(shù)據(jù)塊分區(qū) 上進(jìn)行。
所謂滿型數(shù)據(jù)塊服務(wù)器12,就是這個(gè)服務(wù)器節(jié)點(diǎn)上存儲(chǔ)有一套完整的分布式數(shù)據(jù) 全集,體現(xiàn)在數(shù)據(jù)分區(qū)中就是這三個(gè)數(shù)據(jù)分區(qū)模塊123 125都存有有效數(shù)據(jù)(亦即,每個(gè) 數(shù)據(jù)分區(qū)模塊都是有效數(shù)據(jù)分區(qū)模塊,都存有分配到該數(shù)據(jù)分區(qū)的實(shí)體數(shù)據(jù)),它們組合在 一起覆蓋了數(shù)據(jù)庫集群向用戶提供的全部數(shù)據(jù)。這樣的滿型數(shù)據(jù)庫服務(wù)器12可以像普通 單機(jī)數(shù)據(jù)庫服務(wù)器一樣獨(dú)立運(yùn)行。
正如前面所述,滿型數(shù)據(jù)庫服務(wù)器12除了可應(yīng)用于系統(tǒng)實(shí)際使用過程中,也可以 由初始單機(jī)版數(shù)據(jù)庫服務(wù)器(或者異步復(fù)制技術(shù)中的主服務(wù)器)向本實(shí)施例的運(yùn)用“分布 式并行數(shù)據(jù)庫可控冗余架構(gòu)”的數(shù)據(jù)庫集群轉(zhuǎn)變過程中出現(xiàn)。構(gòu)造滿型數(shù)據(jù)庫服務(wù)器12的 具體過程將在后面系統(tǒng)構(gòu)造方法的實(shí)施例中說明,這里僅作簡單說明。當(dāng)數(shù)據(jù)庫管理員在 主服務(wù)器(或單機(jī)版數(shù)據(jù)庫服務(wù)器)上選定需要分布到多個(gè)服務(wù)器上的數(shù)據(jù)表后,首先在 主服務(wù)器內(nèi)部建立數(shù)據(jù)分區(qū)構(gòu)架,將目標(biāo)數(shù)據(jù)放入這些數(shù)據(jù)分區(qū)并在這些數(shù)據(jù)分區(qū)上建立 虛擬表以隱藏底層數(shù)據(jù)分區(qū)后,主服務(wù)器即成為一個(gè)滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)。滿型數(shù)據(jù)庫服務(wù)器12主要用于導(dǎo)入新的非滿型數(shù)據(jù)庫服務(wù)器時(shí)的數(shù)據(jù)同步復(fù)制過程。當(dāng)一個(gè)集群中 的非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)上保存的數(shù)據(jù)已經(jīng)能夠組合出一套完整的數(shù)據(jù)之后,滿型數(shù)據(jù) 庫服務(wù)器就不再是必需的,可以清空其上一部分?jǐn)?shù)據(jù)分區(qū)以使其變?yōu)橐粋€(gè)非滿型數(shù)據(jù)庫服 務(wù)器,這樣可以防止當(dāng)工作負(fù)載過大時(shí)該滿型節(jié)點(diǎn)因?yàn)橐幚磉^多的寫操作而變成整個(gè)集 群的瓶頸。至于滿型數(shù)據(jù)庫服務(wù)器所能提供的數(shù)據(jù)完整性功能,可以由對(duì)系統(tǒng)硬件要求較 低的虛空型數(shù)據(jù)庫服務(wù)器來替代實(shí)現(xiàn)(這種實(shí)現(xiàn)方案可以參見下面的第二實(shí)施例)。
除了出現(xiàn)在從上述的初始單機(jī)版數(shù)據(jù)庫服務(wù)器(或者現(xiàn)有的異步復(fù)制技術(shù)中的 主服務(wù)器)向本實(shí)施例中使用“分布式并行數(shù)據(jù)庫可控冗余架構(gòu)”的數(shù)據(jù)庫集群轉(zhuǎn)變過程 中,滿型數(shù)據(jù)庫服務(wù)器的另外一個(gè)用途是應(yīng)用于數(shù)據(jù)庫應(yīng)用程序的開發(fā)過程。程序員可以 在一臺(tái)滿型數(shù)據(jù)庫服務(wù)器上開發(fā)調(diào)試程序,在滿型數(shù)據(jù)庫服務(wù)器上開發(fā)完畢的應(yīng)用程序可 以不加任何修改直接應(yīng)用于具有多個(gè)服務(wù)器節(jié)點(diǎn)的大規(guī)模的數(shù)據(jù)庫集群。此外,滿型數(shù)據(jù) 庫服務(wù)器還可以在數(shù)據(jù)庫管理員需要縮減數(shù)據(jù)庫集群規(guī)?;蛘邔?shù)據(jù)庫集群合并至單臺(tái) 服務(wù)器時(shí)為用戶提供安全的合并方案。同樣,由非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)構(gòu)造滿型數(shù)據(jù)庫 服務(wù)器節(jié)點(diǎn)的過程也很簡單,只需利用集群中的多個(gè)節(jié)點(diǎn)上存儲(chǔ)的有效數(shù)據(jù)分區(qū)將一個(gè)選 定的非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)上的空數(shù)據(jù)分區(qū)全部替換為有效數(shù)據(jù)分區(qū)即可。
非滿型數(shù)據(jù)庫服務(wù)器是構(gòu)成本實(shí)施例的并行處理系統(tǒng)的主體,每個(gè)非滿型數(shù)據(jù)庫 服務(wù)器只存儲(chǔ)數(shù)據(jù)庫集群中由管理員指定的部分分布式數(shù)據(jù),各非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn) 彼此獨(dú)立工作,不直接與其他的非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)交換數(shù)據(jù)。這種工作模式避免了 非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)之間的相互依賴,也減少了大量數(shù)據(jù)在網(wǎng)絡(luò)上傳遞造成的堵塞和 延遲。在本實(shí)施例中為說明方便只圖示了 2個(gè),下面的說明以其中的非滿型數(shù)據(jù)庫服務(wù)器 14為例。從結(jié)構(gòu)上看,非滿型數(shù)據(jù)庫服務(wù)器14和滿型數(shù)據(jù)庫服務(wù)器12相似,不同之處在于 滿型數(shù)據(jù)庫服務(wù)器12存儲(chǔ)了數(shù)據(jù)庫集群中的全部數(shù)據(jù),而非滿型數(shù)據(jù)庫服務(wù)器14只存儲(chǔ) 集群中的部分?jǐn)?shù)據(jù),其節(jié)點(diǎn)內(nèi)至少有一個(gè)數(shù)據(jù)分區(qū)模塊是空分區(qū)模塊(即,不存儲(chǔ)任何有 效數(shù)據(jù)的空數(shù)據(jù)分區(qū)),在本實(shí)施例的非滿型數(shù)據(jù)庫服務(wù)器14中,其1號(hào)數(shù)據(jù)分區(qū)模塊143 為空分區(qū)模塊,而2號(hào)數(shù)據(jù)分區(qū)模塊144和3號(hào)數(shù)據(jù)分區(qū)模塊145均為有效數(shù)據(jù)分區(qū)模塊 (即,存儲(chǔ)有實(shí)體數(shù)據(jù))。各非滿型數(shù)據(jù)庫服務(wù)器上存儲(chǔ)的有效數(shù)據(jù)分區(qū)可以由數(shù)據(jù)庫管理 員決定,但是當(dāng)系統(tǒng)中不存在滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)時(shí),所有的非滿型數(shù)據(jù)庫服務(wù)器14組 合在一起必須要保證能夠提供覆蓋了數(shù)據(jù)庫集群所需的全部分布式數(shù)據(jù)。在本實(shí)施例中, 非滿型數(shù)據(jù)庫服務(wù)器14包含有存儲(chǔ)數(shù)據(jù)庫集群中的分布式數(shù)據(jù)架構(gòu)信息的模塊140、存 儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊141、存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù) 據(jù)及其下屬數(shù)據(jù)分區(qū)構(gòu)架的虛擬表模塊142、及其下屬的三個(gè)數(shù)據(jù)分區(qū)模塊143 145(在 圖2的非滿型數(shù)據(jù)庫服務(wù)器14中示為1號(hào)數(shù)據(jù)分區(qū)模塊143、2號(hào)數(shù)據(jù)分區(qū)模塊144、3號(hào) 數(shù)據(jù)分區(qū)模塊145,本實(shí)施例僅為示例,實(shí)際上數(shù)據(jù)分區(qū)模塊的數(shù)量可以有更多個(gè))。其中 這三個(gè)數(shù)據(jù)分區(qū)模塊143 145從屬于代表分布式數(shù)據(jù)的虛擬表的模塊142,虛擬表向其下 屬的數(shù)據(jù)分區(qū)傳遞用戶提交的操作指令并接收數(shù)據(jù)分區(qū)返回的處理結(jié)果。虛擬表本身不存 儲(chǔ)數(shù)據(jù),這三個(gè)數(shù)據(jù)分區(qū)模塊143 145是由虛擬表管理的。存儲(chǔ)數(shù)據(jù)庫集群中的分布式 數(shù)據(jù)架構(gòu)信息的模塊140和存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊141 (包 括未分區(qū)的普通表及其表內(nèi)的數(shù)據(jù))在每個(gè)服務(wù)器節(jié)點(diǎn)中都實(shí)體存在且都是相同的,這些 技術(shù)均是現(xiàn)有技術(shù),在此不再贅述。本實(shí)施例的特點(diǎn)在于代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊142和這三個(gè)數(shù)據(jù)分區(qū)模塊143 145。代表分布式數(shù)據(jù)的虛擬表 及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊142建立在數(shù)據(jù)分區(qū)模塊143 145之上,通過trigger或 利用現(xiàn)有數(shù)據(jù)庫分區(qū)功能可使得所有對(duì)數(shù)據(jù)的訪問都通過這個(gè)虛擬表來進(jìn)行,具體的讀寫 操作在該虛擬表所管理的數(shù)據(jù)分區(qū)上進(jìn)行。每個(gè)非滿型數(shù)據(jù)庫服務(wù)器只需處理與其所存儲(chǔ) 的數(shù)據(jù)分區(qū)相關(guān)的操作,不依賴于其他任何服務(wù)器節(jié)點(diǎn)。當(dāng)新的非滿型數(shù)據(jù)庫服務(wù)器加入 數(shù)據(jù)庫服務(wù)器集群時(shí),其上所存儲(chǔ)的數(shù)據(jù)分區(qū)模塊可以由一個(gè)滿型數(shù)據(jù)庫服務(wù)器或者其他 已經(jīng)獲得有效數(shù)據(jù)的非滿型數(shù)據(jù)庫服務(wù)器以數(shù)據(jù)同步的方式獲得。在第一個(gè)節(jié)點(diǎn)(通常是 一個(gè)滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn))投入運(yùn)行后,數(shù)據(jù)庫管理人員可以繼續(xù)添加新的服務(wù)器節(jié)點(diǎn) 并從之前產(chǎn)生的滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)向新的服務(wù)器節(jié)點(diǎn)復(fù)制數(shù)據(jù),直至新節(jié)點(diǎn)上指定的 數(shù)據(jù)分區(qū)模塊與集群中已實(shí)現(xiàn)同步的工作節(jié)點(diǎn)完成數(shù)據(jù)同步,此后新節(jié)點(diǎn)即可投入使用, 而無需繼續(xù)從其他節(jié)點(diǎn)復(fù)制數(shù)據(jù)。這種數(shù)據(jù)同步方式把嚴(yán)重消耗系統(tǒng)資源的數(shù)據(jù)同步限制 在節(jié)點(diǎn)投入使用前的短暫的數(shù)據(jù)同步過程內(nèi),而不是像傳統(tǒng)的“主服務(wù)器到輔助服務(wù)器”的 異步復(fù)制模式那樣在集群正常工作期間必須持續(xù)進(jìn)行,為整個(gè)集群節(jié)省了寶貴的系統(tǒng)資源 來處理更多的客戶操作指令。
再回到數(shù)據(jù)庫應(yīng)用程序服務(wù)器10來觀察如何將用戶端的查詢和寫操作請(qǐng)求分配 到對(duì)應(yīng)的服務(wù)器節(jié)點(diǎn),這個(gè)過程是根據(jù)操作的特征和相關(guān)服務(wù)器節(jié)點(diǎn)中數(shù)據(jù)分區(qū)的特征來 決定的。具體而言,如果該用戶操作是針對(duì)某一數(shù)據(jù)分區(qū)模塊的只讀操作,則選擇任意一個(gè) 包含對(duì)應(yīng)有效數(shù)據(jù)分區(qū)模塊的服務(wù)器節(jié)點(diǎn)來執(zhí)行該只讀操作;如果該用戶操作是針對(duì)某一 數(shù)據(jù)分區(qū)模塊的寫操作(例如插入記錄、刪除記錄或更新記錄),則將該寫操作發(fā)往所有存 儲(chǔ)對(duì)應(yīng)有效數(shù)據(jù)分區(qū)模塊的服務(wù)器節(jié)點(diǎn)來執(zhí)行該寫操作;如果該用戶操作是針對(duì)非分布式 數(shù)據(jù)的只讀操作,則可選擇任意一個(gè)服務(wù)器節(jié)點(diǎn)來執(zhí)行該只讀操作;如果該用戶操作是針 對(duì)非分布式數(shù)據(jù)的寫操作,則將該寫操作發(fā)往所有服務(wù)器節(jié)點(diǎn)來執(zhí)行該寫操作。
基于圖2所示的分布式數(shù)據(jù)庫并行處理系統(tǒng)所帶來的處理性能提升和可靠度提 升,可以通過下面一個(gè)具體示例來說明。假設(shè)本實(shí)施例的系統(tǒng)集群中包括了 100臺(tái)非滿型 數(shù)據(jù)庫服務(wù)器,同時(shí)假設(shè)所有的用戶指令都只訪問至多一個(gè)數(shù)據(jù)分區(qū)(此種情況下不需要 滿型數(shù)據(jù)庫服務(wù)器),這100臺(tái)非滿型數(shù)據(jù)庫服務(wù)器組成了一個(gè)數(shù)據(jù)庫集群,集群中的全部 數(shù)據(jù)被劃分為100份。服務(wù)器1負(fù)責(zé)維護(hù)數(shù)據(jù)塊1和數(shù)據(jù)塊2,服務(wù)器2負(fù)責(zé)維護(hù)數(shù)據(jù)塊 2和數(shù)據(jù)塊3,……,服務(wù)器99負(fù)責(zé)維護(hù)數(shù)據(jù)塊99和數(shù)據(jù)塊100,服務(wù)器100負(fù)責(zé)維護(hù)數(shù) 據(jù)塊100和數(shù)據(jù)塊1。一方面,在這樣的分布式并行數(shù)據(jù)庫可控冗余架構(gòu)下,任何一臺(tái)服務(wù) 器出現(xiàn)故障都不會(huì)影響整個(gè)數(shù)據(jù)庫集群的正常工作。在最好的情況下,即使集群中一半的 服務(wù)器停止工作(例如將所有的偶數(shù)號(hào)服務(wù)器停機(jī)進(jìn)行硬件升級(jí)或系統(tǒng)維護(hù)),剩余的服 務(wù)器仍然可以不間斷地提供全部實(shí)時(shí)有效的數(shù)據(jù)和完整的服務(wù)。另一方面,在這樣的分布 式并行數(shù)據(jù)庫可控冗余架構(gòu)下,每臺(tái)服務(wù)器只需要處理原來單臺(tái)服務(wù)器的2%的寫操作負(fù) 荷,以及原來單臺(tái)服務(wù)器的的只讀操作負(fù)荷(因?yàn)樗袛?shù)據(jù)均為實(shí)時(shí)數(shù)據(jù),對(duì)數(shù)據(jù)的查 詢操作只需要由任一存儲(chǔ)該有效數(shù)據(jù)分區(qū)的服務(wù)器處理即可)。與使用傳統(tǒng)的Two Phase Commit協(xié)議的普通同步復(fù)制技術(shù)相比,分布式并行數(shù)據(jù)庫可控冗余架構(gòu)不需要在每臺(tái)服務(wù) 器上保留整套完整的數(shù)據(jù),使得對(duì)數(shù)據(jù)庫進(jìn)行的寫操作(插入、刪除和修改指令)不必在全 部節(jié)點(diǎn)上都同步執(zhí)行,這些寫操作只需要在保存有相應(yīng)數(shù)據(jù)塊實(shí)體數(shù)據(jù)的非滿型數(shù)據(jù)庫服 務(wù)器上執(zhí)行,整個(gè)系統(tǒng)的性能不再由某個(gè)主服務(wù)器限定,消除了數(shù)據(jù)庫集群的數(shù)據(jù)處理速度瓶頸。
分布式數(shù)據(jù)庫并行處理系統(tǒng)的第二實(shí)施例
圖3示出了本發(fā)明帶有可控冗余構(gòu)架的分布式數(shù)據(jù)庫并行處理系統(tǒng)的第二實(shí)施 例的結(jié)構(gòu)。本實(shí)施例的分布式數(shù)據(jù)庫并行處理系統(tǒng)包括數(shù)據(jù)庫應(yīng)用程序服務(wù)器20以及 多個(gè)服務(wù)器節(jié)點(diǎn)。本實(shí)施例的分布式數(shù)據(jù)庫并行處理系統(tǒng)通過一個(gè)獨(dú)特的動(dòng)態(tài)可控冗余架 構(gòu)將數(shù)據(jù)庫內(nèi)的數(shù)據(jù)分布到由多個(gè)服務(wù)器節(jié)點(diǎn)組成的數(shù)據(jù)庫集群當(dāng)中。數(shù)據(jù)庫中的數(shù)據(jù)可 以根據(jù)工作負(fù)載的特征劃分為兩類分布式數(shù)據(jù)和非分布式數(shù)據(jù)。分布式數(shù)據(jù)的特點(diǎn)是此 類數(shù)據(jù)往往只在個(gè)別數(shù)據(jù)操作中被訪問或更改,例如某個(gè)銀行儲(chǔ)戶的某筆存款記錄。非分 布式數(shù)據(jù)的特點(diǎn)是此類數(shù)據(jù)往往被大量的操作所查詢和使用,例如銀行系統(tǒng)中某類賬戶的 存款利息。在動(dòng)態(tài)可控冗余架構(gòu)下,非分布式數(shù)據(jù)存儲(chǔ)于普通數(shù)據(jù)表內(nèi)并被同步復(fù)制到每 個(gè)服務(wù)器節(jié)點(diǎn)上,以便于各個(gè)數(shù)據(jù)庫節(jié)點(diǎn)可以從本地存儲(chǔ)系統(tǒng)內(nèi)查詢到此類數(shù)據(jù)而無需依 賴其它節(jié)點(diǎn)提供此類信息;分布式數(shù)據(jù)存儲(chǔ)于按照數(shù)據(jù)庫管理員指定的模式分割至多個(gè)數(shù) 據(jù)分區(qū)內(nèi),在這些數(shù)據(jù)分區(qū)之上建立虛擬表來代表和管理其所屬的數(shù)據(jù)分區(qū)和分區(qū)內(nèi)的數(shù) 據(jù)。這種虛擬表和數(shù)據(jù)分區(qū)的架構(gòu)被復(fù)制到每個(gè)服務(wù)器節(jié)點(diǎn)上,而這些分區(qū)內(nèi)的數(shù)據(jù)可以 按照數(shù)據(jù)庫管理員的規(guī)劃在多個(gè)服務(wù)器節(jié)點(diǎn)內(nèi)進(jìn)行分配和同步復(fù)制每個(gè)服務(wù)器節(jié)點(diǎn)只負(fù) 責(zé)存儲(chǔ)和管理其指定的數(shù)據(jù)分區(qū)。在這種獨(dú)特的動(dòng)態(tài)可控冗余架構(gòu)管理下,數(shù)據(jù)庫集群中 的服務(wù)器節(jié)點(diǎn)可以提供多個(gè)完整的數(shù)據(jù)備份以增強(qiáng)數(shù)據(jù)庫的可靠度,整個(gè)系統(tǒng)的工作負(fù)載 可以被分配到各個(gè)服務(wù)器節(jié)點(diǎn)上以提高數(shù)據(jù)庫系統(tǒng)的工作吞吐量。本實(shí)施例中的服務(wù)器節(jié) 點(diǎn)按照其上存儲(chǔ)的分布式數(shù)據(jù)的情況分為兩種非滿型數(shù)據(jù)庫服務(wù)器M和虛空型數(shù)據(jù)庫 服務(wù)器26。值得注意的是,全部服務(wù)器節(jié)點(diǎn)上都存有同樣的數(shù)據(jù)分區(qū)構(gòu)架(包括代表分布 式數(shù)據(jù)的虛擬表和其下屬的數(shù)據(jù)分區(qū)),但不是每個(gè)數(shù)據(jù)分區(qū)模塊內(nèi)部都存有具體的實(shí)體 數(shù)據(jù)。由于虛空型數(shù)據(jù)庫服務(wù)器沈的存在,滿型數(shù)據(jù)庫服務(wù)器在本實(shí)施例中不必存在,以 免成為整個(gè)集群的性能瓶頸。滿型數(shù)據(jù)庫服務(wù)器通常只應(yīng)在建立本實(shí)施例的數(shù)據(jù)庫集群的 初始階段使用或者是為數(shù)據(jù)庫應(yīng)用程序開發(fā)人員在單個(gè)服務(wù)器節(jié)點(diǎn)上開發(fā)程序而使用的, 或者是在數(shù)據(jù)庫管理員需要縮減數(shù)據(jù)庫集群規(guī)?;蛘邔?shù)據(jù)庫集群合并至單臺(tái)服務(wù)器時(shí) 為用戶提供安全的合并方案。包含了滿型數(shù)據(jù)庫服務(wù)器的集群模式適用于系統(tǒng)剛剛開始由 單機(jī)模式向包含有多個(gè)服務(wù)器節(jié)點(diǎn)的小規(guī)模數(shù)據(jù)庫集群過渡期,此時(shí)數(shù)據(jù)規(guī)模和系統(tǒng)工作 負(fù)載開始接近單一服務(wù)器的性能極限,引入滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)和非滿型數(shù)據(jù)庫服務(wù)器 節(jié)點(diǎn)可以將工作負(fù)載分配到多個(gè)節(jié)點(diǎn)上,此時(shí)還不必添加虛空型服務(wù)器,以便控制數(shù)據(jù)庫 集群規(guī)模和管理的復(fù)雜度。但在數(shù)據(jù)庫集群增長到一定規(guī)模后應(yīng)盡量避免使用滿型數(shù)據(jù)庫 服務(wù)器節(jié)點(diǎn)以免其成為整個(gè)數(shù)據(jù)庫服務(wù)器集群的性能瓶頸,此時(shí)通常是采用虛空型服務(wù)器 和非滿型數(shù)據(jù)庫服務(wù)器結(jié)合的數(shù)據(jù)庫集群模式。
在本實(shí)施例中,用戶端(即圖3中的客戶1 客戶η)和網(wǎng)頁服務(wù)器建立數(shù)據(jù)連接, 網(wǎng)頁服務(wù)器和數(shù)據(jù)庫應(yīng)用程序服務(wù)器20建立數(shù)據(jù)連接。用戶端和網(wǎng)頁服務(wù)器之間,以及網(wǎng) 頁服務(wù)器和數(shù)據(jù)庫應(yīng)用程序服務(wù)器20之間傳輸用戶端的查詢和寫操作請(qǐng)求以及服務(wù)器反 饋信息。數(shù)據(jù)庫應(yīng)用程序服務(wù)器20與多個(gè)數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)建立數(shù)據(jù)連接,這些數(shù)據(jù)庫服 務(wù)器節(jié)點(diǎn)用于存儲(chǔ)數(shù)據(jù)并執(zhí)行數(shù)據(jù)指令操作。
數(shù)據(jù)庫應(yīng)用程序服務(wù)器20掌握整個(gè)數(shù)據(jù)庫集群上動(dòng)態(tài)可控冗余度的分布式數(shù)據(jù) 庫架構(gòu)的信息和數(shù)據(jù)分布信息,系統(tǒng)管理員可以為其配置一個(gè)后備應(yīng)用程序服務(wù)器,在數(shù)據(jù)庫應(yīng)用程序服務(wù)器20出現(xiàn)故障時(shí)作為備用的應(yīng)用程序服務(wù)器投入使用(其中各服務(wù)器 節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊可以用來幫助后備應(yīng)用程序服務(wù)器 準(zhǔn)確了解集群內(nèi)的最新數(shù)據(jù)分布情況和各節(jié)點(diǎn)的工作狀態(tài))。數(shù)據(jù)庫應(yīng)用程序服務(wù)器20的 功能是監(jiān)控下面的每一個(gè)服務(wù)器節(jié)點(diǎn)的狀態(tài),把整個(gè)數(shù)據(jù)庫集群的最新狀態(tài)和最近變更 記錄作為分布式數(shù)據(jù)架構(gòu)的信息保存在每一個(gè)服務(wù)器節(jié)點(diǎn)上,并在收到用戶操作指令(例 如查詢和寫操作請(qǐng)求)后根據(jù)用戶操作指令的特征向下面對(duì)應(yīng)的服務(wù)器節(jié)點(diǎn)分配這一操 作,以及接收數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)返回的處理結(jié)果。
非滿型數(shù)據(jù)庫服務(wù)器是構(gòu)成本實(shí)施例的并行數(shù)據(jù)庫服務(wù)器集群系統(tǒng)的主體,在本 實(shí)施例中為說明方便只圖示了 2個(gè),實(shí)際應(yīng)用中非滿型數(shù)據(jù)庫服務(wù)器的數(shù)量可以有更多 個(gè),下面的說明以圖3中的非滿型數(shù)據(jù)庫服務(wù)器M為例。非滿型數(shù)據(jù)庫服務(wù)器只存儲(chǔ)數(shù)據(jù) 庫集群中由管理員指定的部分?jǐn)?shù)據(jù),各個(gè)非滿型數(shù)據(jù)庫服務(wù)器彼此獨(dú)立工作,不直接與其 他的非滿型數(shù)據(jù)庫服務(wù)器交換數(shù)據(jù)。從結(jié)構(gòu)上看,非滿型數(shù)據(jù)庫服務(wù)器M和滿型數(shù)據(jù)庫服 務(wù)器相似,不同之處在于滿型數(shù)據(jù)庫服務(wù)器存儲(chǔ)的數(shù)據(jù)可以覆蓋整個(gè)數(shù)據(jù)庫集群向用戶提 供的全部數(shù)據(jù),而非滿型數(shù)據(jù)庫服務(wù)器M只存儲(chǔ)集群中的部分?jǐn)?shù)據(jù),非滿型數(shù)據(jù)庫服務(wù)器 M中的數(shù)據(jù)分區(qū)模塊并不全部存有數(shù)據(jù),根據(jù)定義其中至少有一個(gè)數(shù)據(jù)分區(qū)模塊是空數(shù)據(jù) 分區(qū)模塊(即,不存儲(chǔ)任何數(shù)據(jù)),在本實(shí)施例中是非滿型數(shù)據(jù)庫服務(wù)器M中的3號(hào)數(shù)據(jù) 分區(qū)模塊245為空,1號(hào)數(shù)據(jù)分區(qū)模塊243和2號(hào)數(shù)據(jù)分區(qū)模塊244是有效數(shù)據(jù)分區(qū)模塊 (即,存儲(chǔ)實(shí)體數(shù)據(jù)),而另一個(gè)非滿型數(shù)據(jù)庫服務(wù)器的1號(hào)和2號(hào)數(shù)據(jù)分區(qū)模塊為空。這 樣設(shè)計(jì)的目的是為了減小各數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)上的工作負(fù)載。但是從整個(gè)數(shù)據(jù)庫集群來 看,系統(tǒng)中所有的非滿型數(shù)據(jù)庫服務(wù)器組合在一起一定要能夠覆蓋集群所需的全部數(shù)據(jù)。 非滿型數(shù)據(jù)庫服務(wù)器M包括存儲(chǔ)數(shù)據(jù)庫集群中的分布式數(shù)據(jù)架構(gòu)信息的模塊M0、存儲(chǔ) 數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊Ml、代表分布式數(shù)據(jù)的虛擬表及其下屬 數(shù)據(jù)分區(qū)構(gòu)架的模塊對(duì)2、三個(gè)數(shù)據(jù)分區(qū)模塊243 M5 (在圖2中示為1號(hào)數(shù)據(jù)分區(qū)模塊 243,2號(hào)數(shù)據(jù)分區(qū)模塊M4、3號(hào)數(shù)據(jù)分區(qū)模塊M5,當(dāng)然本實(shí)施例僅為示例,實(shí)際上數(shù)據(jù)分 區(qū)模塊的數(shù)量可以有更多個(gè))。這三個(gè)數(shù)據(jù)分區(qū)模塊243 245從屬于代表分布式數(shù)據(jù)的 虛擬表的模塊M2,虛擬表M2向其所屬的數(shù)據(jù)分區(qū)243 245傳遞用戶提交的操作指令 并接收數(shù)據(jù)分區(qū)返回的處理結(jié)果。也就是說,這三個(gè)數(shù)據(jù)分區(qū)模塊243 245是由虛擬表 管理的,所有對(duì)有效數(shù)據(jù)分區(qū)模塊內(nèi)數(shù)據(jù)的操作指令都由其上的虛擬表來接收并轉(zhuǎn)發(fā)至各 個(gè)存有實(shí)體數(shù)據(jù)的有效數(shù)據(jù)分區(qū)模塊上執(zhí)行。存儲(chǔ)數(shù)據(jù)庫集群中的分布式數(shù)據(jù)架構(gòu)信息的 模塊240和存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊241 (包括未分區(qū)的普通 表及其表內(nèi)的數(shù)據(jù))在每個(gè)服務(wù)器節(jié)點(diǎn)中都實(shí)體存在且都是相同的,這些技術(shù)均是現(xiàn)有技 術(shù),在此不再贅述。
本實(shí)施例相對(duì)前一實(shí)施例的最大不同在于本實(shí)施例的系統(tǒng)沒有使用滿型數(shù)據(jù)庫 服務(wù)器而是采用了虛空型數(shù)據(jù)庫服務(wù)器,在圖3中示為虛空型數(shù)據(jù)庫服務(wù)器26。當(dāng)使用本 可控冗余構(gòu)架技術(shù)實(shí)現(xiàn)的數(shù)據(jù)庫集群內(nèi)沒有包含滿型數(shù)據(jù)庫服務(wù)器時(shí),需要至少包含一個(gè) 虛空型服務(wù)器來提供數(shù)據(jù)完整性的保證。為了描述方便在本實(shí)施例中虛空型數(shù)據(jù)庫服務(wù) 器示為1個(gè)。虛空型數(shù)據(jù)庫服務(wù)器沈包括存儲(chǔ)數(shù)據(jù)庫集群中的分布式數(shù)據(jù)架構(gòu)信息的模 塊260、存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊261、存儲(chǔ)數(shù)據(jù)庫集群中代表 分布式數(shù)據(jù)及其下屬數(shù)據(jù)分區(qū)構(gòu)架的虛擬表模塊262及其下屬的各個(gè)數(shù)據(jù)分區(qū)模塊263 265(為了描述方便,在本實(shí)施例中將數(shù)據(jù)分區(qū)模塊限定為3個(gè),實(shí)際應(yīng)用中可以有更多個(gè), 本實(shí)施例中為1號(hào)數(shù)據(jù)分區(qū)模塊沈5、2號(hào)數(shù)據(jù)分區(qū)模塊沈4以及3號(hào)數(shù)據(jù)分區(qū)模塊沈3)。 虛空型數(shù)據(jù)庫服務(wù)器26和滿型數(shù)據(jù)庫服務(wù)器或者非滿型數(shù)據(jù)庫服務(wù)器M的最大不同在于 虛空型數(shù)據(jù)庫服務(wù)器26內(nèi)部所有數(shù)據(jù)分區(qū)模塊都是不存儲(chǔ)數(shù)據(jù)的(S卩,都是空分區(qū)模塊), 這也是虛空型數(shù)據(jù)庫服務(wù)器模塊得名的由來。這些空的數(shù)據(jù)分區(qū)模塊263 265是用來和 其他非滿型數(shù)據(jù)庫服務(wù)器(或者滿型數(shù)據(jù)庫服務(wù)器)上的有效數(shù)據(jù)分區(qū)模塊建立動(dòng)態(tài)鏈接 以便能夠查詢這些數(shù)據(jù)。
之所以要設(shè)計(jì)本實(shí)施例中的虛空型數(shù)據(jù)庫服務(wù)器,其目的是為了解決非滿型數(shù)據(jù) 庫服務(wù)器不能單獨(dú)處理那些要求掃描全體分布式數(shù)據(jù)的查詢指令,為了減少數(shù)據(jù)庫服務(wù)器 節(jié)點(diǎn)之間的依賴,每個(gè)非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)不知道其他節(jié)點(diǎn)的存在,也就不需要直接 與其他節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交換。而在虛空型數(shù)據(jù)庫服務(wù)器26上不保存任何真正的分布式數(shù)據(jù), 僅保留虛擬表和其下的空分區(qū)模塊,在這些空分區(qū)模塊上保存有指向存儲(chǔ)有效數(shù)據(jù)分區(qū)的 非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)的鏈接。而且這個(gè)鏈接是動(dòng)態(tài)的,可進(jìn)行動(dòng)態(tài)調(diào)整來保證能夠覆 蓋全部的數(shù)據(jù)分區(qū)。虛空型數(shù)據(jù)庫服務(wù)器可以通過這種方式把多個(gè)非滿型數(shù)據(jù)庫服務(wù)器上 存儲(chǔ)的有效數(shù)據(jù)分區(qū)動(dòng)態(tài)組合起來,構(gòu)成一份完整的數(shù)據(jù)供用戶查詢。
下面舉例說明一下虛空型數(shù)據(jù)庫服務(wù)器的作用。當(dāng)數(shù)據(jù)庫集群規(guī)模包含上百甚至 上千個(gè)服務(wù)器節(jié)點(diǎn)時(shí),任何單一的服務(wù)器都沒有足夠快的處理器和充足的軟硬件資源來及 時(shí)處理全部工作負(fù)載和維護(hù)全部的數(shù)據(jù)。有一些查詢請(qǐng)求需要對(duì)全部數(shù)據(jù)進(jìn)行掃描檢索, 這樣的查詢請(qǐng)求無法由任何一個(gè)非滿型數(shù)據(jù)庫服務(wù)器完成,如果為滿足這些查詢請(qǐng)求而使 用滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),這些滿型節(jié)點(diǎn)可能會(huì)成為整個(gè)集群的速度瓶頸。而虛空型數(shù)據(jù) 庫服務(wù)器26可以根據(jù)集群內(nèi)節(jié)點(diǎn)的情況動(dòng)態(tài)地選擇服務(wù)器節(jié)點(diǎn),組成一個(gè)覆蓋集群全部 有效數(shù)據(jù)分區(qū)的星型網(wǎng)絡(luò)。對(duì)需要檢索全體數(shù)據(jù)的特殊查詢請(qǐng)求可以經(jīng)由這種虛空型數(shù) 據(jù)庫服務(wù)器來間接訪問多個(gè)存有實(shí)際數(shù)據(jù)的非滿型數(shù)據(jù)庫服務(wù)器,最大限度地利用了已有 的集群節(jié)點(diǎn)資源。因?yàn)檫@種虛空型數(shù)據(jù)庫服務(wù)器不負(fù)責(zé)維護(hù)真正的數(shù)據(jù)塊,卻可以借助數(shù) 據(jù)庫集群中的多個(gè)節(jié)點(diǎn)來提供快速的并行查詢處理能力,相比普通數(shù)據(jù)庫復(fù)制技術(shù)需要購 買昂貴的軟硬件設(shè)備在某些節(jié)點(diǎn)上維持整套數(shù)據(jù),使用非滿型數(shù)據(jù)庫服務(wù)器與虛空型數(shù)據(jù) 庫服務(wù)器相結(jié)合的分布式并行數(shù)據(jù)庫可控冗余架構(gòu)可以使用市場上性價(jià)比最優(yōu)的工作站 或個(gè)人電腦組成高處理性能和高可靠度的大規(guī)模數(shù)據(jù)集群。在這種星型網(wǎng)絡(luò)中,涉及大量 數(shù)據(jù)操作的用戶指令分割成多個(gè)并行執(zhí)行的指令,分配到多個(gè)獨(dú)立的服務(wù)器節(jié)點(diǎn)上同步運(yùn) 行,以降低在單個(gè)服務(wù)器節(jié)點(diǎn)上的工作負(fù)載。
基于圖3所示的帶有可控冗余構(gòu)架的分布式數(shù)據(jù)庫并行處理系統(tǒng)可以提供高數(shù) 據(jù)處理性能和高系統(tǒng)可靠度,下面舉一具體示例來說明。假設(shè)本實(shí)施例的系統(tǒng)包括了 100 臺(tái)非滿型數(shù)據(jù)庫服務(wù)器和2臺(tái)虛空型數(shù)據(jù)庫服務(wù)器(不存在滿型數(shù)據(jù)庫服務(wù)器),這100臺(tái) 非滿型數(shù)據(jù)庫服務(wù)器和2臺(tái)虛空型數(shù)據(jù)庫服務(wù)器組成了一個(gè)數(shù)據(jù)庫集群,集群中的全部數(shù) 據(jù)被分作100份。服務(wù)器1負(fù)責(zé)維護(hù)數(shù)據(jù)塊1和數(shù)據(jù)塊2,服務(wù)器2負(fù)責(zé)維護(hù)數(shù)據(jù)塊2和 數(shù)據(jù)塊3,……,服務(wù)器99負(fù)責(zé)維護(hù)數(shù)據(jù)塊99和數(shù)據(jù)塊100,服務(wù)器100負(fù)責(zé)維護(hù)數(shù)據(jù)塊 100和數(shù)據(jù)塊1,服務(wù)器101和102是虛空型數(shù)據(jù)庫服務(wù)器,只負(fù)責(zé)處理對(duì)整體數(shù)據(jù)的查詢 (實(shí)際上是將工作負(fù)載動(dòng)態(tài)分配到100臺(tái)非滿型數(shù)據(jù)庫服務(wù)器)。一方面,在這樣的分布式 并行數(shù)據(jù)庫可控冗余架構(gòu)下,任何一臺(tái)服務(wù)器出現(xiàn)故障都不會(huì)影響整個(gè)數(shù)據(jù)庫集群的正常工作。在最好的情況下,即使集群中一半的服務(wù)器停止工作(例如將所有的偶數(shù)號(hào)服務(wù)器 停機(jī)進(jìn)行硬件升級(jí)或系統(tǒng)維護(hù)),剩余的服務(wù)器仍然可以不間斷地提供完整的數(shù)據(jù)和服務(wù)。 另一方面,在這樣的分布式并行數(shù)據(jù)庫可控冗余架構(gòu)下,每臺(tái)服務(wù)器只需要處理原來單臺(tái) 服務(wù)器的2%的寫操作負(fù)荷,以及原來單臺(tái)服務(wù)器的的只讀操作負(fù)荷(因?yàn)樗袛?shù)據(jù)均 為實(shí)時(shí)有效數(shù)據(jù),對(duì)數(shù)據(jù)的查詢操作只需要由任一存儲(chǔ)該數(shù)據(jù)塊的服務(wù)器處理即可)。與使 用傳統(tǒng)的Two Phase Commit協(xié)議的普通同步復(fù)制技術(shù)相比,分布式并行數(shù)據(jù)庫可控冗余架 構(gòu)不需要在每臺(tái)服務(wù)器上保留整套完整的數(shù)據(jù),使得以后對(duì)數(shù)據(jù)庫進(jìn)行寫操作的插入、刪 除和更新指令都不必在全部節(jié)點(diǎn)上都同步執(zhí)行,這些寫操作只需要在保存有相應(yīng)有效數(shù)據(jù) 分區(qū)的非滿型數(shù)據(jù)庫服務(wù)器上執(zhí)行,整個(gè)系統(tǒng)的性能不再由某個(gè)主服務(wù)器限定,消除了數(shù) 據(jù)庫集群的數(shù)據(jù)處理速度瓶頸。
圖4示出了可應(yīng)用于本實(shí)施例的三種服務(wù)器節(jié)點(diǎn)(滿型數(shù)據(jù)庫服務(wù)器、非滿型數(shù) 據(jù)庫服務(wù)器、虛空型數(shù)據(jù)庫服務(wù)器)的特征以及有效數(shù)據(jù)的分布示意。從結(jié)構(gòu)上看,滿型數(shù) 據(jù)庫服務(wù)器、非滿型數(shù)據(jù)庫服務(wù)器以及虛空型數(shù)據(jù)庫服務(wù)器都包括存儲(chǔ)數(shù)據(jù)庫集群中的分 布式數(shù)據(jù)構(gòu)架信息的模塊、存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊、代表數(shù) 據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊以及多個(gè)數(shù)據(jù)分區(qū)模 塊。這些服務(wù)器節(jié)點(diǎn)的不同之處在于對(duì)于滿型數(shù)據(jù)庫服務(wù)器,所有的數(shù)據(jù)分區(qū)模塊都存有 有效數(shù)據(jù),每個(gè)此類節(jié)點(diǎn)內(nèi)部的數(shù)據(jù)分區(qū)模塊所存儲(chǔ)的數(shù)據(jù)組合在一起就能夠提供集群正 常工作所需的一套完整數(shù)據(jù)。對(duì)于非滿型數(shù)據(jù)庫服務(wù)器,部分的數(shù)據(jù)分區(qū)模塊存有有效數(shù) 據(jù),其余的數(shù)據(jù)分區(qū)模塊為空,這些節(jié)點(diǎn)內(nèi)部的數(shù)據(jù)分區(qū)模塊所存儲(chǔ)的數(shù)據(jù)合在一起只覆 蓋了提供全部服務(wù)所需的部分?jǐn)?shù)據(jù)(從一個(gè)滿型數(shù)據(jù)庫服務(wù)器刪除其中的一個(gè)或多個(gè)數(shù) 據(jù)分區(qū)模塊中的數(shù)據(jù)就可將其變?yōu)榉菨M型數(shù)據(jù)庫服務(wù)器)。對(duì)于虛空型數(shù)據(jù)庫服務(wù)器,所有 的數(shù)據(jù)分區(qū)模塊都不存儲(chǔ)數(shù)據(jù),這些空的數(shù)據(jù)分區(qū)模塊與其他服務(wù)器節(jié)點(diǎn)上存儲(chǔ)有效數(shù)據(jù) 分區(qū)保持動(dòng)態(tài)鏈接。
圖5示出了用戶及數(shù)據(jù)庫程序員所見的數(shù)據(jù)視圖。雖然系統(tǒng)的整個(gè)結(jié)構(gòu)如圖3所 示,但就用戶以及數(shù)據(jù)庫程序員的視角,他們所看到的系統(tǒng)包括數(shù)據(jù)庫應(yīng)用程序服務(wù)器以 及數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫服務(wù)器中包含存儲(chǔ)分布式數(shù)據(jù)架構(gòu)的信息的模塊、存儲(chǔ)非分布式 數(shù)據(jù)的普通數(shù)據(jù)表的模塊、代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊。對(duì)于 那些分布式數(shù)據(jù),用戶及數(shù)據(jù)庫程序員只需按照操作普通表的方式對(duì)代表分布式數(shù)據(jù)的虛 擬表提交操作指令,而不需對(duì)其下屬的數(shù)據(jù)分區(qū)進(jìn)行直接的操作,也不需要了解集群內(nèi)的 實(shí)際數(shù)據(jù)分布情況。
^^mmm^^mmmm^
圖6示出了本發(fā)明所述的帶有可控冗余度的分布式數(shù)據(jù)庫并行處理系統(tǒng)的構(gòu)造 方法。通過本實(shí)施例的這種構(gòu)造方法,可以將一個(gè)普通的數(shù)據(jù)庫系統(tǒng)(例如無數(shù)據(jù)分區(qū)的 單機(jī)式數(shù)據(jù)庫服務(wù)器)改造成使用本發(fā)明的具有可控冗余度的分布式數(shù)據(jù)庫并行處理系 統(tǒng),下面對(duì)這種分布式數(shù)據(jù)庫并行處理系統(tǒng)的構(gòu)造方法進(jìn)行詳細(xì)的描述。
步驟SlO 建立滿型數(shù)據(jù)庫服務(wù)器。
這個(gè)步驟具體由下面的步驟SlOO和步驟S102組成,請(qǐng)同時(shí)參見示出了由普通數(shù) 據(jù)庫服務(wù)器構(gòu)造出滿型數(shù)據(jù)庫服務(wù)器的圖7。
步驟SlOO 根據(jù)數(shù)據(jù)庫的實(shí)際工作負(fù)載和數(shù)據(jù)內(nèi)容,選定被頻繁讀寫的數(shù)據(jù)表,將其分割成多個(gè)數(shù)據(jù)塊,在這些數(shù)據(jù)塊之上建立一個(gè)虛擬表。
步驟S102 通過添加trigger或利用現(xiàn)有數(shù)據(jù)庫分區(qū)方式使得所有對(duì)數(shù)據(jù)塊(即 數(shù)據(jù)分區(qū))的訪問都通過這個(gè)虛擬表來進(jìn)行,具體的讀寫操作經(jīng)由虛擬表傳遞到底層的數(shù) 據(jù)塊上進(jìn)行。
當(dāng)一個(gè)數(shù)據(jù)庫服務(wù)器上的完整數(shù)據(jù)按照上述的虛擬表和底層數(shù)據(jù)塊模式分配完 畢后,這個(gè)數(shù)據(jù)庫服務(wù)器就變成一個(gè)滿型數(shù)據(jù)庫服務(wù)器。
步驟S12 在新服務(wù)器節(jié)點(diǎn)創(chuàng)建數(shù)據(jù)分區(qū)構(gòu)架。
將步驟SlO中建立的數(shù)據(jù)構(gòu)架,包括非分布式數(shù)據(jù)表,代表分布式數(shù)據(jù)的虛擬表 及其下屬數(shù)據(jù)分區(qū)構(gòu)架復(fù)制到新的數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)上。此時(shí)所有的數(shù)據(jù)分區(qū)為空數(shù)據(jù)分 區(qū)。
步驟S14 建立非滿型數(shù)據(jù)庫服務(wù)器。
這一步驟是由數(shù)據(jù)庫管理員在數(shù)據(jù)庫應(yīng)用程序服務(wù)器上完成。數(shù)據(jù)庫管理員需要 估計(jì)系統(tǒng)設(shè)計(jì)要求或工作負(fù)載情況決定新的服務(wù)器節(jié)點(diǎn)在整個(gè)集群中所要擔(dān)任的角色和 負(fù)責(zé)分擔(dān)的工作負(fù)載范圍,由此而決定其需要存儲(chǔ)和維護(hù)哪些有效數(shù)據(jù)分區(qū)。在這一過程 完成后,即可開始向新的服務(wù)器節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步復(fù)制。
步驟S15 向新的滿型服務(wù)器節(jié)點(diǎn)或非滿型服務(wù)器節(jié)點(diǎn)同步復(fù)制數(shù)據(jù)。
請(qǐng)具體參見圖8所示的從工作節(jié)點(diǎn)向新服務(wù)器節(jié)點(diǎn)復(fù)制同步數(shù)據(jù)。其底層的數(shù)據(jù) 分區(qū)可以由滿型數(shù)據(jù)庫服務(wù)器或者其他已經(jīng)獲得有效數(shù)據(jù)的非滿型數(shù)據(jù)庫服務(wù)器以快速 數(shù)據(jù)備份方法實(shí)現(xiàn)同步。如果一個(gè)數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)獲得了全部的實(shí)時(shí)數(shù)據(jù),就變成了一 個(gè)滿型數(shù)據(jù)庫服務(wù)器。如果一個(gè)數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)只獲得了部分的實(shí)時(shí)數(shù)據(jù),就變成了一 個(gè)非滿型數(shù)據(jù)庫服務(wù)器,這種非滿型數(shù)據(jù)庫服務(wù)器只處理與其存貯的數(shù)據(jù)塊相關(guān)的讀寫操 作。
在圖8中,滿型數(shù)據(jù)庫服務(wù)器正在向第一個(gè)非滿型數(shù)據(jù)庫服務(wù)器的1號(hào)數(shù)據(jù)分區(qū) 模塊進(jìn)行數(shù)據(jù)同步,而第二個(gè)非滿型數(shù)據(jù)庫服務(wù)器的2號(hào)數(shù)據(jù)分區(qū)模塊和3號(hào)數(shù)據(jù)分區(qū)模 塊已經(jīng)完成了數(shù)據(jù)同步。
步驟S16 建立虛空型數(shù)據(jù)庫服務(wù)器。
當(dāng)數(shù)據(jù)庫集群規(guī)模達(dá)到上百甚至上千臺(tái)時(shí),任何單一的服務(wù)器都沒有足夠快的處 理器和足夠多的軟硬件資源來及時(shí)處理和維護(hù)一套完整的數(shù)據(jù)。在新服務(wù)器節(jié)點(diǎn)上建立數(shù) 據(jù)分區(qū)構(gòu)架后,數(shù)據(jù)庫管理員可以選定一些新節(jié)點(diǎn)設(shè)為虛空型服務(wù)器節(jié)點(diǎn)。這種情況下,該 節(jié)點(diǎn)上所有的分布式數(shù)據(jù)的分區(qū)都必須是空數(shù)據(jù)分區(qū)。在完成必要的數(shù)據(jù)同步和與其他服 務(wù)器節(jié)點(diǎn)上的有效數(shù)據(jù)分區(qū)建立鏈接后(見步驟18),該虛空型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)即可投 入使用。
步驟S18 為新的虛空型服務(wù)器節(jié)點(diǎn)同步復(fù)制數(shù)據(jù)并建立數(shù)據(jù)鏈接。
在新服務(wù)器節(jié)點(diǎn)上建立數(shù)據(jù)分區(qū)構(gòu)架后,虛空型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)仍然需要從其 他服務(wù)器節(jié)點(diǎn)復(fù)制除分布式數(shù)據(jù)以外的所有數(shù)據(jù),并在每個(gè)數(shù)據(jù)分區(qū)模塊上根據(jù)數(shù)據(jù)庫集 群中的分布式數(shù)據(jù)的分布情況建立鏈接,指向那些存有有效數(shù)據(jù)分區(qū)的數(shù)據(jù)庫節(jié)點(diǎn)。
經(jīng)過上述兩個(gè)系統(tǒng)實(shí)施例的說明,本發(fā)明的分布式數(shù)據(jù)庫并行處理系統(tǒng)的優(yōu)點(diǎn)如 下
一、本發(fā)明解決了數(shù)據(jù)庫集群的大規(guī)模擴(kuò)展和提高集群處理性能的問題。
以往的數(shù)據(jù)庫集群技術(shù)中,使用普通的分布式數(shù)據(jù)庫會(huì)造成數(shù)據(jù)庫集群可靠度隨 著服務(wù)器節(jié)點(diǎn)數(shù)目的增加而降低;普通的“主服務(wù)器一輔助服務(wù)器”異步復(fù)制技術(shù)會(huì)隨著工 作負(fù)載增加造成在主服務(wù)器上為更新輔助服務(wù)器節(jié)點(diǎn)而浪費(fèi)更多的資源進(jìn)而降低數(shù)據(jù)處 理速度;使用并行處理技術(shù)和Two Phase Commit協(xié)議的同步復(fù)制技術(shù)又因?yàn)樾枰诿颗_(tái)服 務(wù)器保持全部數(shù)據(jù)同步更新造成每個(gè)節(jié)點(diǎn)都會(huì)面臨隨著數(shù)據(jù)庫規(guī)模增長而帶來的寫操作 處理瓶頸。關(guān)于寫操作瓶頸的討論請(qǐng)見以下公式。公式1中普通數(shù)據(jù)庫集群的性能加速比 (Sp)由
Sd(NL l 、_ 集群處理能力 _ Lmite + Lreadij^yi v , i^read,^write) 一 叢 4-Π hL -rm 厶κ 一; 777Eq. 1單機(jī)處理硓力 Lwnte+Lread IN
N:數(shù)據(jù)庫集群節(jié)點(diǎn)數(shù)目
Lread:客戶端遞交的只讀負(fù)載,這部分負(fù)載可以在N個(gè)節(jié)點(diǎn)間平均分配
Lwite 客戶端遞交的寫指令負(fù)載,這部分負(fù)載必須在N個(gè)節(jié)點(diǎn)上都同步執(zhí)行以保 證各節(jié)點(diǎn)上數(shù)據(jù)的一致。
當(dāng)數(shù)據(jù)庫集群的節(jié)點(diǎn)趨向無窮時(shí),整個(gè)集群的理論最大加速比極限值為
Iim Sp = Lwr"e + LreadEq. 2iV—00Τwrite
通常的商用數(shù)據(jù)庫系統(tǒng)中,寫操作在總工作負(fù)載中所占的比率L ite—般不低于 10%,根據(jù)公式2可以看到,使用普通同步復(fù)制技術(shù)的數(shù)據(jù)庫集群的最大加速比不會(huì)超過 10,而且在數(shù)據(jù)庫節(jié)點(diǎn)數(shù)目超過10之后,添加新的節(jié)點(diǎn)對(duì)整個(gè)集群性能的提高越來越微不 足道??梢?,不使用本發(fā)明的帶有可控冗余構(gòu)架的分布式并行數(shù)據(jù)庫技術(shù)使得數(shù)據(jù)庫集群 都只能局限在個(gè)位數(shù)到數(shù)十個(gè)節(jié)點(diǎn)的小集群,無法擴(kuò)展到成百上千臺(tái)服務(wù)器。
本發(fā)明通過利用帶有可控冗余度的分布式并行數(shù)據(jù)庫構(gòu)架,利用非滿型數(shù)據(jù)庫服 務(wù)器和虛空型數(shù)據(jù)庫服務(wù)器將分布在多個(gè)服務(wù)器節(jié)點(diǎn)上。增加新的節(jié)點(diǎn)會(huì)進(jìn)一步提高整個(gè) 數(shù)據(jù)庫集群的可靠度以及數(shù)據(jù)處理能力,使得數(shù)據(jù)庫集群向大規(guī)模擴(kuò)展成為可能。這種新 的“分布式并行數(shù)據(jù)庫可控冗余構(gòu)架”可達(dá)到的加速比由公式3給出。On^ AT D r T 、— _Lwnp + Lwp + Ltread__4]耿 N,w L-HLwpXR + LreadVNEq. 3
Sp 性能加速比(speedup)
Lwnp 在集群內(nèi)每個(gè)節(jié)點(diǎn)都必須執(zhí)行的寫操作負(fù)載
Lwp 只需在某個(gè)數(shù)據(jù)分區(qū)上執(zhí)行的寫操作負(fù)載
Lread 只讀查詢負(fù)載
R 數(shù)據(jù)分區(qū)的冗余度
N:數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)數(shù)
當(dāng)數(shù)據(jù)庫集群的節(jié)點(diǎn)趨向無窮時(shí),整個(gè)集群的理論最大加速比極限值為
Iim Sp = L- + L;p + KadEq. 4^wnp
通過選擇合理的數(shù)據(jù)分區(qū),可以將1^_占整個(gè)負(fù)載的比例保持在很低的水平。舉例說明在一個(gè)擁有上百萬儲(chǔ)戶的商業(yè)銀行使用的數(shù)據(jù)庫服務(wù)器上,可以按照賬戶號(hào)碼來 分區(qū),不同的賬戶所對(duì)應(yīng)的信息可以作為分布式數(shù)據(jù)而被分布在不同的數(shù)據(jù)分區(qū)乃至不同 的服務(wù)器節(jié)點(diǎn)上,而對(duì)諸如存款利率、國際貨幣匯率、賬戶管理規(guī)則等很少變更且被頻繁查 詢的數(shù)據(jù)表可以作為非分布式數(shù)據(jù)而在每個(gè)服務(wù)器節(jié)點(diǎn)上保持一套完整數(shù)據(jù)。對(duì)這些變更 很少卻頻繁讀取的數(shù)據(jù)表的零星寫操作,即可歸為Lwnp類別。可以想象,與每天以百萬計(jì)的 普通客戶的交易信息寫操作(屬于Lwp類別),變更利率這樣Lwnp類別的操作僅占全部負(fù)載 的萬分之一甚至更低,這就保證了使用“分布式并行數(shù)據(jù)庫可控冗余構(gòu)架”可以將數(shù)據(jù)庫集 群擴(kuò)展至成千上萬臺(tái)的超大規(guī)模。
二、本發(fā)明解決了高數(shù)據(jù)庫處理性能和高可靠度無法同時(shí)提高的矛盾
高可靠度多個(gè)非滿型數(shù)據(jù)庫服務(wù)器可分擔(dān)原來單臺(tái)服務(wù)器的負(fù)載,并提供同步 實(shí)時(shí)可靠度冗余備份,使得在某一節(jié)點(diǎn)出現(xiàn)故障時(shí),只要所需有效數(shù)據(jù)分區(qū)還存在于其他 節(jié)點(diǎn)上,整個(gè)數(shù)據(jù)庫系統(tǒng)即可無間斷地繼續(xù)運(yùn)行。在常用的“主服務(wù)器一輔助服務(wù)器”異步 復(fù)制中,所有的輔助服務(wù)器僅能處理只讀操作,其上返回的數(shù)據(jù)也并非主服務(wù)器上的最新 數(shù)據(jù),而且主服務(wù)器是系統(tǒng)的單點(diǎn)故障源,整個(gè)系統(tǒng)的可靠度不會(huì)超過主服務(wù)器的可靠度。 分布式并行數(shù)據(jù)庫可控冗余構(gòu)架解決了這個(gè)可靠度的難題。因?yàn)榉菨M型數(shù)據(jù)庫服務(wù)器只負(fù) 責(zé)對(duì)其所存儲(chǔ)的數(shù)據(jù)提供相應(yīng)的服務(wù),在合理設(shè)計(jì)數(shù)據(jù)塊分配方案后,每個(gè)非滿型數(shù)據(jù)庫 服務(wù)器上的負(fù)載都只有原來單機(jī)服務(wù)器的一小部分。例如,由100臺(tái)“非滿型服務(wù)器”組成 一個(gè)數(shù)據(jù)庫集群,數(shù)據(jù)被分為100份。服務(wù)器1負(fù)責(zé)維護(hù)數(shù)據(jù)塊1和數(shù)據(jù)塊2,服務(wù)器2負(fù) 責(zé)維護(hù)數(shù)據(jù)塊2和數(shù)據(jù)塊3,……,服務(wù)器99負(fù)責(zé)維護(hù)數(shù)據(jù)塊99和數(shù)據(jù)塊100,服務(wù)器100 負(fù)責(zé)維護(hù)數(shù)據(jù)塊100和數(shù)據(jù)塊1。在這樣的分布式并行數(shù)據(jù)庫可控冗余構(gòu)架下,任何一臺(tái)服 務(wù)器出現(xiàn)故障都不會(huì)影響整個(gè)數(shù)據(jù)庫集群的正常工作。在最好的情況下,即使集群中一半 的服務(wù)器停止工作(例如將所有的偶數(shù)號(hào)服務(wù)器停機(jī)進(jìn)行硬件升級(jí)或系統(tǒng)維護(hù)),剩余的 服務(wù)器仍然可以不間斷地提供服務(wù)。
高數(shù)據(jù)處理性能與普通的“主服務(wù)器一輔助服務(wù)器”異步復(fù)制不同的是使用可 控冗余構(gòu)架的分布式并行數(shù)據(jù)庫沒有一個(gè)主服務(wù)器來集中處理寫操作,所有的讀操作和寫 操作都可以動(dòng)態(tài)分配到多個(gè)服務(wù)器上處理,消除了“主服務(wù)器一輔助服務(wù)器”異步復(fù)制技 術(shù)中的寫操作瓶頸。例如,由100臺(tái)非滿型數(shù)據(jù)庫服務(wù)器組成一個(gè)數(shù)據(jù)庫集群,數(shù)據(jù)被分 為100份。服務(wù)器1負(fù)責(zé)維護(hù)數(shù)據(jù)塊1和數(shù)據(jù)塊2,服務(wù)器2負(fù)責(zé)維護(hù)數(shù)據(jù)塊2和數(shù)據(jù)塊 3,……,服務(wù)器99負(fù)責(zé)維護(hù)數(shù)據(jù)塊99和數(shù)據(jù)塊100,服務(wù)器100負(fù)責(zé)維護(hù)數(shù)據(jù)塊100和數(shù) 據(jù)塊1。在這樣的分布式并行數(shù)據(jù)庫可控冗余構(gòu)架下,每臺(tái)服務(wù)器只需要處理原來單臺(tái)服 務(wù)器的2%的寫操作負(fù)荷,以及原來單臺(tái)服務(wù)器的1 %的只讀操作負(fù)荷(因?yàn)樗袛?shù)據(jù)均為 實(shí)時(shí)數(shù)據(jù),對(duì)數(shù)據(jù)的查詢操作只需要由任一存儲(chǔ)該有效數(shù)據(jù)分區(qū)的服務(wù)器處理即可)。與 使用Two Phase Commit協(xié)議的普通同步復(fù)制技術(shù)相比,使用可控冗余構(gòu)架的分布式并行數(shù) 據(jù)庫集群不需要在每臺(tái)服務(wù)器上保留整套完整的數(shù)據(jù),使得任何對(duì)數(shù)據(jù)庫進(jìn)行寫操作的插 入、刪除和更新指令都不必在全部節(jié)點(diǎn)上都同步執(zhí)行。這些寫操作只需要在保存有相應(yīng)有 效數(shù)據(jù)分區(qū)的非滿型數(shù)據(jù)庫服務(wù)器上執(zhí)行。整個(gè)系統(tǒng)的性能不再由某個(gè)主服務(wù)器限定,消 除了數(shù)據(jù)庫集群的數(shù)據(jù)處理速度瓶頸。
三、本發(fā)明解決了集群規(guī)模最優(yōu)化的問題
隨著數(shù)據(jù)庫節(jié)點(diǎn)的增加,每個(gè)節(jié)點(diǎn)對(duì)整體數(shù)據(jù)庫集群性能提升所帶來的邊際效應(yīng)呈遞減趨勢(shì)??紤]到每個(gè)節(jié)點(diǎn)所需要的軟硬件投資和日常維護(hù)成本,需要確定整個(gè)數(shù)據(jù)庫 集群的最優(yōu)規(guī)模。考慮到不同負(fù)載的權(quán)重,這個(gè)問題可以通過公式5來獲得。
權(quán)利要求
1.一種分布式數(shù)據(jù)庫并行處理系統(tǒng),通過動(dòng)態(tài)可控冗余架構(gòu)將數(shù)據(jù)庫內(nèi)的數(shù)據(jù)分布到 由多個(gè)服務(wù)器節(jié)點(diǎn)組成的數(shù)據(jù)庫集群中,該系統(tǒng)包括以下組成部分?jǐn)?shù)據(jù)庫應(yīng)用程序服務(wù)器,掌握帶有動(dòng)態(tài)可控冗余度的分布式數(shù)據(jù)庫集群的架構(gòu)信息和 數(shù)據(jù)分布情況,接收用戶遞交的對(duì)數(shù)據(jù)庫的操作指令并按照操作的特征動(dòng)態(tài)選定能夠完成 該操作的服務(wù)器節(jié)點(diǎn)來執(zhí)行該操作指令;多個(gè)服務(wù)器節(jié)點(diǎn),該數(shù)據(jù)庫應(yīng)用程序服務(wù)器連接多個(gè)服務(wù)器節(jié)點(diǎn),該些服務(wù)器節(jié)點(diǎn)用 于存儲(chǔ)實(shí)體數(shù)據(jù)并執(zhí)行用戶遞交的對(duì)數(shù)據(jù)庫的操作指令,該些服務(wù)器節(jié)點(diǎn)分為兩類第一類服務(wù)器節(jié)點(diǎn)非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),每個(gè)非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)只存儲(chǔ) 指定的一部分分布式數(shù)據(jù),各非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)彼此獨(dú)立工作,不直接與其他非滿 型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)交換數(shù)據(jù),該非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)內(nèi)包含以下信息模塊存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊,該些分布式數(shù)據(jù)架構(gòu)信息由該數(shù)據(jù)庫 應(yīng)用程序服務(wù)器負(fù)責(zé)維護(hù);存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊;存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊,虛擬表本 身不存儲(chǔ)數(shù)據(jù),每個(gè)虛擬表下管理多個(gè)數(shù)據(jù)分區(qū)模塊,分布式數(shù)據(jù)的實(shí)體數(shù)據(jù)存儲(chǔ)于該些 數(shù)據(jù)分區(qū)模塊中,存有分布式數(shù)據(jù)的分區(qū)模塊為有效數(shù)據(jù)分區(qū)模塊,未存有分布式數(shù)據(jù)的 分區(qū)為空分區(qū)模塊,非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)所屬的數(shù)據(jù)分區(qū)模塊中至少有一個(gè)是空分區(qū) 模塊,所有對(duì)有效數(shù)據(jù)分區(qū)模塊內(nèi)數(shù)據(jù)的操作指令都由其上的虛擬表來接收并轉(zhuǎn)發(fā)至各個(gè) 存有實(shí)體數(shù)據(jù)的有效數(shù)據(jù)分區(qū)模塊上執(zhí)行;第二類服務(wù)器節(jié)點(diǎn)虛空型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),虛空型服務(wù)器節(jié)點(diǎn)本身只保存非分布 式數(shù)據(jù),不存儲(chǔ)任何實(shí)體的分布式數(shù)據(jù),依賴其他存有分布式數(shù)據(jù)的服務(wù)器節(jié)點(diǎn)為其提供 實(shí)體數(shù)據(jù),每個(gè)虛空型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)將各個(gè)存有分布式數(shù)據(jù)的服務(wù)器節(jié)點(diǎn)動(dòng)態(tài)鏈接起 來為用戶提供一份覆蓋全部分布式數(shù)據(jù)的完整數(shù)據(jù)集合,該虛空型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)內(nèi)包 含以下信息模塊存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊; 存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊;存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊,該虛擬表 本身不存儲(chǔ)數(shù)據(jù),每個(gè)虛擬表下管理多個(gè)數(shù)據(jù)分區(qū)模塊,虛空型服務(wù)器節(jié)點(diǎn)上所有的數(shù)據(jù) 分區(qū)模塊均為空模塊,不存儲(chǔ)實(shí)體數(shù)據(jù),其下每個(gè)數(shù)據(jù)分區(qū)模塊與集群中其他存有有效數(shù) 據(jù)的服務(wù)器節(jié)點(diǎn)的分區(qū)模塊保持動(dòng)態(tài)鏈接,當(dāng)虛空型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)上的虛擬表接收到 數(shù)據(jù)操作請(qǐng)求時(shí),虛擬表通過該些動(dòng)態(tài)鏈接從其他服務(wù)器節(jié)點(diǎn)獲取數(shù)據(jù)并返回查詢結(jié)果。
2.根據(jù)權(quán)利要求1所述的分布式數(shù)據(jù)庫并行處理系統(tǒng),其特征在于,該服務(wù)器節(jié)點(diǎn)還 包括第三類服務(wù)器節(jié)點(diǎn)滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),其上存儲(chǔ)有全部非分布式數(shù)據(jù)和一份完 整的分布式數(shù)據(jù)的數(shù)據(jù)集,單獨(dú)提供用戶所需的全部數(shù)據(jù),滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)內(nèi)包括 以下模塊存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊; 存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊;存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊,該虛擬表本身不存儲(chǔ)數(shù)據(jù),每個(gè)虛擬表下管理多個(gè)數(shù)據(jù)分區(qū)模塊,各滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)下的數(shù) 據(jù)分區(qū)模塊均為有效數(shù)據(jù)分區(qū)模塊,每個(gè)滿型服務(wù)器節(jié)點(diǎn)上的全部有效數(shù)據(jù)分區(qū)模塊組成 一套完整的分布式數(shù)據(jù)以保證該滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)獨(dú)立為用戶提供完整的數(shù)據(jù)。
3.根據(jù)權(quán)利要求1所述的分布式數(shù)據(jù)庫并行處理系統(tǒng),其特征在于,該數(shù)據(jù)庫應(yīng)用程 序服務(wù)器監(jiān)控和管理每個(gè)服務(wù)器節(jié)點(diǎn),把整個(gè)數(shù)據(jù)庫集群的最新狀態(tài)和最近變更記錄作為 分布式數(shù)據(jù)庫集群架構(gòu)的信息保存在每個(gè)服務(wù)器節(jié)點(diǎn)上,在收到用戶操作時(shí)根據(jù)用戶操作 的特征將其發(fā)往對(duì)應(yīng)的服務(wù)器節(jié)點(diǎn)如果該用戶操作是針對(duì)某一數(shù)據(jù)分區(qū)模塊的只讀操 作,則選擇任意一個(gè)包含對(duì)應(yīng)有效數(shù)據(jù)分區(qū)模塊的服務(wù)器節(jié)點(diǎn)來執(zhí)行該只讀操作;如果該 用戶操作是針對(duì)某一數(shù)據(jù)分區(qū)模塊的寫操作,則將該寫操作發(fā)往所有存儲(chǔ)對(duì)應(yīng)有效數(shù)據(jù)分 區(qū)模塊的服務(wù)器節(jié)點(diǎn)來執(zhí)行該寫操作;如果該用戶操作是針對(duì)非分布式數(shù)據(jù)的只讀操作, 則可選擇任意一個(gè)服務(wù)器節(jié)點(diǎn)來執(zhí)行該只讀操作;如果該用戶操作是針對(duì)非分布式數(shù)據(jù)的 寫操作,則將該寫操作發(fā)往所有服務(wù)器節(jié)點(diǎn)來執(zhí)行該寫操作。
4.根據(jù)權(quán)利要求1所述的分布式數(shù)據(jù)庫并行處理系統(tǒng),其特征在于,集群內(nèi)的虛空型 數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)動(dòng)態(tài)鏈接數(shù)據(jù)庫集群內(nèi)的非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)和滿型數(shù)據(jù)庫服務(wù) 器節(jié)點(diǎn)以組成一個(gè)覆蓋全部分布式數(shù)據(jù)的星型網(wǎng)絡(luò)結(jié)構(gòu),該星型網(wǎng)絡(luò)結(jié)構(gòu)將涉及大量數(shù)據(jù) 操作的用戶指令分割成多個(gè)并行執(zhí)行的指令,分配到多個(gè)獨(dú)立的服務(wù)器節(jié)點(diǎn)上同步運(yùn)行。
5.根據(jù)權(quán)利要求2所述的分布式數(shù)據(jù)庫并行處理系統(tǒng),其特征在于,滿型數(shù)據(jù)庫服務(wù) 器節(jié)點(diǎn)在數(shù)據(jù)庫管理員需要縮減數(shù)據(jù)庫集群規(guī)?;蛘邔?shù)據(jù)庫集群合并至單臺(tái)服務(wù)器時(shí) 為用戶提供安全的合并方案,或者為在數(shù)據(jù)庫應(yīng)用程序開發(fā)人員在單個(gè)服務(wù)器節(jié)點(diǎn)上開發(fā) 針對(duì)整個(gè)數(shù)據(jù)庫集群的應(yīng)用程序時(shí)提供便利的調(diào)試環(huán)境。
6.一種分布式數(shù)據(jù)庫并行處理系統(tǒng),通過動(dòng)態(tài)可控冗余架構(gòu)將數(shù)據(jù)庫內(nèi)的數(shù)據(jù)分布到 由多個(gè)服務(wù)器節(jié)點(diǎn)組成的數(shù)據(jù)庫集群中,該系統(tǒng)包括以下組成部分?jǐn)?shù)據(jù)庫應(yīng)用程序服務(wù)器,掌握帶有動(dòng)態(tài)可控冗余度的分布式數(shù)據(jù)庫集群的架構(gòu)信息和 數(shù)據(jù)分布情況,接收用戶遞交的對(duì)數(shù)據(jù)庫的操作指令并按照操作的特征動(dòng)態(tài)選定能夠完成 該操作的服務(wù)器節(jié)點(diǎn)來執(zhí)行該操作指令;多個(gè)服務(wù)器節(jié)點(diǎn),該數(shù)據(jù)庫應(yīng)用程序服務(wù)器連接多個(gè)服務(wù)器節(jié)點(diǎn),該些服務(wù)器節(jié)點(diǎn)用 于存儲(chǔ)實(shí)體數(shù)據(jù)并執(zhí)行用戶遞交的對(duì)數(shù)據(jù)庫的操作指令,該些服務(wù)器節(jié)點(diǎn)分為兩類第一類服務(wù)器節(jié)點(diǎn)非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),每個(gè)非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)只存儲(chǔ) 指定的一部分分布式數(shù)據(jù),各非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)彼此獨(dú)立工作,不直接與其他非滿 型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)交換數(shù)據(jù),該非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)內(nèi)包含以下信息模塊存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊,該些分布式數(shù)據(jù)架構(gòu)信息由該數(shù)據(jù)庫 應(yīng)用程序服務(wù)器負(fù)責(zé)維護(hù);存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊;存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊,虛擬表本 身不存儲(chǔ)數(shù)據(jù),每個(gè)虛擬表下管理多個(gè)數(shù)據(jù)分區(qū)模塊,分布式數(shù)據(jù)的實(shí)體數(shù)據(jù)存儲(chǔ)于該些 數(shù)據(jù)分區(qū)模塊中,存有分布式數(shù)據(jù)的分區(qū)模塊為有效數(shù)據(jù)分區(qū)模塊,未存有分布式數(shù)據(jù)的 分區(qū)為空分區(qū)模塊,非滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)所屬的數(shù)據(jù)分區(qū)模塊中至少有一個(gè)是空分區(qū) 模塊,所有對(duì)有效數(shù)據(jù)分區(qū)模塊內(nèi)數(shù)據(jù)的操作指令都由其上的虛擬表來接收并轉(zhuǎn)發(fā)至各個(gè) 存有實(shí)體數(shù)據(jù)的有效數(shù)據(jù)分區(qū)模塊上執(zhí)行;第二類服務(wù)器節(jié)點(diǎn)滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn),其上存儲(chǔ)有全部非分布式數(shù)據(jù)和一份完 整的分布式數(shù)據(jù)的數(shù)據(jù)集,單獨(dú)提供用戶所需的全部數(shù)據(jù),滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)內(nèi)包括 以下模塊存儲(chǔ)數(shù)據(jù)庫集群中分布式數(shù)據(jù)架構(gòu)信息的模塊;存儲(chǔ)數(shù)據(jù)庫集群中非分布式數(shù)據(jù)的普通數(shù)據(jù)表的模塊;存儲(chǔ)數(shù)據(jù)庫集群中代表分布式數(shù)據(jù)的虛擬表及其下屬數(shù)據(jù)分區(qū)構(gòu)架的模塊,該虛擬表 本身不存儲(chǔ)數(shù)據(jù),每個(gè)虛擬表下管理多個(gè)數(shù)據(jù)分區(qū)模塊,各滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)下的數(shù) 據(jù)分區(qū)模塊均為有效數(shù)據(jù)分區(qū)模塊,每個(gè)滿型服務(wù)器節(jié)點(diǎn)上的全部有效數(shù)據(jù)分區(qū)模塊組成 一套完整的分布式數(shù)據(jù)以保證該滿型數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)獨(dú)立為用戶提供完整的數(shù)據(jù)。
7.根據(jù)權(quán)利要求6所述的分布式數(shù)據(jù)庫并行處理系統(tǒng),其特征在于,該數(shù)據(jù)庫應(yīng)用程 序服務(wù)器監(jiān)控和管理每個(gè)服務(wù)器節(jié)點(diǎn),把整個(gè)數(shù)據(jù)庫集群的最新狀態(tài)和最近變更記錄作為 分布式數(shù)據(jù)庫集群架構(gòu)的信息保存在每個(gè)服務(wù)器節(jié)點(diǎn)上,在收到用戶操作時(shí)根據(jù)用戶操作 的特征將其發(fā)往對(duì)應(yīng)的服務(wù)器節(jié)點(diǎn)如果該用戶操作是針對(duì)某一數(shù)據(jù)分區(qū)模塊的只讀操 作,則選擇任意一個(gè)包含對(duì)應(yīng)有效數(shù)據(jù)分區(qū)模塊的服務(wù)器節(jié)點(diǎn)來執(zhí)行該只讀操作;如果該 用戶操作是針對(duì)某一數(shù)據(jù)分區(qū)模塊的寫操作,則將該寫操作發(fā)往所有存儲(chǔ)對(duì)應(yīng)有效數(shù)據(jù)分 區(qū)模塊的服務(wù)器節(jié)點(diǎn)來執(zhí)行該寫操作;如果該用戶操作是針對(duì)非分布式數(shù)據(jù)的只讀操作, 則可選擇任意一個(gè)服務(wù)器節(jié)點(diǎn)來執(zhí)行該只讀操作;如果該用戶操作是針對(duì)非分布式數(shù)據(jù)的 寫操作,則將該寫操作發(fā)往所有服務(wù)器節(jié)點(diǎn)來執(zhí)行該寫操作。
8.根據(jù)權(quán)利要求6所述的分布式數(shù)據(jù)庫并行處理系統(tǒng),其特征在于,滿型數(shù)據(jù)庫服務(wù) 器節(jié)點(diǎn)在數(shù)據(jù)庫管理員需要縮減數(shù)據(jù)庫集群規(guī)模或者將數(shù)據(jù)庫集群合并至單臺(tái)服務(wù)器時(shí) 為用戶提供安全的合并方案,或者為在數(shù)據(jù)庫應(yīng)用程序開發(fā)人員在單個(gè)服務(wù)器節(jié)點(diǎn)上開發(fā) 針對(duì)整個(gè)數(shù)據(jù)庫集群的應(yīng)用程序時(shí)提供便利的調(diào)試環(huán)境。
全文摘要
本發(fā)明公開了分布式數(shù)據(jù)庫并行處理系統(tǒng),其技術(shù)方案為采用分布式并行數(shù)據(jù)庫可控冗余架構(gòu),使用不同類型的數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)(滿型數(shù)據(jù)庫服務(wù)器、非滿型數(shù)據(jù)庫服務(wù)器和虛空型數(shù)據(jù)庫服務(wù)器)。數(shù)據(jù)庫集群主要由非滿型數(shù)據(jù)庫服務(wù)器組成,其上存儲(chǔ)數(shù)據(jù)庫集群中的部分?jǐn)?shù)據(jù)來分擔(dān)工作負(fù)載,多個(gè)非滿型服務(wù)器通過虛空型數(shù)據(jù)庫服務(wù)器組成多份完整的數(shù)據(jù)集合,虛空型數(shù)據(jù)庫服務(wù)器從功能上保證了數(shù)據(jù)集合的完整。滿型數(shù)據(jù)庫服務(wù)器也可單獨(dú)提供數(shù)據(jù)集合的完整。虛空型數(shù)據(jù)庫服務(wù)器選擇數(shù)據(jù)庫集群中的服務(wù)器節(jié)點(diǎn)組成一個(gè)覆蓋全部數(shù)據(jù)的星型網(wǎng)絡(luò),用于檢索數(shù)據(jù)庫集群中的全部數(shù)據(jù),將存儲(chǔ)于多個(gè)數(shù)據(jù)庫服務(wù)器節(jié)點(diǎn)上的數(shù)據(jù)分區(qū)動(dòng)態(tài)鏈接起來。
文檔編號(hào)H04L29/08GK102033889SQ20091019684
公開日2011年4月27日 申請(qǐng)日期2009年9月29日 優(yōu)先權(quán)日2009年9月29日
發(fā)明者熊凡凡 申請(qǐng)人:熊凡凡