專利名稱:一種分布式數(shù)據(jù)存儲(chǔ)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)存儲(chǔ),尤其涉及一種分布式數(shù)據(jù)存儲(chǔ)方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)應(yīng)用的廣泛普及,海量數(shù)據(jù)的存儲(chǔ)和訪問成了系統(tǒng)設(shè)計(jì)的瓶頸問題。 對(duì)于大型的互聯(lián)網(wǎng)應(yīng)用,每天龐大的網(wǎng)站訪問無疑對(duì)數(shù)據(jù)庫造成了相當(dāng)高的負(fù)載。嚴(yán)峻考驗(yàn)系統(tǒng)的穩(wěn)定性和擴(kuò)展性。通過數(shù)據(jù)拆分減輕單臺(tái)數(shù)據(jù)庫壓力,來提高數(shù)據(jù)庫性能,橫向擴(kuò)展數(shù)據(jù)層已經(jīng)成為架構(gòu)研發(fā)人員首選的方式。水平拆分?jǐn)?shù)據(jù)庫,可以降低單臺(tái)機(jī)器的負(fù)載, 同時(shí)最大限度的降低了宕機(jī)造成的損失。有鑒于此,提供一種水平拆分?jǐn)?shù)據(jù)庫,降低單臺(tái)機(jī)器的負(fù)載,提高海量存儲(chǔ)速率, 最大限度的降低宕機(jī)造成損失的分布式數(shù)據(jù)存儲(chǔ)方法成為必要。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種水平拆分?jǐn)?shù)據(jù)庫,降低單臺(tái)機(jī)器的負(fù)載,提高海量存儲(chǔ)速率,最大限度的降低宕機(jī)造成損失的分布式數(shù)據(jù)存儲(chǔ)方法。為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種分布式數(shù)據(jù)存儲(chǔ)方法,于服務(wù)器端進(jìn)行數(shù)據(jù)庫水平拆分,所述數(shù)據(jù)庫水平拆分設(shè)置有多個(gè)節(jié)點(diǎn),其通過以下三種數(shù)據(jù)操作方式中任意一種或幾種方式組合進(jìn)行對(duì)數(shù)據(jù)信息進(jìn)行拆分,上述三種數(shù)據(jù)操作方式具體為數(shù)值范圍拆分,Hash拆分,xml文件中保存數(shù)據(jù)庫及表的配置拆分。進(jìn)一步的,所述數(shù)值范圍拆分包括以下步驟A)通過客戶端向服務(wù)器端發(fā)送數(shù)據(jù);B)通過服務(wù)器端發(fā)出指令分別在各節(jié)點(diǎn)進(jìn)行數(shù)據(jù)檢索;C)從各節(jié)點(diǎn)返回檢索到的非空記錄或返回空記錄;D)通過服務(wù)器端進(jìn)行數(shù)據(jù)整理返回客戶端。進(jìn)一步的,所述Hash拆分包括以下步驟A)通過客戶端向服務(wù)器端發(fā)送數(shù)據(jù);B)在服務(wù)器端對(duì)數(shù)據(jù)記錄中最后一條記錄的編號(hào)進(jìn)行Hash取模,并返回計(jì)算值;C)通過計(jì)算值確認(rèn)訪問節(jié)點(diǎn),對(duì)數(shù)據(jù)進(jìn)行操作;進(jìn)一步的,所述xml文件中保存數(shù)據(jù)庫及表的配置拆分包括以下步驟A)在服務(wù)端建立xml,并將全部節(jié)點(diǎn)均編序?yàn)橐粋€(gè)循環(huán)隊(duì)列;B)通過客戶端向服務(wù)器端發(fā)送數(shù)據(jù);C)在服務(wù)器端對(duì)xml中的記錄進(jìn)行檢索,并返回檢索信息包括一條非空記錄或者
一條空記錄;當(dāng)返回空記錄時(shí)先后對(duì)第一個(gè)節(jié)點(diǎn)和xml均進(jìn)行對(duì)客戶端的數(shù)據(jù)操作;在xml 中對(duì)客戶端的數(shù)據(jù)進(jìn)行操作,同時(shí)記錄對(duì)相關(guān)節(jié)點(diǎn)操作信息;當(dāng)返回非空記錄時(shí)判斷上一次操作的節(jié)點(diǎn),并對(duì)循環(huán)隊(duì)列中下一個(gè)操作節(jié)點(diǎn)進(jìn)
3行操作;對(duì)ml中的記錄進(jìn)行操作,同時(shí)更新對(duì)相關(guān)節(jié)點(diǎn)操作信息。進(jìn)一步的,在服務(wù)器端將數(shù)據(jù)庫橫向擴(kuò)展數(shù)據(jù)層負(fù)荷分擔(dān)至多臺(tái)負(fù)荷分擔(dān)電腦的數(shù)據(jù)節(jié)點(diǎn)。與現(xiàn)在技術(shù)相比,本發(fā)明提供的用于一種水平拆分?jǐn)?shù)據(jù)庫,降低單臺(tái)機(jī)器的負(fù)載, 提高海量存儲(chǔ)速率,最大限度的降低當(dāng)機(jī)造成損失的分布式數(shù)據(jù)存儲(chǔ)方法具有重要意義。
附圖用于提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實(shí)例一起用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中圖1為本發(fā)明的一種分布式數(shù)據(jù)存儲(chǔ)方法的結(jié)構(gòu)示意圖;圖2為讀數(shù)據(jù)流程圖;圖3為存數(shù)據(jù)流程圖。
具體實(shí)施例方式下面結(jié)合附圖詳細(xì)說明發(fā)明,其作為本說明書的一部分,通過實(shí)例來說明發(fā)明的原理,發(fā)明的其他方面,特征及其優(yōu)點(diǎn)通過該詳細(xì)說明將會(huì)變得一目了然。如圖1-3中任意附圖所示,為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種分布式數(shù)據(jù)存儲(chǔ)方法,于服務(wù)器端2進(jìn)行數(shù)據(jù)庫水平拆分,上述數(shù)據(jù)庫水平拆分設(shè)置有多個(gè)節(jié)點(diǎn),其通過以下三種數(shù)據(jù)操作方式中任意一種或幾種方式組合進(jìn)行對(duì)數(shù)據(jù)信息進(jìn)行拆分,上述三種數(shù)據(jù)操作方式具體為數(shù)值范圍拆分,Hash拆分,xml文件中保存數(shù)據(jù)庫及表的配置拆分。將服務(wù)器端2各數(shù)據(jù)庫拆分為多個(gè)節(jié)點(diǎn),各節(jié)點(diǎn)通過數(shù)值范圍拆分,Hash拆分, xml文件中保存數(shù)據(jù)庫及表的配置拆分的三種數(shù)據(jù)操作方式中任意一種或幾種方式組合進(jìn)行對(duì)數(shù)據(jù)信息進(jìn)行拆分。通過對(duì)數(shù)據(jù)的水平拆分并將大量的數(shù)據(jù)處理分解到各節(jié)點(diǎn),有效提高數(shù)據(jù)庫整體數(shù)據(jù)處理速率的同時(shí),還可以降低單臺(tái)機(jī)器的負(fù)載,同時(shí)最大限度的降低了 了宕機(jī)造成的損失。進(jìn)一步的,如圖2所示,上述數(shù)值范圍拆分包括以下步驟A)通過客戶端1向服務(wù)器端2發(fā)送數(shù)據(jù);B)通過服務(wù)器端2發(fā)出指令分別在各節(jié)點(diǎn)進(jìn)行數(shù)據(jù)檢索;C)從各節(jié)點(diǎn)返回檢索到的非空記錄或返回空記錄;D)通過服務(wù)器端2進(jìn)行數(shù)據(jù)整理返回客戶端1。作為在數(shù)據(jù)范圍拆分中,假如將200條數(shù)據(jù)分布在兩個(gè)數(shù)據(jù)節(jié)點(diǎn)a21和節(jié)點(diǎn)b22
中,按ID數(shù)據(jù)序列如,在ID為1、3、5、7......的奇數(shù)數(shù)據(jù)保存在節(jié)點(diǎn)a21中,ID為2、4、6、
8......的偶數(shù)數(shù)據(jù)保存在節(jié)點(diǎn)b中。如果要獲取ID為1的數(shù)據(jù),則在兩個(gè)節(jié)點(diǎn)中分別執(zhí)
行以下語句。執(zhí)行如下語句Select*from Table where ID = 1。此時(shí),在節(jié)點(diǎn)a21返回ID為1的記錄,數(shù)據(jù)庫B返回空記錄。這時(shí)合并節(jié)點(diǎn)a21 和節(jié)點(diǎn)b22返回的記錄,就可以得到正確的結(jié)果。又如,執(zhí)行如下語句Select top 10*from Table order by ID。此時(shí),節(jié)點(diǎn)a21將返回10條數(shù)據(jù),節(jié)點(diǎn)b22也返回10條數(shù)據(jù),合并節(jié)點(diǎn)a21和節(jié)點(diǎn)b22返回的記錄,得到20條記錄數(shù)據(jù)表,此時(shí),須要篩選正確的10條記錄。即,還需要對(duì)返回的記錄執(zhí)行如下語句Select*from Table order by ID。節(jié)點(diǎn)a21和節(jié)點(diǎn)b22返回的所有的記錄,再次執(zhí)行排序和top取值。通過對(duì)節(jié)點(diǎn) a和節(jié)點(diǎn)b分別返回的10條記錄合并后、排序、移除的操作,得到最終正確結(jié)果。在查詢數(shù)據(jù)時(shí)需要處理的關(guān)鍵字還有如最大值(max),最小值(min),求和 (count),求平均(avg)等運(yùn)算,同數(shù)據(jù)節(jié)點(diǎn)上的查詢,可以轉(zhuǎn)化成對(duì)單一數(shù)據(jù)庫查詢等效的結(jié)果。而這些處理歸納起來,只有合并,排序,移除這三種情況,其實(shí)這和Map (映射)/ Reduce (簡化)思想非常的類似,無論多么復(fù)雜的動(dòng)作,最終歸結(jié)都可以通過幾個(gè)簡單的并合后、排序、移除的操作完成。在海量數(shù)據(jù)的存儲(chǔ)和訪問中,多個(gè)節(jié)點(diǎn)同時(shí)將分解的數(shù)據(jù)進(jìn)行檢索,返回到同一個(gè)數(shù)據(jù)處理記錄表中,排序和取值,使多個(gè)數(shù)據(jù)節(jié)點(diǎn)共同分擔(dān)負(fù)荷,可以提高服務(wù)器速率,減小運(yùn)算時(shí)間,減小宕機(jī)機(jī)率。進(jìn)一步的,如圖3所示,上述Hash拆分包括以下步驟A)通過客戶端1向服務(wù)器端2發(fā)送數(shù)據(jù);B)在服務(wù)器端2對(duì)數(shù)據(jù)記錄中最后一條記錄的ID進(jìn)行Hash取模,并返回計(jì)算值;C)通過計(jì)算值確認(rèn)訪問節(jié)點(diǎn),對(duì)數(shù)據(jù)進(jìn)行操作。對(duì)服務(wù)器數(shù)據(jù)記錄中最后一條記錄的ID進(jìn)行Hash取值,用一種特定的取值方式進(jìn)行取模(如用當(dāng)前設(shè)置的節(jié)點(diǎn)數(shù)進(jìn)行取模),如需將一個(gè)數(shù)據(jù)表拆分成5個(gè)數(shù)據(jù)節(jié)點(diǎn), 我們就用5這個(gè)數(shù)字對(duì)最后一條記錄的ID進(jìn)行hash取值和取模運(yùn)算,也就是5,當(dāng)返回1時(shí)候,對(duì)應(yīng)DBa32 ;當(dāng)返回2時(shí),對(duì)應(yīng)DBb33 ;當(dāng)返回3時(shí),對(duì)應(yīng)DBc34 ;當(dāng)返回4時(shí),對(duì)應(yīng) DBd35,當(dāng)返回0時(shí),對(duì)應(yīng)DBe36,這樣可以做到非常均勻的將數(shù)據(jù)分配到5個(gè)DB中。進(jìn)一步的,如圖3所示,上述xml文件中保存數(shù)據(jù)庫及表的配置拆分包括以下步驟A)在服務(wù)端建立xml31,并將全部節(jié)點(diǎn)均編序?yàn)橐粋€(gè)循環(huán)隊(duì)列;B)通過客戶端1向服務(wù)器端2發(fā)送數(shù)據(jù);C)在服務(wù)器端2對(duì)xml31中的記錄進(jìn)行檢索,并返回檢索信息包括一條非空記錄或者一條空記錄;當(dāng)返回空記錄時(shí)對(duì)第一個(gè)節(jié)點(diǎn)32和xml31均進(jìn)行對(duì)客戶端1的數(shù)據(jù)操作;在xml 中對(duì)客戶端1的數(shù)據(jù)進(jìn)行操作,同時(shí)記錄對(duì)相關(guān)節(jié)點(diǎn)操作信息;當(dāng)返回非空記錄時(shí)判斷上一次操作的節(jié)點(diǎn),并對(duì)循環(huán)隊(duì)列中下一個(gè)操作節(jié)點(diǎn)進(jìn)行操作;對(duì)ml31中的記錄進(jìn)行操作,同時(shí)更新對(duì)相關(guān)節(jié)點(diǎn)操作信息。在服務(wù)器端2建立一個(gè)DB文件xml31,這個(gè)DB單獨(dú)保存ID到DB的映射關(guān)系,每次訪問數(shù)據(jù)庫的時(shí)候都要先查詢一次這個(gè)數(shù)據(jù)庫,以得到具體的記錄信息,然后進(jìn)行所需要的數(shù)據(jù)操作。進(jìn)一步的,在服務(wù)器端2將數(shù)據(jù)庫橫向擴(kuò)展數(shù)據(jù)層負(fù)荷分擔(dān)至多臺(tái)負(fù)荷分擔(dān)電腦的數(shù)據(jù)節(jié)點(diǎn)。水平拆分?jǐn)?shù)據(jù)庫,可以降低單臺(tái)機(jī)器的負(fù)載,同時(shí)最大限度的降低了了當(dāng)機(jī)造成的損失。上面只是一些簡單的數(shù)據(jù)處理,面對(duì)一些復(fù)雜的數(shù)據(jù)處理,要在數(shù)據(jù)處理的過程中,進(jìn)行數(shù)據(jù)節(jié)點(diǎn)之間的數(shù)據(jù)交換才能完成的。因此要實(shí)現(xiàn)一個(gè)完全能夠處理SQL語句的分布式數(shù)據(jù)庫,需要在數(shù)據(jù)庫的內(nèi)核部分進(jìn)行改動(dòng)。在實(shí)現(xiàn)這個(gè)組件時(shí),時(shí)間是有限的,進(jìn)行內(nèi)核部分的改造不現(xiàn)實(shí),所以我采取了中間件的方式,來實(shí)現(xiàn)了這個(gè)分布式數(shù)據(jù)庫。與現(xiàn)在技術(shù)相比,本發(fā)明提供的用于一種水平拆分?jǐn)?shù)據(jù)庫,降低單臺(tái)機(jī)器的負(fù)載,提高海量存儲(chǔ)速率,最大限度的降低當(dāng)機(jī)造成損失的分布式數(shù)據(jù)存儲(chǔ)方法具有重要意義。
以上所揭示的僅為發(fā)明的較佳實(shí)例而已,當(dāng)然不能以此來限定發(fā)明之權(quán)利范圍, 因此依發(fā)明申請專利范圍所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。
權(quán)利要求
1.一種分布式數(shù)據(jù)存儲(chǔ)方法,其特征在于于服務(wù)器端進(jìn)行數(shù)據(jù)庫水平拆分,所述數(shù)據(jù)庫水平拆分設(shè)置有多個(gè)節(jié)點(diǎn),其通過以下三種數(shù)據(jù)操作方式中任意一種或幾種方式組合進(jìn)行對(duì)數(shù)據(jù)信息進(jìn)行拆分,上述三種數(shù)據(jù)操作方式具體為數(shù)值范圍拆分,Hash拆分,xml 文件中保存數(shù)據(jù)庫及表的配置拆分。
2.根據(jù)權(quán)利要求1所述的一種分布式數(shù)據(jù)存儲(chǔ)方法,其特征在于所述數(shù)值范圍拆分包括以下步驟A)通過客戶端向服務(wù)器端發(fā)送數(shù)據(jù);B)通過服務(wù)器端發(fā)出指令分別在各節(jié)點(diǎn)進(jìn)行數(shù)據(jù)檢索;C)從各節(jié)點(diǎn)返回檢索到的非空記錄或返回空記錄;D)通過服務(wù)器端進(jìn)行數(shù)據(jù)整理返回客戶端。
3.根據(jù)權(quán)利要求1所述的一種分布式數(shù)據(jù)存儲(chǔ)方法,其特征在于所述Hash拆分包括以下步驟A)通過客戶端向服務(wù)器端發(fā)送數(shù)據(jù);B)在服務(wù)器端對(duì)數(shù)據(jù)記錄中最后一條記錄的編號(hào)進(jìn)行Hash取模,并返回計(jì)算值;C)通過計(jì)算值確認(rèn)訪問節(jié)點(diǎn),對(duì)數(shù)據(jù)進(jìn)行操作。
4.根據(jù)權(quán)利要求1所述的一種分布式數(shù)據(jù)存儲(chǔ)方法,其特征在于所述xml文件中保存數(shù)據(jù)庫及表的配置拆分包括以下步驟A)在服務(wù)端建立xml,并將全部節(jié)點(diǎn)均編序?yàn)橐粋€(gè)循環(huán)隊(duì)列;B)通過客戶端向服務(wù)器端發(fā)送數(shù)據(jù);C)在服務(wù)器端對(duì)xml中的記錄進(jìn)行檢索,并返回檢索信息包括一條非空記錄或者一條空記錄;當(dāng)返回空記錄時(shí)對(duì)第一個(gè)節(jié)點(diǎn)和xml均進(jìn)行對(duì)客戶端的數(shù)據(jù)操作;在xml中對(duì)客戶端的數(shù)據(jù)進(jìn)行操作,同時(shí)記錄對(duì)相關(guān)節(jié)點(diǎn)操作信息;當(dāng)返回非空記錄時(shí)判斷上一次操作的節(jié)點(diǎn),并對(duì)循環(huán)隊(duì)列中下一個(gè)操作節(jié)點(diǎn)進(jìn)行操作;對(duì)xml中的記錄進(jìn)行操作,同時(shí)更新對(duì)相關(guān)節(jié)點(diǎn)操作信息。
5.根據(jù)權(quán)利要求1所述的一種分布式數(shù)據(jù)存儲(chǔ)方法,其特征在于在服務(wù)器端將數(shù)據(jù)庫橫向擴(kuò)展數(shù)據(jù)層負(fù)荷分擔(dān)至多臺(tái)負(fù)荷分擔(dān)電腦的數(shù)據(jù)節(jié)點(diǎn)。
全文摘要
本發(fā)明公開了一種分布式數(shù)據(jù)存儲(chǔ)方法,于服務(wù)器端進(jìn)行數(shù)據(jù)庫水平拆分,所述數(shù)據(jù)庫水平拆分設(shè)置有多個(gè)節(jié)點(diǎn),其通過以下三種數(shù)據(jù)操作方式中任意一種或幾種方式組合進(jìn)行對(duì)數(shù)據(jù)信息進(jìn)行拆分,上述三種數(shù)據(jù)操作方式具體為數(shù)值范圍拆分,Hash拆分,xml文件中保存數(shù)據(jù)庫及表的配置拆分。該方法能降低單臺(tái)機(jī)器的負(fù)載,提高海量存儲(chǔ)速率,最大限度的降低宕機(jī)造成的損失。
文檔編號(hào)G06F17/30GK102402586SQ20111032770
公開日2012年4月4日 申請日期2011年10月24日 優(yōu)先權(quán)日2011年10月24日
發(fā)明者劉翔, 彭平源, 管燕卿, 黃有富 申請人:深圳華強(qiáng)電子交易網(wǎng)絡(luò)有限公司