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