亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

動態(tài)數(shù)據(jù)存取方法及系統(tǒng)與流程

文檔序號:12124379閱讀:470來源:國知局
動態(tài)數(shù)據(jù)存取方法及系統(tǒng)與流程

本發(fā)明涉及一種數(shù)據(jù)存取方法及系統(tǒng),特別設計一種基于一致性哈希算法的負載均衡的動態(tài)數(shù)據(jù)存取方法及系統(tǒng)。



背景技術:

在日常工作和工業(yè)生產中,需要經常和數(shù)據(jù)打交道,并把數(shù)據(jù)保存到關系型數(shù)據(jù)庫中。隨著數(shù)據(jù)量的越來越大,會對數(shù)據(jù)庫資源造成很大的壓力。因此必須要分庫存儲,這時需要考慮如何把數(shù)據(jù)均勻地分配到多個數(shù)據(jù)庫之中,并且數(shù)據(jù)庫的數(shù)量很可能會變動,那么當數(shù)據(jù)庫數(shù)量變動時,在不同數(shù)據(jù)庫之間的數(shù)據(jù)遷移必不可少。如何實現(xiàn)數(shù)據(jù)均勻分布到多個數(shù)據(jù)庫中,且數(shù)據(jù)庫發(fā)生變動時遷移的數(shù)據(jù)較少呢?可以為每個數(shù)據(jù)庫指定一定的存儲范圍,但是這種方式太過于死板,并且很難實現(xiàn)負載均衡;也可以按照數(shù)據(jù)庫的數(shù)量取模,動態(tài)地計算應該分配到哪個數(shù)據(jù)庫中,但是當數(shù)據(jù)庫的數(shù)量發(fā)生變化時,顯然大量原先存儲的數(shù)據(jù)需要在數(shù)據(jù)庫之間遷移,進而對數(shù)據(jù)服務器造成巨大沖擊,因此不能用在數(shù)據(jù)庫數(shù)量經常變動的情況。



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

本發(fā)明要解決的技術問題是為了克服現(xiàn)有技術中關系型數(shù)據(jù)庫存取大量數(shù)據(jù)對數(shù)據(jù)庫資源壓力大、負載不均衡、數(shù)據(jù)遷移量比較大的缺陷,提供一種基于一致性哈希算法的負載均衡的動態(tài)數(shù)據(jù)存取方法及系統(tǒng),結合關系型數(shù)據(jù)庫,一致性哈希算法,實現(xiàn)對數(shù)據(jù)的存取以及動態(tài)的遷移,其結構簡單、配置靈活、維護成本低、負載均衡,并且系統(tǒng)結構變化時數(shù)據(jù)遷移量比較少。

本發(fā)明是通過下述技術方案來解決上述技術問題的:

一種動態(tài)數(shù)據(jù)存取方法,其特點在于,包括以下步驟:

S1:讀取數(shù)據(jù)庫配置信息以初始化一致性哈希環(huán),該一致性哈希環(huán)包括多個實際節(jié)點,每個實際節(jié)點對應于一數(shù)據(jù)庫;

S2:獲取待存取數(shù)據(jù)的存取條件的哈希值;

S3:獲得該一致性哈希環(huán)上大于等于該哈希值的最近節(jié)點;

S4:將待存取數(shù)據(jù)對應于該最近節(jié)點相應的數(shù)據(jù)庫。

一致性哈希環(huán)是由-231到231-1個整數(shù)組成的環(huán),當數(shù)據(jù)達到231-1時,再加1即為-231,對每個數(shù)據(jù)庫名稱取哈希值,并且控制哈希值在-231到231-1的范圍之內,那么每個數(shù)據(jù)庫名稱對應的哈希值就落到了一致性哈希環(huán)上。

在本發(fā)明的技術方案中,在存取數(shù)據(jù)時,首先獲取存取數(shù)據(jù)條件的哈希值,然后在一致性哈希環(huán)上沿著順時針方向從此哈希值出發(fā),直到遇見第一個節(jié)點,即為該數(shù)據(jù)存取時對應的數(shù)據(jù)庫的節(jié)點。當保存數(shù)據(jù)的數(shù)據(jù)庫的數(shù)量發(fā)生變化時,通過修改數(shù)據(jù)庫配置信息,重新初始化一致性哈希環(huán),由于對于某個固定值的哈希值是不變的,一致性哈希環(huán)上只會減少或者增加節(jié)點。這樣需要遷移的數(shù)據(jù)量比較少,從而對數(shù)據(jù)庫資源訪問的壓力也大大減少。

優(yōu)選地,步驟S1還包括:為每個實際節(jié)點分配多個虛擬節(jié)點;

步驟S3中的最近節(jié)點為大于等于該哈希值的最近的虛擬節(jié)點。

通過引入虛擬節(jié)點改善哈希算法,為每個實際節(jié)點分配一定數(shù)量的虛擬節(jié)點,這樣就能抑制節(jié)點分布不均勻,從而達到相對的負載均衡。具體來說,通常存儲數(shù)據(jù)的數(shù)據(jù)庫的數(shù)量不超過10個,其相對應的哈希值不能均勻的落在一致性哈希環(huán)上,為了使實際節(jié)點更均勻的分布到一致性哈希環(huán)上,所以把每個實際節(jié)點虛擬成多個虛擬節(jié)點。關于虛擬節(jié)點的分配方式,其目的就是使虛擬節(jié)點均勻的分布在一致性哈希環(huán)上,該技術方案中是通過把實際節(jié)點的名稱加000至999的不同隨機數(shù),形成虛擬節(jié)點的名稱,然后和用相同的實際節(jié)點相同的方法生成哈希值,即:MD5的值后再根據(jù)Java自帶的求取哈希值的方法生成哈希值。

優(yōu)選地,該數(shù)據(jù)庫配置信息包含:數(shù)據(jù)庫名稱、數(shù)據(jù)表、上一版數(shù)據(jù)庫名稱和是否正在遷移數(shù)據(jù)標識。

優(yōu)選地,步驟S1中通過數(shù)據(jù)庫名稱來初始化該一致性哈希環(huán)。

優(yōu)選地,步驟S2中通過將數(shù)據(jù)庫名稱和存取條件求取MD5的值后再根據(jù)Java自帶的求取哈希值的方法生成哈希值。

優(yōu)選地,通過在實際節(jié)點名稱加上不同的數(shù)據(jù)數(shù)字組成字符串、然后求哈希值來獲得虛擬節(jié)點。

本發(fā)明還提供一種動態(tài)數(shù)據(jù)存取系統(tǒng),其特點在于,其包括多個數(shù)據(jù)庫、多個數(shù)據(jù)庫的配置信息以及一致性哈希環(huán),以及

讀取裝置,用于讀取數(shù)據(jù)庫配置信息以初始化一致性哈希環(huán),該一致性哈希環(huán)包括多個實際節(jié)點,每個實際節(jié)點對應于一數(shù)據(jù)庫;

計算裝置,用于獲取待存取數(shù)據(jù)的存取條件的哈希值;

遍歷裝置,用于獲得該一致性哈希環(huán)上大于等于該哈希值的最近節(jié)點;

映射裝置,用于將待存取數(shù)據(jù)對應于該最近節(jié)點相應的數(shù)據(jù)庫。

優(yōu)選地,該動態(tài)數(shù)據(jù)存取系統(tǒng)還包括分配裝置,用于為每個實際節(jié)點分配多個虛擬節(jié)點;

其中,最近節(jié)點為大于等于該哈希值的最近的虛擬節(jié)點。

優(yōu)選地,該數(shù)據(jù)庫配置信息包含:數(shù)據(jù)庫名稱、數(shù)據(jù)表、上一版數(shù)據(jù)庫名稱和是否正在遷移數(shù)據(jù)標識。

其中,數(shù)據(jù)庫名稱:對應真實的數(shù)據(jù)庫,包含多個,用來初始化一致性哈希環(huán);

數(shù)據(jù)表:每個數(shù)據(jù)庫名稱對應的數(shù)據(jù)庫都包含相同的表,用來保存數(shù)據(jù);

上一版數(shù)據(jù)庫名稱:主要用來在數(shù)據(jù)庫配置修改過之后,進行數(shù)據(jù)遷移;

是否正在遷移數(shù)據(jù)標識:標示數(shù)據(jù)庫之間的數(shù)據(jù)是否正在遷移,當數(shù)據(jù)庫的個數(shù)修改或者名稱改變時,需要在數(shù)據(jù)庫之間遷移數(shù)據(jù)。

優(yōu)選地,數(shù)據(jù)庫為關系型數(shù)據(jù)庫。

在符合本領域常識的基礎上,上述各優(yōu)選條件,可任意組合,即得本發(fā)明各較佳實例。

本發(fā)明的積極進步效果在于:本動態(tài)數(shù)據(jù)存取方法及系統(tǒng),基于一致性哈希算法,結構簡單,配置靈活,維護成本低,可以很好地實現(xiàn)負載均衡。并且在數(shù)據(jù)庫配置信息改變時重新初始化一致性哈希環(huán),通過和上一個一致性哈希環(huán)相比較可以快速地定位需要遷移的數(shù)據(jù),由于對于某個固定值其相應的哈希值是不變的,因此當存取結構改變時需要遷移的數(shù)據(jù)量比較少。

附圖說明

圖1為本發(fā)明一實施例的數(shù)據(jù)存取流程圖。

圖2為本發(fā)明一實施例的動態(tài)數(shù)據(jù)存取系統(tǒng)的結構框圖。

圖3為本發(fā)明一應用實例的結構框圖。

圖4為本發(fā)明一應用實例的一致性哈希環(huán)。

圖5為本發(fā)明一應用實例的一致性哈希環(huán)從兩個節(jié)點增加到三個節(jié)點的示意圖。

具體實施方式

下面通過實施例的方式進一步說明本發(fā)明,但并不因此將本發(fā)明限制在所述的實施例范圍之中。

參考圖1-圖3,分別介紹本發(fā)明所述的動態(tài)數(shù)據(jù)存取方法和系統(tǒng)。

該動態(tài)數(shù)據(jù)存取方法包括:

S1:讀取數(shù)據(jù)庫配置信息以初始化一致性哈希環(huán),該一致性哈希環(huán)包括多個實際節(jié)點,每個實際節(jié)點對應于一數(shù)據(jù)庫;

S2:獲取待存取數(shù)據(jù)的存取條件的哈希值;

S3:獲得該一致性哈希環(huán)上大于等于該哈希值的最近節(jié)點;

S4:將待存取數(shù)據(jù)對應于該最近節(jié)點相應的數(shù)據(jù)庫。

該動態(tài)數(shù)據(jù)存取系統(tǒng),其包括多個數(shù)據(jù)庫1、多個數(shù)據(jù)庫的配置信息2以及一致性哈希環(huán)3,以及

讀取裝置4,用于讀取數(shù)據(jù)庫配置信息以初始化一致性哈希環(huán),該一致性哈希環(huán)包括多個實際節(jié)點,每個實際節(jié)點對應于一數(shù)據(jù)庫;

計算裝置5,用于獲取待存取數(shù)據(jù)的存取條件的哈希值;

遍歷裝置6,用于獲得該一致性哈希環(huán)上大于等于該哈希值的最近節(jié)點;

映射裝置7,用于將待存取數(shù)據(jù)對應于該最近節(jié)點相應的數(shù)據(jù)庫。

首先把存儲數(shù)據(jù)的多個關系型數(shù)據(jù)庫的信息配置到單獨的表里面,通過數(shù)據(jù)庫配置信息初始化一致性哈希環(huán),數(shù)據(jù)在存取時,對存取條件取哈希值,沿順時針方向找到大于等于此哈希值并離的最近的節(jié)點,即為該條數(shù)據(jù)需要存儲的數(shù)據(jù)庫。即在一致性哈希環(huán)上沿著順時針方向從此哈希值出發(fā),直到遇見第一個節(jié)點,即為該數(shù)據(jù)存取時對應的數(shù)據(jù)庫的節(jié)點。當保存數(shù)據(jù)的數(shù)據(jù)庫的數(shù)量發(fā)生變化時,通過修改數(shù)據(jù)庫配置信息,重新初始化一致性哈希環(huán),由于對于某個固定值的哈希值是不變的,一致性哈希環(huán)上只會減少或者增加節(jié)點。這樣需要遷移的數(shù)據(jù)量比較少,從而對數(shù)據(jù)庫資源訪問的壓力也大大減少。通過引入虛擬節(jié)點改善哈希算法,為每個實際節(jié)點分配一定數(shù)量的虛擬節(jié)點,這樣就能抑制節(jié)點分布不均勻,從而達到相對的負載均衡。

下面繼續(xù)參考圖3-圖5,以一個具體的例子,進一步產生本發(fā)明的技術方案和技術效果。

如圖4所示一致性哈希環(huán)的大小為4字節(jié)的整數(shù)的范圍,沿順時針方向遞增,當數(shù)據(jù)達到231-1時,再加1即為-231。這樣首尾就組成了一個環(huán)。通常存儲數(shù)據(jù)的數(shù)據(jù)庫的數(shù)量不超過10個,其相對應的哈希值落在一致性哈希環(huán)上,顯然不能均勻的分布到哈希環(huán)上,這樣就產生了虛擬節(jié)點。通過把每個節(jié)點虛擬一定數(shù)量的節(jié)點,更能實現(xiàn)在一致性哈希環(huán)上的均勻分布。當數(shù)據(jù)要存取時,首先求取數(shù)據(jù)存取條件的哈希值,然后沿順時針方向尋找大于等于該哈希值且離此值最近的節(jié)點即為對應的數(shù)據(jù)庫。如節(jié)點n1沿順時針方向尋找到大于等于該節(jié)點的最小節(jié)點即為A2,因此n1落到A對應的數(shù)據(jù)庫上;節(jié)點n2沿順時針方向尋找到大于等于該節(jié)點的最小節(jié)點為B3,n2落到B對應的數(shù)據(jù)庫上;節(jié)點n3沿順時針方向沒有找到大于等于此節(jié)點的節(jié)點,那么就落到環(huán)的第一個節(jié)點B1上,n3落到B對應的數(shù)據(jù)庫上。

由于數(shù)據(jù)庫的虛擬節(jié)點不能完全均勻地分布在一致性哈希環(huán)上,因此該動態(tài)數(shù)據(jù)存取系統(tǒng)并不能完全實現(xiàn)數(shù)據(jù)均勻地分布到每個數(shù)據(jù)庫上,其實也沒有必要完全均勻分布,能夠做到近似均勻分布就能滿足實際需求。通過對大量的數(shù)據(jù)進行統(tǒng)計,可以得出影響負載均衡的幾個因素:

如表1所示,當節(jié)點數(shù)量為5,每個節(jié)點對應100個虛擬節(jié)點時,在不同的實際數(shù)據(jù)量大小的情況下落在每個節(jié)點上的數(shù)量偏離平均值的百分比。由表1可知,隨著實際數(shù)據(jù)量的增加數(shù)據(jù)分布的越均勻,實際數(shù)據(jù)量達到10萬以后,實際數(shù)據(jù)量的大小對負載均衡的影響變得比較微小。

表1

如表2所示,當節(jié)點數(shù)量為3,實際數(shù)據(jù)量為100萬時,不同的虛擬節(jié)點數(shù)量下落在每個節(jié)點上的數(shù)量偏離平均值的百分比。

表2

如表3所示,當節(jié)點數(shù)量為5,實際數(shù)據(jù)量為100萬時,不同的虛擬節(jié)點數(shù)量下落在每個節(jié)點上的數(shù)量偏離平均值的百分比。

表3

如表4所示,當節(jié)點數(shù)量為10,實際數(shù)據(jù)量為100萬時,不同的虛擬節(jié)點數(shù)量下落在每個節(jié)點上的數(shù)量偏離平均值的百分比。

表4

通過表2、表3、表4可知,在同樣的虛擬節(jié)點數(shù)量下,實際節(jié)點的數(shù)量對負載均衡影響不大。單個實際節(jié)點對應的虛擬節(jié)點的數(shù)量越大,數(shù)據(jù)越能均勻地分布到實際節(jié)點上,當每個節(jié)點對應的虛擬節(jié)點的數(shù)量為10時,顯然數(shù)據(jù)不能均勻分布,當虛擬節(jié)點數(shù)增加到100時,最大偏差達到百分之十左右,當虛擬節(jié)點數(shù)達到1000時,基本上在百分之五以下,因此影響負載均衡的關鍵因素是單個實際節(jié)點對應的虛擬節(jié)點的數(shù)量大小,虛擬節(jié)點的數(shù)量越大越能實現(xiàn)負載均衡。

如圖5所示為哈希環(huán)上增加一個實際節(jié)點的變化示意圖。在一致性哈希環(huán)上原來有兩個節(jié)點,每個節(jié)點有三個虛擬節(jié)點,增加了一個節(jié)點C,其也包含三個虛擬節(jié)點。從圖中可知,原先節(jié)點的位置是不變的,新增加的節(jié)點按照其哈希值落到一致性哈希環(huán)上。由于一致性哈希環(huán)上的節(jié)點發(fā)生了改變,需要對原先分布的數(shù)據(jù)進行遷移,原來B1到A2的數(shù)據(jù)落到A上,由于新增虛擬節(jié)點C2,那么B1到C2之間的數(shù)據(jù)應該從節(jié)點A遷移到節(jié)點C上,同理K2之間的數(shù)據(jù)應該由B遷移到C上,K3之間的數(shù)據(jù)應該由A遷移到C上。顯然,由于大量實際數(shù)據(jù)可以認為是均勻地分布在一致性哈希環(huán)上,因此一致性哈希環(huán)上的節(jié)點發(fā)生變化時,需要遷移的數(shù)據(jù)是由節(jié)點在一致性哈希環(huán)上的分布決定的。

如表5所示,當100萬實際數(shù)據(jù)量時,在不同的虛擬節(jié)點數(shù)量,實際節(jié)點由2增加到3,由3增加到4等情況下,需要遷移的數(shù)據(jù)量占全部實際數(shù)據(jù)量的百分比。

表5

由表5可知,當實際節(jié)點的數(shù)量變化時,實際節(jié)點的數(shù)量越大,需要遷移的數(shù)據(jù)量越小。而單個實際節(jié)點對應的虛擬節(jié)點數(shù)量對需要遷移的數(shù)據(jù)量影響不大。

如果采用取模的方式來決定數(shù)據(jù)要存儲的數(shù)據(jù)庫,那么每當數(shù)據(jù)庫的數(shù)量變化時,原來的數(shù)據(jù)和數(shù)據(jù)庫之間的對應關系也就無效了。因此需要對全部數(shù)據(jù)進行重新分配,對數(shù)據(jù)庫資源造成了更大的壓力。

雖然以上描述了本發(fā)明的具體實施方式,但是本領域的技術人員應當理解,這些僅是舉例說明,本發(fā)明的保護范圍是由所附權利要求書限定的。本領域的技術人員在不背離本發(fā)明的原理和實質的前提下,可以對這些實施方式做出多種變更或修改,但這些變更和修改均落入本發(fā)明的保護范圍。

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