亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

分布式數(shù)據(jù)庫系統(tǒng)及其自適應(yīng)方法與流程

文檔序號:12666204閱讀:404來源:國知局
分布式數(shù)據(jù)庫系統(tǒng)及其自適應(yīng)方法與流程

本發(fā)明涉及數(shù)據(jù)庫領(lǐng)域,尤其涉及一種分布式數(shù)據(jù)庫系統(tǒng)及其自適應(yīng)方法。



背景技術(shù):

分布式數(shù)據(jù)庫一般是有多臺具有計算、存儲、網(wǎng)絡(luò)通訊功能的數(shù)據(jù)節(jié)點構(gòu)成的數(shù)據(jù)庫集群系統(tǒng),具有高性能、高可靠的優(yōu)點,已在電信、銀行、互聯(lián)網(wǎng)等行業(yè)廣泛使用;現(xiàn)有的分布式數(shù)據(jù)庫由數(shù)據(jù)訪問代理節(jié)點和數(shù)據(jù)存儲節(jié)點組成,數(shù)據(jù)存儲節(jié)點按照數(shù)據(jù)關(guān)鍵字被分成多個數(shù)據(jù)存儲集群,每個數(shù)據(jù)存儲集群有1個數(shù)據(jù)存儲主節(jié)點和多個數(shù)據(jù)存儲備節(jié)點,主節(jié)點提供讀寫數(shù)據(jù)服務(wù),備節(jié)點僅提供讀數(shù)據(jù)服務(wù),主節(jié)點寫入的數(shù)據(jù)會復(fù)制到備節(jié)點;數(shù)據(jù)訪問代理節(jié)點負責(zé)代理數(shù)據(jù)訪問者的數(shù)據(jù)操作請求,并轉(zhuǎn)發(fā)到對應(yīng)的數(shù)據(jù)存儲集群的相應(yīng)數(shù)據(jù)存儲節(jié)點處理;這種分布式數(shù)據(jù)庫因數(shù)據(jù)節(jié)點較多,數(shù)據(jù)節(jié)點間相互依賴,帶來如下問題:

1、訪問效率低

現(xiàn)有分布式數(shù)據(jù)庫中有專門的數(shù)據(jù)訪問代理節(jié)點,延長了數(shù)據(jù)訪問者的數(shù)據(jù)訪問路徑,降低了數(shù)據(jù)訪問者的處理效率;

2、節(jié)點間數(shù)據(jù)容量和負荷不均衡

數(shù)據(jù)存儲節(jié)點間有主備之分,使得在寫數(shù)據(jù)的頻率較高時,只能在主節(jié)點上寫入數(shù)據(jù),導(dǎo)致主節(jié)點的負荷較重,易達到性能瓶頸,而數(shù)據(jù)備節(jié)點因只提供讀服務(wù),且有多個節(jié)點,資源利用不充分,導(dǎo)致數(shù)據(jù)節(jié)點間數(shù)據(jù)容量和負荷不均衡,部分數(shù)據(jù)節(jié)點存在性能瓶頸或者資源浪費;當(dāng)某個數(shù)據(jù)節(jié)點故障后,其上面的數(shù)據(jù)只能被單個或者部分數(shù)據(jù)節(jié)點(備用節(jié)點)分擔(dān)處理,加劇節(jié)點間負載不均衡;

3、數(shù)據(jù)分布難以調(diào)整,數(shù)據(jù)難以平滑遷移

一旦增減數(shù)據(jù)節(jié)點時,特別是在虛擬化環(huán)境下,數(shù)據(jù)節(jié)點的彈性伸縮是常態(tài),需經(jīng)常調(diào)整數(shù)據(jù)在數(shù)據(jù)節(jié)點上的分布,需人工執(zhí)行命令或者重啟來調(diào)整數(shù)據(jù)的分布或者數(shù)據(jù)分布調(diào)整的過程較長,給分布式數(shù)據(jù)庫穩(wěn)定運行和服 務(wù)質(zhì)量帶來較大的風(fēng)險;

4、狀態(tài)維護復(fù)雜

數(shù)據(jù)存儲主備節(jié)點間采用主備單向復(fù)制,主節(jié)點故障,需要重新選舉新的主節(jié)點,系統(tǒng)狀態(tài)維護復(fù)雜;

目前業(yè)界對于以上分布式數(shù)據(jù)庫的問題,通常處理方式是:把數(shù)據(jù)按照范圍或者數(shù)據(jù)關(guān)鍵字的HASH值劃分為多個分片,再按照一致性HASH算法,將分片均勻分布到數(shù)據(jù)節(jié)點上,但對于每個分片的副本(備份)分布未考慮節(jié)點間的均勻性;以上基于一致性HASH分布方式又帶來了新的問題,即在增減節(jié)點時,有時調(diào)整的分片很少,有時調(diào)整的分片較多,數(shù)據(jù)分片在節(jié)點間調(diào)整是不可預(yù)見的,遷移的數(shù)據(jù)分片數(shù)量不可控。



技術(shù)實現(xiàn)要素:

本發(fā)明實施例提供一種分布式數(shù)據(jù)庫系統(tǒng)及其自適應(yīng)方法,以改善現(xiàn)有分布式數(shù)據(jù)庫系統(tǒng)內(nèi)的節(jié)點間負荷不均衡、數(shù)據(jù)分布難以調(diào)整、數(shù)據(jù)遷移不平滑及維護復(fù)雜的問題。

本發(fā)明公開了一種分布式數(shù)據(jù)庫系統(tǒng),上述系統(tǒng)包括控制節(jié)點、客戶端API及數(shù)據(jù)節(jié)點,上述

控制節(jié)點,用于管理系統(tǒng)的數(shù)據(jù)節(jié)點,計算系統(tǒng)的數(shù)據(jù)路由并廣播給客戶端API及數(shù)據(jù)節(jié)點;

客戶端API,用于為數(shù)據(jù)訪問者提供讀/寫數(shù)據(jù)的接口,并將接收到的數(shù)據(jù)操作請求按照本地緩存的數(shù)據(jù)路由,轉(zhuǎn)發(fā)給相應(yīng)的數(shù)據(jù)節(jié)點;

數(shù)據(jù)節(jié)點,用于存儲數(shù)據(jù)分片,以及根據(jù)本地緩存的數(shù)據(jù)路由,處理收到的數(shù)據(jù)操作請求。

優(yōu)選地,上述數(shù)據(jù)節(jié)點以虛擬機或者計算存儲主機方式部署在上述系統(tǒng)中。

優(yōu)選地,上述客戶端AP以動態(tài)庫或插件方式供數(shù)據(jù)訪問者操作。

優(yōu)選地,上述控制節(jié)點,用于實時監(jiān)控系統(tǒng)中數(shù)據(jù)節(jié)點的數(shù)量及狀態(tài)變化,并在數(shù)據(jù)節(jié)點數(shù)量變化時,執(zhí)行節(jié)點擴容/縮容操作;在數(shù)據(jù)節(jié)點狀態(tài)變化時,更新數(shù)據(jù)路由中對應(yīng)數(shù)據(jù)節(jié)點的狀態(tài)并廣播更新后的數(shù)據(jù)路由。

優(yōu)選地,上述客戶端API,用于根據(jù)收到數(shù)據(jù)操作請求中的數(shù)據(jù)關(guān)鍵字,計算請求數(shù)據(jù)對應(yīng)的數(shù)據(jù)分片,并在本地緩存的數(shù)據(jù)路由中查找每個數(shù)據(jù)分 片所在的數(shù)據(jù)節(jié)點;以及按照本地緩存的數(shù)據(jù)節(jié)點選取規(guī)則,將上述數(shù)據(jù)操作請求轉(zhuǎn)發(fā)給相應(yīng)的數(shù)據(jù)節(jié)點。

優(yōu)選地,上述數(shù)據(jù)節(jié)點,用于在收到數(shù)據(jù)操作請求后,在本地緩存的數(shù)據(jù)路由中查找上述數(shù)據(jù)操作請求中的數(shù)據(jù)分片是否存儲在本數(shù)據(jù)節(jié)點中;并在上述數(shù)據(jù)分片未存儲在本數(shù)據(jù)節(jié)點時,在本地緩存的數(shù)據(jù)路由中查找上述數(shù)據(jù)分片所在的數(shù)據(jù)節(jié)點,并將上述數(shù)據(jù)操作請求轉(zhuǎn)發(fā)給找到的數(shù)據(jù)節(jié)點;在上述數(shù)據(jù)分片存儲在本數(shù)據(jù)節(jié)點中時,執(zhí)行上述數(shù)據(jù)操作請求,并向數(shù)據(jù)訪問者返回數(shù)據(jù)操作響應(yīng)。

優(yōu)選地,上述數(shù)據(jù)節(jié)點,用于周期性向上述控制節(jié)點上報自身狀態(tài);以及在鏈路變化時,實時向控制節(jié)點上報自身狀態(tài);

上述控制節(jié)點,用于周期性更新數(shù)據(jù)路由。

優(yōu)選地,上述數(shù)據(jù)節(jié)點,用于執(zhí)行數(shù)據(jù)恢復(fù)操作及數(shù)據(jù)復(fù)制操作;

上述控制節(jié)點,用于按照預(yù)設(shè)的分域規(guī)則,對數(shù)據(jù)節(jié)點進行分域。

本發(fā)明進一步公開了一種分布式數(shù)據(jù)庫系統(tǒng)的自適應(yīng)方法,上述方法在系統(tǒng)上電后,執(zhí)行以下步驟:

控制節(jié)點計算系統(tǒng)的數(shù)據(jù)路由并廣播給客戶API及所有數(shù)據(jù)節(jié)點;

客戶端API接收訪問者的數(shù)據(jù)操作請求,按照本地緩存的數(shù)據(jù)路由,將上述請求轉(zhuǎn)發(fā)給對應(yīng)的數(shù)據(jù)節(jié)點;

數(shù)據(jù)節(jié)點處理收到的數(shù)據(jù)操作請求,并返回數(shù)據(jù)操作響應(yīng)給訪問者。

優(yōu)選地,上述控制節(jié)點在計算系統(tǒng)的數(shù)據(jù)路由前,還執(zhí)行以下步驟:

按照預(yù)設(shè)的分域規(guī)則,對數(shù)據(jù)節(jié)點進行分域。

優(yōu)選地,上述分域規(guī)則為:若數(shù)據(jù)節(jié)點歸屬的主機/服務(wù)器數(shù)量為1,則將所述數(shù)據(jù)節(jié)點劃分為左域或右域;若數(shù)據(jù)節(jié)點歸屬的主機/服務(wù)器數(shù)量大于等于2,則按照數(shù)據(jù)節(jié)點歸屬的主機/服務(wù)器均勻分布原則,將數(shù)據(jù)節(jié)點劃分為左域和右域,使屬于同一主機/服務(wù)器的數(shù)據(jù)節(jié)點位于同一域。

優(yōu)選地,上述控制節(jié)點根據(jù)系統(tǒng)的數(shù)據(jù)節(jié)點數(shù)量及數(shù)據(jù)分片數(shù)量,計算每個數(shù)據(jù)節(jié)點上需要分布的數(shù)據(jù)分片數(shù)量,生成數(shù)據(jù)路由。

優(yōu)選地,上述客戶端API按照本地緩存的數(shù)據(jù)路由,將上述請求轉(zhuǎn)發(fā)給對應(yīng)的數(shù)據(jù)節(jié)點步驟具體為:

根據(jù)數(shù)據(jù)操作請求中的數(shù)據(jù)關(guān)鍵字,計算相應(yīng)的數(shù)據(jù)分片;

在本地緩存的數(shù)據(jù)路由中查找每個數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)節(jié)點;

按照預(yù)設(shè)的數(shù)據(jù)節(jié)點選擇規(guī)則,將上述數(shù)據(jù)操作請求分別轉(zhuǎn)發(fā)給找到的數(shù)據(jù)節(jié)點。

優(yōu)選地,上述數(shù)據(jù)節(jié)點選取規(guī)則為:

當(dāng)查找到的數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)節(jié)點數(shù)為1時,直接將上述數(shù)據(jù)操作請求轉(zhuǎn)發(fā)給上述數(shù)據(jù)節(jié)點;

當(dāng)查找到的數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)節(jié)點數(shù)大于1時,判斷上述數(shù)據(jù)操作請求的類型,若為寫操作,則查看上述每個數(shù)據(jù)節(jié)點中的上述數(shù)據(jù)分片的副本號及數(shù)據(jù)節(jié)點的狀態(tài),將上述數(shù)據(jù)操作請求發(fā)送給狀態(tài)正常且副本號小的數(shù)據(jù)節(jié)點;若為讀操作,則將上述數(shù)據(jù)操作請求發(fā)送給負荷最小的數(shù)據(jù)節(jié)點。

優(yōu)選地,上述數(shù)據(jù)節(jié)點通過如下方法處理收到的數(shù)據(jù)操作請求:

在本地緩存的數(shù)據(jù)路由中查找上述數(shù)據(jù)操作請求中的數(shù)據(jù)分片是否存儲在本數(shù)據(jù)節(jié)點中;若是,則執(zhí)行上述數(shù)據(jù)操作請求,并向數(shù)據(jù)訪問者返回數(shù)據(jù)操作響應(yīng);否則,在本地緩存的數(shù)據(jù)路由中查找上述數(shù)據(jù)分片所在的數(shù)據(jù)節(jié)點,將上述數(shù)據(jù)操作請求轉(zhuǎn)發(fā)給找到的數(shù)據(jù)節(jié)點。

優(yōu)選地,上述執(zhí)行數(shù)據(jù)操作請求具體為:

當(dāng)上述數(shù)據(jù)操作請求為寫操作時,根據(jù)訪問者的操作方式,對數(shù)據(jù)分片存儲于本地的副本進行增加、修改或刪除操作;

當(dāng)上述數(shù)據(jù)操作請求為讀操作時,從數(shù)據(jù)分片存儲于本地的副本中讀取數(shù)據(jù)。

優(yōu)選地,上述方法數(shù)據(jù)操作請求為寫操作時,在處理完上述數(shù)據(jù)操作請求后,執(zhí)行數(shù)據(jù)復(fù)制流程,具體為:

記錄數(shù)據(jù)分片變更的數(shù)據(jù)或者全數(shù)據(jù);

在本地緩存的數(shù)據(jù)路由中查找上述數(shù)據(jù)分片其余副本所在的數(shù)據(jù)節(jié)點,向數(shù)據(jù)分片其余副本所在的數(shù)據(jù)節(jié)點復(fù)制上述數(shù)據(jù)分片變更的數(shù)據(jù)或全數(shù)據(jù)。

優(yōu)選地,上述控制節(jié)點在系統(tǒng)運行過程中,還執(zhí)行以下步驟:

實時監(jiān)控系統(tǒng)中是否有數(shù)據(jù)節(jié)點新增或者刪除,若有數(shù)據(jù)節(jié)點新增,則執(zhí)行節(jié)點擴容操作;若有數(shù)據(jù)節(jié)點刪除,則執(zhí)行節(jié)點縮容操作。

優(yōu)選地,上述節(jié)點擴容操作具體包括以下步驟:

計算要遷移到新增數(shù)據(jù)節(jié)點上的第一副本數(shù)據(jù)分片列表及第二副本數(shù)據(jù)分片列表;

在新增數(shù)據(jù)節(jié)點上為待遷入數(shù)據(jù)分片分配第三副本,重新計算系統(tǒng)的數(shù)據(jù)路由并廣播;

等待新增數(shù)據(jù)節(jié)點恢復(fù)數(shù)據(jù);

收到新增數(shù)據(jù)節(jié)點上報的自身狀態(tài),根據(jù)預(yù)設(shè)的擴容規(guī)則,重新計算系統(tǒng)的數(shù)據(jù)路由并廣播;

通知所有數(shù)據(jù)節(jié)點刪除本地所有數(shù)據(jù)分片的第三副本;

確認所有數(shù)據(jù)節(jié)點刪除完成后,刪除本地數(shù)據(jù)路由中的第三副本,重新計算系統(tǒng)的數(shù)據(jù)路由并廣播。

優(yōu)選地,上述計算要遷移到新增數(shù)據(jù)節(jié)點上的第一副本數(shù)據(jù)分片列表及第二副本數(shù)據(jù)分片列表步驟具體為:

用數(shù)據(jù)分片總數(shù)除以包含新增數(shù)據(jù)節(jié)點在內(nèi)的數(shù)據(jù)節(jié)點總數(shù),計算出每個數(shù)據(jù)節(jié)點要存儲的平均數(shù)據(jù)分片數(shù)量;

用每個數(shù)據(jù)節(jié)點的當(dāng)前數(shù)據(jù)分片數(shù)量減去計算得到的平均數(shù)據(jù)分片數(shù)量,計算出從每個原有數(shù)據(jù)節(jié)點應(yīng)遷移到新增數(shù)據(jù)節(jié)點的數(shù)據(jù)分片數(shù)量;

所有要從原有數(shù)據(jù)節(jié)點中遷出的數(shù)據(jù)分片的第一副本組成新增數(shù)據(jù)節(jié)點的第一副本數(shù)據(jù)分片列表,所有要從原有數(shù)據(jù)節(jié)點中遷出的數(shù)據(jù)分片的第二副本組成新增數(shù)據(jù)節(jié)點的第二副本數(shù)據(jù)分片列表。

優(yōu)選地,上述預(yù)設(shè)的擴容規(guī)則為:

通知原有數(shù)據(jù)節(jié)點將本地待遷移到新增數(shù)據(jù)節(jié)點上的數(shù)據(jù)分片的第一副本切換為第三副本;同時通知新增數(shù)據(jù)節(jié)點將對應(yīng)的數(shù)據(jù)分片的第三副本切換為第一副本;

通知原有數(shù)據(jù)節(jié)點將本地待遷移到新增數(shù)據(jù)節(jié)點上的數(shù)據(jù)分片的第二副本切換為第三副本;同時通知新增數(shù)據(jù)節(jié)點將對應(yīng)的數(shù)據(jù)分片的第三副本切換為第二副本。

優(yōu)選地,上述節(jié)點縮容操作具體包括以下步驟:

計算各剩余節(jié)點上第一副本數(shù)據(jù)分片列表和第二副本數(shù)據(jù)分片列表;

在剩余數(shù)據(jù)節(jié)點上為待遷入數(shù)據(jù)分片分配第三副本,重新計算系統(tǒng)的數(shù) 據(jù)路由并廣播;

等待其余數(shù)據(jù)節(jié)點恢復(fù)數(shù)據(jù);

等待其余數(shù)據(jù)節(jié)點復(fù)制數(shù)據(jù);

收到其余數(shù)據(jù)節(jié)點上報的自身狀態(tài),根據(jù)預(yù)設(shè)的縮容規(guī)則,重新計算系統(tǒng)的數(shù)據(jù)路由并廣播;

通知所有數(shù)據(jù)節(jié)點刪除本地所有數(shù)據(jù)分片的第三副本;

確認所有數(shù)據(jù)節(jié)點刪除完成后,刪除本地數(shù)據(jù)路由中的第三副本,重新計算系統(tǒng)的數(shù)據(jù)路由并廣播。

優(yōu)選地,上述計算各剩余節(jié)點上第一副本數(shù)據(jù)分片列表和第二副本數(shù)據(jù)分片列表步驟具體為:

用數(shù)據(jù)分片總數(shù)除以剩余數(shù)據(jù)節(jié)點數(shù),計算出剩余數(shù)據(jù)節(jié)點中每個數(shù)據(jù)節(jié)點要存儲的平均數(shù)據(jù)分片數(shù)量;

用平均數(shù)據(jù)分片數(shù)量減去每個剩余數(shù)據(jù)節(jié)點上當(dāng)前數(shù)據(jù)分片數(shù)量,計算出每個剩余數(shù)據(jù)節(jié)點上應(yīng)從待關(guān)閉節(jié)點遷入的數(shù)據(jù)分片數(shù);

根據(jù)預(yù)設(shè)的數(shù)據(jù)分片分布原則,將待刪除數(shù)據(jù)節(jié)點上的數(shù)據(jù)分片第一副本和第二副本,分配到剩余數(shù)據(jù)節(jié)點上,得到每個剩余節(jié)點上第一副本數(shù)據(jù)分片列表和第二副本數(shù)據(jù)分片列表。

優(yōu)選地,上述預(yù)設(shè)的縮容規(guī)則為:

通知待刪除數(shù)據(jù)節(jié)點將待遷移數(shù)據(jù)分片的第一副本切換為第三副本;同時通知存儲有上述數(shù)據(jù)分片第三副本的剩余數(shù)據(jù)節(jié)點將上述數(shù)據(jù)分片的第三副本切換為第一副本;

通知待刪除數(shù)據(jù)節(jié)點將待遷移數(shù)據(jù)分片的第二副本切換為第三副本;同時通知存儲有上述數(shù)據(jù)分片第三副本的剩余數(shù)據(jù)節(jié)點將上述數(shù)據(jù)分片的第三副本切換為第二副本。

優(yōu)選地,上述數(shù)據(jù)分片分布原則為:

每個數(shù)據(jù)節(jié)點上的數(shù)據(jù)分片數(shù)量盡量相同;且

每個數(shù)據(jù)分片的第一副本和第二副本分布在不同域的數(shù)據(jù)節(jié)點上;以及

每個數(shù)據(jù)節(jié)點上所有第一副本數(shù)據(jù)分片的第二副本均勻分布在異域的所有數(shù)據(jù)節(jié)點上。

優(yōu)選地,上述數(shù)據(jù)節(jié)點通過如下步驟恢復(fù)數(shù)據(jù):

查詢本地數(shù)據(jù)路由,獲取本節(jié)點上第一副本數(shù)據(jù)分片的第三副本所在的數(shù)據(jù)節(jié)點;

向第三副本所在的數(shù)據(jù)節(jié)點復(fù)制相應(yīng)數(shù)據(jù)分片;

恢復(fù)完成,向控制節(jié)點上報自身狀態(tài)。

優(yōu)選地,上述增加的數(shù)據(jù)節(jié)點為新加入系統(tǒng)的數(shù)據(jù)節(jié)點;

上述刪除的數(shù)據(jù)節(jié)點包括:因負擔(dān)小于預(yù)設(shè)值而需要刪除的數(shù)據(jù)節(jié)點及因收到用戶刪除指令而要求刪除的數(shù)據(jù)節(jié)點。

優(yōu)選地,上述客戶端API通過對數(shù)據(jù)關(guān)鍵字取HASH值,再對HASH值取數(shù)據(jù)分片總數(shù)的模值方式來確定請求數(shù)據(jù)的分片數(shù)量。

與現(xiàn)有技術(shù)相比,本發(fā)明無需經(jīng)過專門的代理訪問節(jié)點,數(shù)據(jù)訪問路徑更短,效率更高;數(shù)據(jù)分片存儲和管理,數(shù)據(jù)節(jié)點無主備之分,同分片的多副本數(shù)據(jù)可相互復(fù)制,使得分布式數(shù)據(jù)庫的節(jié)點間負載更加均衡;數(shù)據(jù)路由自動計算和分發(fā),數(shù)據(jù)遷移過程可控,更加平滑和均勻,無需人工干預(yù),且不會中斷訪問。

附圖說明

圖1是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)的框架示意圖;

圖2是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法優(yōu)選實施例流程圖;

圖3是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中數(shù)據(jù)節(jié)點發(fā)現(xiàn)過程優(yōu)選實施例流程圖;

圖4是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中數(shù)據(jù)節(jié)點狀態(tài)管理過程優(yōu)選實施例流程圖;

圖5是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中數(shù)據(jù)復(fù)制優(yōu)選實施例流程圖;

圖6是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中節(jié)點擴容操作優(yōu)選實施例流程圖;

圖7是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中節(jié)點縮容操作優(yōu)選實施例流程圖;

圖8是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中數(shù)據(jù)節(jié)點恢復(fù)數(shù)據(jù)過程優(yōu)選實施例流程圖;

為了使本發(fā)明的技術(shù)方案更加清楚、明了,下面將結(jié)合附圖作進一步詳 述。

具體實施方式

應(yīng)當(dāng)理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

如圖1所示,是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)的框架示意圖;本實施例包括控制節(jié)點10、客戶端API 20、數(shù)據(jù)節(jié)點30,本實施例包括4個數(shù)據(jù)節(jié)點30;其中,

控制節(jié)點10,用于管理系統(tǒng)的數(shù)據(jù)節(jié)點30,計算系統(tǒng)的數(shù)據(jù)路由并廣播給客戶端API 20及數(shù)據(jù)節(jié)點30;具體包括:

周期性更新數(shù)據(jù)路由并廣播;

實時監(jiān)控系統(tǒng)中數(shù)據(jù)節(jié)點30的數(shù)量及狀態(tài)變化,并在系統(tǒng)中的數(shù)據(jù)節(jié)點30的數(shù)量變化時,執(zhí)行節(jié)點擴容/縮容操作;

在數(shù)據(jù)節(jié)點30狀態(tài)變化時,更新數(shù)據(jù)路由中對應(yīng)數(shù)據(jù)節(jié)點30的狀態(tài)并廣播更新后的數(shù)據(jù)路由;以及

按照預(yù)設(shè)的分域規(guī)則,對數(shù)據(jù)節(jié)點30進行分域;

上述分域規(guī)則為:

若數(shù)據(jù)節(jié)點歸屬的主機/服務(wù)器數(shù)量為1,則將所述數(shù)據(jù)節(jié)點劃分為左域或右域;若數(shù)據(jù)節(jié)點歸屬的主機/服務(wù)器數(shù)量大于等于2,則按照數(shù)據(jù)節(jié)點歸屬的主機/服務(wù)器均勻分布原則(即使分布在左域和右域中的主機/服務(wù)器數(shù)量盡量相同),將數(shù)據(jù)節(jié)點劃分為左域和右域,使屬于同一主機/服務(wù)器的數(shù)據(jù)節(jié)點位于同一域。

例如,如圖1所示,將4個數(shù)據(jù)節(jié)點依次從左到右編號為1-4;若4個數(shù)據(jù)節(jié)點歸屬于同1個主機/服務(wù)器,則將4個數(shù)據(jù)節(jié)點全部劃分到左域或者右域;若4個數(shù)據(jù)節(jié)點歸屬于同2個主機/服務(wù)器,假設(shè)編號為1和2的數(shù)據(jù)節(jié)點歸屬于第一主機/服務(wù)器,編號3和4的數(shù)據(jù)節(jié)點歸屬于第二主機/服務(wù)器;則將歸屬于第一主機/服務(wù)器的數(shù)據(jù)節(jié)點1和2劃分為左域,將歸屬于第二主機/服務(wù)器的數(shù)據(jù)節(jié)點3和4劃分為右域,那么每個域下均擁有2個數(shù)據(jù)節(jié)點;或者假設(shè)編號為1、2和3的數(shù)據(jù)節(jié)點歸屬于第一主機/服務(wù)器,編號為4的數(shù)據(jù)節(jié)點歸屬于第二主機/服務(wù)器,則將歸屬于第一主機/服務(wù)器的數(shù)據(jù)節(jié)點1、2和3劃分為左域,將歸屬于第二主機/服務(wù)器的數(shù)據(jù)節(jié)點4劃分為右域,那么 左域擁有3個數(shù)據(jù)節(jié)點;右域擁有1個數(shù)據(jù)節(jié)點;

為了實現(xiàn)數(shù)據(jù)分片的均衡和數(shù)據(jù)的可靠性,控制節(jié)點10計算數(shù)據(jù)路由應(yīng)滿足以下數(shù)據(jù)分片分布原則:

每個數(shù)據(jù)節(jié)點上的數(shù)據(jù)分片數(shù)量盡量相同;且

每個數(shù)據(jù)分片的第一副本和第二副本分布在不同域的數(shù)據(jù)節(jié)點上;以及

每個數(shù)據(jù)節(jié)點上所有第一副本數(shù)據(jù)分片的第二副本均勻分布在異域的所有數(shù)據(jù)節(jié)點上;例如當(dāng)前數(shù)據(jù)節(jié)點位于左域,其上共有10個數(shù)據(jù)分片的第一副本,按照以上分布原則,這10個數(shù)據(jù)分片的第二副本應(yīng)均勻分布在右域的所有數(shù)據(jù)節(jié)點上,假設(shè)右域有2個數(shù)據(jù)節(jié)點,則右域的每個數(shù)據(jù)節(jié)點上分布有上述10個數(shù)據(jù)分片的第二副本中的5個。

如圖1所示,本實施例中,分布式數(shù)據(jù)庫系統(tǒng)共有4個數(shù)據(jù)節(jié)點30,共存儲有16個數(shù)據(jù)分片,數(shù)據(jù)分片的第一副本分別用數(shù)字1-16標(biāo)記;第二副本分別用數(shù)字1'-16'標(biāo)記,每個數(shù)據(jù)節(jié)點30上均保存4個數(shù)據(jù)分片的第一副本和4個數(shù)據(jù)分片的第二副本;第一副本中的數(shù)據(jù)分片與第二副本中的數(shù)據(jù)分片完全不同。

客戶端API 20,用于為數(shù)據(jù)訪問者提供讀/寫數(shù)據(jù)的接口,并將接收到的數(shù)據(jù)操作請求按照本地緩存的數(shù)據(jù)路由,發(fā)送給相應(yīng)的數(shù)據(jù)節(jié)點30;具體為:

根據(jù)收到數(shù)據(jù)操作請求中的數(shù)據(jù)關(guān)鍵字,計算對應(yīng)的數(shù)據(jù)分片,并在本地緩存的數(shù)據(jù)路由中查找每個數(shù)據(jù)分片所在的數(shù)據(jù)節(jié)點30;計算數(shù)據(jù)分片的算法可以是對數(shù)據(jù)關(guān)鍵字取HASH值,再對HASH值取數(shù)據(jù)分片總數(shù)的模值方式來確定請求數(shù)據(jù)的分片數(shù)量;也可以按照數(shù)據(jù)關(guān)鍵字的前綴、后綴范圍來劃分數(shù)據(jù)分片;

按照本地緩存的數(shù)據(jù)節(jié)點選取規(guī)則,將所述數(shù)據(jù)操作請求轉(zhuǎn)發(fā)給相應(yīng)的數(shù)據(jù)節(jié)點30;

客戶端API 20以動態(tài)庫/插件方式供數(shù)據(jù)訪問者操作;

數(shù)據(jù)節(jié)點30,以虛擬機或者計算存儲主機方式部署在系統(tǒng)中,可被配置歸屬為左域或者右域;用于:

存儲數(shù)據(jù)分片;

數(shù)據(jù)分片是指根據(jù)數(shù)據(jù)關(guān)鍵字把數(shù)據(jù)切分為多個分片,不同分片的數(shù)據(jù)不同,每個數(shù)據(jù)分片有第一副本、第二副本和第三副本,第三副本只在增減 數(shù)據(jù)節(jié)點過程中臨時使用,多個副本間的數(shù)據(jù)是相同的,且同一數(shù)據(jù)分片的多個副本按照數(shù)據(jù)分片分布原則,被存儲在不同域的數(shù)據(jù)節(jié)點上;

緩存收到的數(shù)據(jù)路由,以及處理收到的數(shù)據(jù)操作請求,數(shù)據(jù)操作請求包括讀、寫操作;具體為:在收到數(shù)據(jù)操作請求后,在本地緩存的數(shù)據(jù)路由中查找所述數(shù)據(jù)操作請求中的數(shù)據(jù)分片是否存儲在本數(shù)據(jù)節(jié)點30中;并在所述數(shù)據(jù)分片未存儲在本數(shù)據(jù)節(jié)點30中時,在本地緩存的數(shù)據(jù)路由中查找所述數(shù)據(jù)分片所在的數(shù)據(jù)節(jié)點30,并將所述數(shù)據(jù)操作請求轉(zhuǎn)發(fā)給找到的數(shù)據(jù)節(jié)點30;在所述數(shù)據(jù)分片存儲在本數(shù)據(jù)節(jié)點30中時,執(zhí)行所述數(shù)據(jù)操作請求,并向數(shù)據(jù)訪問者返回數(shù)據(jù)操作響應(yīng);

重啟或者數(shù)據(jù)路由變化時,執(zhí)行數(shù)據(jù)恢復(fù)操作;

在數(shù)據(jù)分片變化時,例如執(zhí)行寫操作后數(shù)據(jù)分片內(nèi)容變更,記錄變更的數(shù)據(jù)或全數(shù)據(jù),并執(zhí)行數(shù)據(jù)復(fù)制操作;將變更的數(shù)據(jù)或者全數(shù)據(jù)復(fù)制到含有相同數(shù)據(jù)分片的其他數(shù)據(jù)節(jié)點30上;

周期性向所述控制節(jié)點10上報自身狀態(tài);以及在鏈路變化時,實時向控制節(jié)點10上報自身狀態(tài)。

本發(fā)明分布式數(shù)據(jù)庫系統(tǒng)的拓撲對數(shù)據(jù)訪問者隱藏,實現(xiàn)了分布式數(shù)據(jù)庫和數(shù)據(jù)訪問者的解耦。

如圖2所示,是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法優(yōu)選實施例流程圖;本實施例包括以下步驟:

步驟S101:系統(tǒng)上電,控制節(jié)點10按照預(yù)設(shè)的分域規(guī)則,對數(shù)據(jù)節(jié)點30進行分域,然后計算系統(tǒng)的數(shù)據(jù)路由,并廣播給客戶API 20及所有數(shù)據(jù)節(jié)點30;

本步驟根據(jù)系統(tǒng)的數(shù)據(jù)節(jié)點30數(shù)量、數(shù)據(jù)分片數(shù)量及預(yù)設(shè)的路由計算原則,計算每個數(shù)據(jù)節(jié)點30上需要分布的數(shù)據(jù)分片的第一副本列表和第二副本列表,生成數(shù)據(jù)路由。

控制節(jié)點10在系統(tǒng)運行過程中,還負責(zé)數(shù)據(jù)節(jié)點發(fā)現(xiàn)及狀態(tài)管理,過程分別如圖3及圖4所示;

步驟S102:系統(tǒng)初始化完成后,客戶端API 20接收訪問者的數(shù)據(jù)操作請求;

步驟S103:根據(jù)數(shù)據(jù)操作請求中的數(shù)據(jù)關(guān)鍵字,計算相應(yīng)的數(shù)據(jù)分片;

本步驟通過采用對數(shù)據(jù)關(guān)鍵字取HASH值,再對HASH值取數(shù)據(jù)分片總數(shù)的模值的方式來確定請求數(shù)據(jù)的分片數(shù)量;也可以按照數(shù)據(jù)關(guān)鍵字的前綴、后綴范圍來劃分數(shù)據(jù)分片;

步驟S104:在本地緩存的數(shù)據(jù)路由中查找每個數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)節(jié)點30,按照預(yù)設(shè)的數(shù)據(jù)節(jié)點選取規(guī)則,將所述數(shù)據(jù)操作請求分別轉(zhuǎn)發(fā)給相應(yīng)的數(shù)據(jù)節(jié)點30;

數(shù)據(jù)路由即為每個數(shù)據(jù)分片和數(shù)據(jù)節(jié)點30的對應(yīng)關(guān)系。

數(shù)據(jù)節(jié)點選取規(guī)則為:當(dāng)查找到的數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)節(jié)點30數(shù)為1時,直接將所述數(shù)據(jù)操作請求轉(zhuǎn)發(fā)給所述數(shù)據(jù)節(jié)點30;

當(dāng)查找到的數(shù)據(jù)分片對應(yīng)的數(shù)據(jù)節(jié)點30數(shù)大于1時,判斷所述數(shù)據(jù)操作請求的類型,若為寫操作,則查看所述每個數(shù)據(jù)節(jié)點30中的所述數(shù)據(jù)分片的副本號及數(shù)據(jù)節(jié)點30的狀態(tài),將所述數(shù)據(jù)操作請求發(fā)送給狀態(tài)正常且副本號小的數(shù)據(jù)節(jié)點30;若為讀操作,則將所述數(shù)據(jù)操作請求發(fā)送給負荷最小的數(shù)據(jù)節(jié)點30。

步驟S105:數(shù)據(jù)節(jié)點30收到的數(shù)據(jù)操作請求,在本地緩存的數(shù)據(jù)路由中查找所述數(shù)據(jù)操作請求中的數(shù)據(jù)分片是否存儲在本數(shù)據(jù)節(jié)點30中;若是,則執(zhí)行步驟S106;否則,執(zhí)行步驟S107;

本步驟通過解析數(shù)據(jù)操作請求中的數(shù)據(jù)關(guān)鍵字,查看請求數(shù)據(jù)的數(shù)據(jù)分片是否屬于本節(jié)點;若是,則所述請求數(shù)據(jù)對應(yīng)的數(shù)據(jù)分片存儲在本數(shù)據(jù)節(jié)點30,否則,所述請求數(shù)據(jù)對應(yīng)的數(shù)據(jù)分片未存儲在本數(shù)據(jù)節(jié)點30。

步驟S106:執(zhí)行所述數(shù)據(jù)操作請求,向數(shù)據(jù)訪問者返回數(shù)據(jù)操作響應(yīng),當(dāng)前數(shù)據(jù)分片處理結(jié)束;

本步驟中,執(zhí)行數(shù)據(jù)操作請求具體為:

當(dāng)所述數(shù)據(jù)操作請求為寫操作時,根據(jù)訪問者的操作方式,對數(shù)據(jù)分片存儲于本地的副本進行增加、修改或刪除操作;

當(dāng)所述數(shù)據(jù)操作請求為讀操作時,從數(shù)據(jù)分片存儲于本地的副本中讀取數(shù)據(jù)。

本發(fā)明中,在數(shù)據(jù)操作請求為寫操作時,處理完所述數(shù)據(jù)操作請求后,還執(zhí)行如圖5所示的數(shù)據(jù)復(fù)制流程;即在數(shù)據(jù)節(jié)點30修改本地的數(shù)據(jù)后,需要把變更后的數(shù)據(jù)復(fù)制到同分片的其他副本所在的數(shù)據(jù)節(jié)點30上。

步驟S107:本地緩存的數(shù)據(jù)路由中查找所述數(shù)據(jù)分片所在的數(shù)據(jù)節(jié)點30,按照預(yù)設(shè)的數(shù)據(jù)節(jié)點選取規(guī)則,將所述數(shù)據(jù)操作請求轉(zhuǎn)發(fā)給相應(yīng)的與本節(jié)點通信正常的數(shù)據(jù)節(jié)點。

即若數(shù)據(jù)操作請求對應(yīng)的數(shù)據(jù)分片在本數(shù)據(jù)節(jié)點30,則在本地處理,讀寫本地的數(shù)據(jù);若數(shù)據(jù)操作請求對應(yīng)的數(shù)據(jù)分片不在本數(shù)據(jù)節(jié)點30,則轉(zhuǎn)發(fā)到對應(yīng)的節(jié)點處理。

如圖3所示,是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中數(shù)據(jù)節(jié)點發(fā)現(xiàn)過程優(yōu)選實施例流程圖;本實施例包括以下步驟:

步驟S201:控制節(jié)點10實時監(jiān)控系統(tǒng)中是否有數(shù)據(jù)節(jié)點30新增或者刪除,若發(fā)現(xiàn)有數(shù)據(jù)節(jié)點30新增,則執(zhí)行步驟S202;若發(fā)現(xiàn)有數(shù)據(jù)節(jié)點30刪除,則執(zhí)行步驟S203;

新增的數(shù)據(jù)節(jié)點即為新加入的數(shù)據(jù)節(jié)點;

刪除的數(shù)據(jù)節(jié)點包括:因負擔(dān)小于預(yù)設(shè)值而需要刪除的數(shù)據(jù)節(jié)點及因收到用戶刪除指令而要求刪除的數(shù)據(jù)節(jié)點。

步驟S202:執(zhí)行節(jié)點擴容操作,當(dāng)前發(fā)現(xiàn)處理結(jié)束;

節(jié)點擴容操作具體如圖6所示;

步驟S203:執(zhí)行節(jié)點縮容操作,當(dāng)前發(fā)現(xiàn)處理結(jié)束。

節(jié)點縮容操作具體如圖7所示。

如圖4所示,是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中數(shù)據(jù)節(jié)點狀態(tài)管理過程優(yōu)選實施例流程圖;本實施例包括以下步驟:

步驟S301:控制節(jié)點10收到數(shù)據(jù)節(jié)點30上報的自身狀態(tài);

步驟S302:查看所述狀態(tài),為若正常,則當(dāng)前狀態(tài)處理結(jié)束;若為異常,則執(zhí)行步驟S303;

步驟S303:更新數(shù)據(jù)路由中所述數(shù)據(jù)節(jié)點30的狀態(tài),并廣播更新后的數(shù)據(jù)路由。

如圖5所示,是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中數(shù)據(jù)復(fù)制優(yōu)選實施例流程圖;本實施例包括以下步驟:

步驟S301:執(zhí)行寫操作的數(shù)據(jù)節(jié)點30記錄本次寫操作的數(shù)據(jù)分片變更的數(shù)據(jù)或者全數(shù)據(jù);

步驟S302:在本地緩存的數(shù)據(jù)路由中查找所述數(shù)據(jù)分片其余副本所在的 數(shù)據(jù)節(jié)點30;

步驟S303:向數(shù)據(jù)分片其余副本所在的數(shù)據(jù)節(jié)點30復(fù)制所述數(shù)據(jù)分片變更的數(shù)據(jù)或全數(shù)據(jù)。

復(fù)制變更的數(shù)據(jù)或全數(shù)據(jù)到同分片的其他副本所在的數(shù)據(jù)節(jié)點30,包括允許存儲有第一副本的數(shù)據(jù)節(jié)點30寫入數(shù)據(jù)后,復(fù)制變更的數(shù)據(jù)或全數(shù)據(jù)到該分片的第二、第三副本所在的數(shù)據(jù)節(jié)點30,也允許在存儲有第二或者第三副本的數(shù)據(jù)節(jié)點30寫入數(shù)據(jù)后,復(fù)制變更的數(shù)據(jù)或全數(shù)據(jù)到該分片的第一、第三副本或者第一、第二副本所在的數(shù)據(jù)節(jié)點30,即允許數(shù)據(jù)副本間的相互復(fù)制,相同分片的副本間的相同數(shù)據(jù)相互復(fù)制可能存在的沖突問題,可通過時間戳來解決,即通過比較數(shù)據(jù)的更新時間戳,來確定是通過合并、覆蓋來變更數(shù)據(jù)還是放棄變更。

數(shù)據(jù)復(fù)制過程中,被復(fù)制數(shù)據(jù)的數(shù)據(jù)節(jié)點,可同步完成相應(yīng)數(shù)據(jù)更新,也可異步完成相應(yīng)數(shù)據(jù)更新。

如圖6所示,是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中節(jié)點擴容操作優(yōu)選實施例流程圖;本實施例包括以下步驟:

步驟S401:控制節(jié)點10計算要遷移到新增數(shù)據(jù)節(jié)點30上的第一副本數(shù)據(jù)分片列表及第二副本數(shù)據(jù)分片列表;具體包括以下步驟:

用數(shù)據(jù)分片總數(shù)除以包含新增數(shù)據(jù)節(jié)點30在內(nèi)的數(shù)據(jù)節(jié)點總數(shù),計算出每個數(shù)據(jù)節(jié)點要存儲的平均數(shù)據(jù)分片數(shù)量,應(yīng)比原有數(shù)據(jù)節(jié)點30的當(dāng)前數(shù)據(jù)分片數(shù)量少;

用每個原有數(shù)據(jù)節(jié)點30的當(dāng)前數(shù)據(jù)分片數(shù)量減去計算得到的平均數(shù)據(jù)分片數(shù)量,計算出從每個原有數(shù)據(jù)節(jié)點30應(yīng)遷移到新增數(shù)據(jù)節(jié)點30的數(shù)據(jù)分片數(shù)量;

所有要從原有數(shù)據(jù)節(jié)點30中遷出的數(shù)據(jù)分片的第一副本組成新增數(shù)據(jù)節(jié)點30的第一副本數(shù)據(jù)分片列表,所有要從原有數(shù)據(jù)節(jié)點30中遷出的數(shù)據(jù)分片的第二副本組成新增數(shù)據(jù)節(jié)點30的第二副本數(shù)據(jù)分片列表;此時的列表中的數(shù)據(jù)為空;

步驟S402:在新增數(shù)據(jù)節(jié)點30上為待遷入數(shù)據(jù)分片分配第三副本;重新計算系統(tǒng)的數(shù)據(jù)路由并廣播;

步驟S403:等待新增數(shù)據(jù)節(jié)點30恢復(fù)數(shù)據(jù);

數(shù)據(jù)節(jié)點恢復(fù)數(shù)據(jù)過程如圖8所示;

步驟S404:收到新增數(shù)據(jù)節(jié)點30上報的自身狀態(tài),根據(jù)預(yù)設(shè)的擴容規(guī)則,重新計算系統(tǒng)的數(shù)據(jù)路由并廣播;

所述預(yù)設(shè)的擴容規(guī)則為:

通知原有數(shù)據(jù)節(jié)點30將本地待遷移到新增數(shù)據(jù)節(jié)點30上的數(shù)據(jù)分片的第一副本切換為第三副本;同時通知新增數(shù)據(jù)節(jié)點將對應(yīng)的數(shù)據(jù)分片的第三副本切換為第一副本;

通知原有數(shù)據(jù)節(jié)點30將本地待遷移到新增數(shù)據(jù)節(jié)點30上的數(shù)據(jù)分片的第二副本切換為第三副本;同時通知新增數(shù)據(jù)節(jié)點30將對應(yīng)的數(shù)據(jù)分片的第三副本切換為第二副本。

步驟S405:通知所有數(shù)據(jù)節(jié)點30刪除本地所有數(shù)據(jù)分片的第三副本;

步驟S406:確認所有數(shù)據(jù)節(jié)點30刪除完成后,刪除本地數(shù)據(jù)路由中的第三副本,重新計算系統(tǒng)的數(shù)據(jù)路由并廣播。

如圖7所示,是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中節(jié)點縮容操作優(yōu)選實施例流程圖;本實施例包括以下步驟:

步驟S501:控制節(jié)點10計算各剩余數(shù)據(jù)節(jié)點30的第一副本數(shù)據(jù)分片列表及第二副本數(shù)據(jù)分片列表;本步驟具體包括以下步驟:

用數(shù)據(jù)分片總數(shù)除以剩余數(shù)據(jù)節(jié)點30數(shù),計算出剩余數(shù)據(jù)節(jié)點30中每個數(shù)據(jù)節(jié)點30要存儲的平均數(shù)據(jù)分片數(shù)量,應(yīng)比減少節(jié)點前要多;

用平均數(shù)據(jù)分片數(shù)量減去每個剩余數(shù)據(jù)節(jié)點30上當(dāng)前數(shù)據(jù)分片數(shù)量,計算出每個剩余數(shù)據(jù)節(jié)點30上應(yīng)從待關(guān)閉節(jié)點遷入的數(shù)據(jù)分片數(shù);

根據(jù)預(yù)設(shè)的數(shù)據(jù)分片分布原則,將待刪除數(shù)據(jù)節(jié)點30上的數(shù)據(jù)分片第一副本和第二副本,分配到剩余數(shù)據(jù)節(jié)點30上,得到每個剩余節(jié)點上第一副本數(shù)據(jù)分片列表和第二副本數(shù)據(jù)列表列表;

步驟S502:在剩余數(shù)據(jù)節(jié)點30上為待遷入數(shù)據(jù)分片分配第三副本,重新計算系統(tǒng)的數(shù)據(jù)路由并廣播;

步驟S503:等待剩余數(shù)據(jù)節(jié)點30恢復(fù)數(shù)據(jù);

數(shù)據(jù)節(jié)點30恢復(fù)數(shù)據(jù)過程如圖8所示;

步驟S504:等待剩余數(shù)據(jù)節(jié)點30復(fù)制數(shù)據(jù);

數(shù)據(jù)節(jié)點30復(fù)制數(shù)據(jù)過程如圖5所示;

步驟S505:收到剩余數(shù)據(jù)節(jié)點30上報的自身狀態(tài),根據(jù)預(yù)設(shè)的縮容規(guī)則,重新計算系統(tǒng)的數(shù)據(jù)路由并廣播;

預(yù)設(shè)的縮容規(guī)則為:

通知待刪除數(shù)據(jù)節(jié)點30將待遷移數(shù)據(jù)分片的第一副本切換為第三副本;同時通知存儲有所述數(shù)據(jù)分片第三副本的剩余數(shù)據(jù)節(jié)點30將所述數(shù)據(jù)分片的第三副本切換為第一副本;

通知待刪除數(shù)據(jù)節(jié)點30將待遷移數(shù)據(jù)分片的第二副本切換為第三副本;同時通知存儲有所述數(shù)據(jù)分片第三副本的剩余數(shù)據(jù)節(jié)點30將所述數(shù)據(jù)分片的第三副本切換為第二副本。

步驟S506:通知所有數(shù)據(jù)節(jié)點30刪除本地所有數(shù)據(jù)分片的第三副本;

步驟S507:確認所有數(shù)據(jù)節(jié)點30刪除完成后,刪除本地數(shù)據(jù)路由中的第三副本,重新計算系統(tǒng)的數(shù)據(jù)路由并廣播。

如圖8所示,是本發(fā)明所述分布式數(shù)據(jù)庫系統(tǒng)自適應(yīng)方法中數(shù)據(jù)節(jié)點恢復(fù)數(shù)據(jù)過程優(yōu)選實施例流程圖;本實施例包括以下步驟:

步驟S601:查詢本地數(shù)據(jù)路由,獲取本節(jié)點上第一副本數(shù)據(jù)分片的第三副本所在的數(shù)據(jù)節(jié)點30;

步驟S602:向第三副本所在的數(shù)據(jù)節(jié)點30復(fù)制相應(yīng)數(shù)據(jù)分片;

收到數(shù)據(jù)分片的數(shù)據(jù)節(jié)點30,將收到的數(shù)據(jù)分片存入對應(yīng)的第三副本中;

步驟S603:所有第一副本數(shù)據(jù)分片均恢復(fù)完成后,向控制節(jié)點10上報自身狀態(tài)。

以上所述僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或流程變換,或直接或間接運用在其它相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1