專利名稱:非關(guān)系型數(shù)據(jù)庫(kù)Cassandra中分區(qū)路由方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種路由方法,尤其涉及一種非關(guān)系型數(shù)據(jù)庫(kù)Cassandra中分區(qū)路由方法。
背景技術(shù):
Cassandra是一個(gè)混合型的非關(guān)系的數(shù)據(jù)庫(kù),類似于Google的BigTable。其主要功能比Dynomite (分布式的Key-Value存儲(chǔ)系統(tǒng))更豐富,但支持度卻不如文檔存儲(chǔ) MongoDB (介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的開(kāi)源產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bjson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。)Cassandra最初由!^cebook開(kāi)發(fā),后轉(zhuǎn)變成了開(kāi)源項(xiàng)目。它是一個(gè)網(wǎng)絡(luò)社交云計(jì)算方面理想的數(shù)據(jù)庫(kù)。以Amazon專有的完全分布式的Dynamo為基礎(chǔ),結(jié)合了 Google BigTable基于列族(Column Family)的數(shù)據(jù)模型。Cassandra的主要特點(diǎn)就是它不是一個(gè)數(shù)據(jù)庫(kù),而是由一堆數(shù)據(jù)庫(kù)節(jié)點(diǎn)共同構(gòu)成的一個(gè)分布式網(wǎng)絡(luò)服務(wù),對(duì)Cassandra 的一個(gè)寫(xiě)操作,會(huì)被復(fù)制到其他節(jié)點(diǎn)上去,對(duì)Cassandra的讀操作,也會(huì)被路由到某個(gè)節(jié)點(diǎn)上面去讀取。對(duì)于一個(gè)Cassandra群集來(lái)說(shuō),擴(kuò)展性能是比較簡(jiǎn)單的事情,只管在群集里面添加節(jié)點(diǎn)就可以了。和其他數(shù)據(jù)庫(kù)比較,Cassandra具有三個(gè)突出特點(diǎn)
模式靈活使用Cassandra,像文檔存儲(chǔ),你不必提前解決記錄中的字段。你可以在系統(tǒng)運(yùn)行時(shí)隨意的添加或移除字段。這是一個(gè)驚人的效率提升,特別是在大型部署上。真正的可擴(kuò)展性Cassandra是純粹意義上的水平擴(kuò)展。為給集群添加更多容量,可以指向另一臺(tái)電腦。你不必重啟任何進(jìn)程,改變應(yīng)用查詢,或手動(dòng)遷移任何數(shù)據(jù)。多數(shù)據(jù)中心識(shí)別你可以調(diào)整你的節(jié)點(diǎn)布局來(lái)避免某一個(gè)數(shù)據(jù)中心起火,一個(gè)備用的數(shù)據(jù)中心將至少有每條記錄的完全復(fù)制。Cassandra分區(qū)路由方法的依據(jù)為Chord協(xié)議,更確切的說(shuō),Cassandra分區(qū)路由方法采用的算法是Chord協(xié)議的簡(jiǎn)化版實(shí)現(xiàn)。Chord是在2001年由麻省理工學(xué)院提出,其核心思想就是要解決在P2P應(yīng)用中遇到的基本問(wèn)題如何在P2P網(wǎng)絡(luò)中找到存在特定數(shù)據(jù)的節(jié)點(diǎn)。在Cassandra中,一個(gè)數(shù)據(jù)中心往往是由成千上萬(wàn)臺(tái)廉價(jià)服務(wù)器組成,每臺(tái)服務(wù)器被稱為一個(gè)節(jié)點(diǎn)。在每臺(tái)服務(wù)器中,數(shù)據(jù)都是以Key-value對(duì)存放,所以讀操作就是按照請(qǐng)求的Key值去龐大的數(shù)據(jù)中心查找存在該key值對(duì)應(yīng)的value的節(jié)點(diǎn)的過(guò)程。Cassandra 具體路由算法如下
系統(tǒng)中每個(gè)節(jié)點(diǎn)在一定空間內(nèi)隨機(jī)被分配一個(gè)ID值,代表其在環(huán)上的位置。每個(gè)節(jié)點(diǎn)都存儲(chǔ)一張路由表,表內(nèi)順時(shí)針按照離本節(jié)點(diǎn)2、4、8、16、32.……21的距離選定個(gè)其他節(jié)點(diǎn)的IP信息來(lái)記錄。其每個(gè)節(jié)點(diǎn)存儲(chǔ)的路由表格式如圖2所示。如圖1所示,一個(gè)具體的查詢過(guò)程如下
一個(gè)Key值的讀請(qǐng)求從客戶端到某個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)作為代理節(jié)點(diǎn),對(duì)請(qǐng)求數(shù)據(jù)的Key值進(jìn)行一致性哈希運(yùn)算,得要一個(gè)鍵值,按照這個(gè)鍵值,根據(jù)集群組建時(shí)定下的復(fù)制策略來(lái)確定保存這個(gè)數(shù)據(jù)的η個(gè)節(jié)點(diǎn)的ID號(hào),以查找其中一個(gè)節(jié)點(diǎn)為例,先從該代理節(jié)點(diǎn)的路由表中,找一個(gè)和該哈希得到的鍵值距離最近、并且存活在網(wǎng)絡(luò)中的節(jié)點(diǎn)next (注此距離即為 key值哈希得到的鍵值和節(jié)點(diǎn)ID之間的差)。如果該節(jié)點(diǎn)的id巧合和上述根據(jù)請(qǐng)求Key 值哈希得到的鍵值相等,那么你已經(jīng)找到所要的節(jié)點(diǎn)。如果不相等,則到next進(jìn)行遞歸查找。一般或需要經(jīng)過(guò)多次查詢才能找到數(shù)據(jù)所在的節(jié)點(diǎn)。這個(gè)次數(shù)是可以被證明小于等于 Iog2N的。這就是Cassandra所用到的基本的路由思想?,F(xiàn)有Cassandra中分區(qū)路由方法的缺點(diǎn)是算法靈活性不足,比較死板,路由效率并不高,而且節(jié)點(diǎn)間如果存在大量路由信息,也會(huì)降低系統(tǒng)效率。存在此缺點(diǎn)的原因是,在 Cassandra路由算法中,如圖2所示,每個(gè)節(jié)點(diǎn)的路由表中第三列中只記錄一個(gè)節(jié)點(diǎn)的信息,導(dǎo)致路由效率不高;而且,按照其第二列距離來(lái)說(shuō),此距離是由減法得到的,這里也有可以提升的空間。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題在于克服現(xiàn)有Cassandra中分區(qū)路由方法的缺點(diǎn),提供一種具有更高效率的非關(guān)系型數(shù)據(jù)庫(kù)Cassandra中分區(qū)路由方法。本發(fā)明的思路是將Kad算法的思想引入現(xiàn)有Cassandra分區(qū)路由方法中,對(duì)現(xiàn)有分區(qū)路由方法進(jìn)行改進(jìn),從而提高路由效率。Kad (Kademlia,通常簡(jiǎn)稱為 Kad)是美國(guó)紐約大學(xué)的 PetarP. Maymounkov 和 David Mazieres在2002年發(fā)布的一項(xiàng)研究結(jié)果。Kad算法是一種分布式哈希表(DHT)技術(shù),不過(guò)和其他DHT實(shí)現(xiàn)技術(shù)比較,如chord等,Kad通過(guò)獨(dú)特的以異或算法為距離度量基礎(chǔ),建立了一個(gè)全新的DHT拓?fù)渌惴?,相比于其他算法,可以大大提高路由查詢速度。具體而言,本發(fā)明采用以下技術(shù)方案
一種非關(guān)系型數(shù)據(jù)庫(kù)Cassandra中分區(qū)路由方法,所述非關(guān)系型數(shù)據(jù)庫(kù)Cassandra — 個(gè)數(shù)據(jù)中心中每個(gè)節(jié)點(diǎn)在一定空間內(nèi)隨機(jī)被分配一個(gè)ID值,該ID值在本數(shù)據(jù)中心內(nèi)是唯一的,這個(gè)ID在本代表其在環(huán)上的位置;每個(gè)節(jié)點(diǎn)都存儲(chǔ)一張路由表,路由表內(nèi)記錄有按照離本節(jié)點(diǎn)的距離所選定的多個(gè)其他節(jié)點(diǎn)的IP信息;進(jìn)行路由搜索時(shí),根據(jù)節(jié)點(diǎn)間的距離由近到遠(yuǎn)進(jìn)行遞歸查找,所述節(jié)點(diǎn)間的距離是通過(guò)對(duì)兩節(jié)點(diǎn)的ID進(jìn)行異或運(yùn)算得到。進(jìn)一步地,所述路由表中保存有與本節(jié)點(diǎn)距離為
2的節(jié)點(diǎn)信息,i = m、k,k為預(yù)先設(shè)定的整數(shù)。本發(fā)明將Kad算法的思想引入現(xiàn)有Cassandra分區(qū)路由方法中,以異或算法(XOR) 為節(jié)點(diǎn)間距離的度量基礎(chǔ),并對(duì)路由表進(jìn)行了修改。相比現(xiàn)有路由方法,本發(fā)明具有以下優(yōu)點(diǎn)。
一.方便進(jìn)行網(wǎng)絡(luò)劃分,節(jié)點(diǎn)按照二進(jìn)制中每一bit的O或1建成一棵二叉樹(shù);
二.使每個(gè)節(jié)點(diǎn)保持的路由信息更豐富,同樣是將整個(gè)網(wǎng)絡(luò)按照劃分成Iog2N份,在 Cassandra原來(lái)的方法中中,是保持Iog2N個(gè)路由節(jié)點(diǎn),但在本發(fā)明中,則是保存了 Iog2N個(gè)隊(duì)列,這樣就保存了更多的節(jié)點(diǎn),使得命中率更高。每個(gè)隊(duì)列長(zhǎng)度為配置值t 是根據(jù)網(wǎng)絡(luò)狀態(tài)設(shè)置的常數(shù)),記錄網(wǎng)絡(luò)中對(duì)應(yīng)節(jié)點(diǎn)區(qū)域的多個(gè)節(jié)點(diǎn),并且根據(jù)活躍時(shí)間對(duì)這些節(jié)點(diǎn)進(jìn)行換入換出。
圖1為現(xiàn)有Cassandra分區(qū)路由方法的流程圖; 圖2為現(xiàn)有Cassandra分區(qū)路由方法的路由表結(jié)構(gòu); 圖3為本發(fā)明的路由表結(jié)構(gòu);
圖4為本發(fā)明路由方法與現(xiàn)有路由方法的效率對(duì)比結(jié)果。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明
本發(fā)明中,所述非關(guān)系型數(shù)據(jù)庫(kù)Cassandra中每個(gè)節(jié)點(diǎn)在一定空間內(nèi)隨機(jī)被分配一個(gè) ID值,代表其在環(huán)上的位置;每個(gè)節(jié)點(diǎn)都存儲(chǔ)一張路由表,路由表的結(jié)構(gòu)如圖3所示,我們可以將圖3所示的路由表和現(xiàn)有技術(shù)的路由表(圖2)進(jìn)行比較。針對(duì)于每一個(gè)節(jié)點(diǎn),在圖2 的路由表中,在與本節(jié)點(diǎn)減法對(duì)應(yīng)距離的范圍內(nèi)只存放一個(gè)節(jié)點(diǎn),(第二列表示與本節(jié)點(diǎn)的對(duì)應(yīng)距離,第三例表示存儲(chǔ)的節(jié)點(diǎn))。而在本發(fā)明的路由表中,在與本節(jié)點(diǎn)對(duì)應(yīng)的距離范圍內(nèi),存放著若干個(gè)節(jié)點(diǎn)。其中,節(jié)點(diǎn)間的距離是通過(guò)對(duì)兩節(jié)點(diǎn)的ID進(jìn)行異或運(yùn)算得到。在進(jìn)行路由搜索時(shí),按照以下步驟
步驟1、接收到查詢請(qǐng)求的節(jié)點(diǎn)將查詢請(qǐng)求中的key值進(jìn)行哈希,得到的哈希值即為所要查找目標(biāo)節(jié)點(diǎn)的ID;
步驟2、將目標(biāo)節(jié)點(diǎn)ID與本節(jié)點(diǎn)ID進(jìn)行異或運(yùn)算得到兩節(jié)點(diǎn)的距離,查找路由表,看路由表對(duì)應(yīng)的距離范圍那一行第三列上,有無(wú)目標(biāo)節(jié)點(diǎn),如存在,直接返回目標(biāo)節(jié)點(diǎn);如不存在,則轉(zhuǎn)步驟3;
步驟3、將該距離范圍內(nèi)那一行的第三列所存放的所有節(jié)點(diǎn)ID與目標(biāo)節(jié)點(diǎn)ID異或,找出異或值最小的那個(gè)節(jié)點(diǎn),以該節(jié)點(diǎn)為本節(jié)點(diǎn)執(zhí)行步驟2,依次遞歸查找,直到返回目標(biāo)節(jié)
點(diǎn)ο具體而言,假設(shè)ID值為χ的節(jié)點(diǎn)要查找ID值為y的節(jié)點(diǎn),則按照以下的遞歸操作步驟進(jìn)行路由查找
第一步、將key值進(jìn)行哈希,這個(gè)哈希函數(shù)可以具體應(yīng)用時(shí)再定義。哈希得到的數(shù)值就是目標(biāo)節(jié)點(diǎn)1。所以,過(guò)程演變成從χ節(jié)點(diǎn)查找y節(jié)點(diǎn)。第二步、對(duì)x、y異或計(jì)算出χ與y的距離dis,即diS=X XOR y,X0R表示異或。根據(jù)dis屬于的[2n,2n+1),求出η;在節(jié)點(diǎn)χ的路由表中第η行中第三列中比較有無(wú)目標(biāo)節(jié)點(diǎn), 如果存在,則將返回目標(biāo)節(jié)點(diǎn)此該目標(biāo)節(jié)點(diǎn)的信息,包括IP等。如果不存在,則將此行第三列中所有節(jié)點(diǎn)ID與目標(biāo)節(jié)點(diǎn)ID進(jìn)行異或,找出與目標(biāo)節(jié)點(diǎn)異或值最小的那個(gè)節(jié)點(diǎn)ζ。第三步、如果第二步中沒(méi)有找到目標(biāo)節(jié)點(diǎn)y,則路由到第二步最后得到的節(jié)點(diǎn)ζ進(jìn)行從第二步開(kāi)始的遞歸查找,直到查詢出目標(biāo)節(jié)點(diǎn)y,并返回。為了驗(yàn)證本發(fā)明的有益效果,模擬了一個(gè)數(shù)據(jù)中心,其中有64個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)各自存有Key-value對(duì),并假設(shè)在某一隨機(jī)節(jié)點(diǎn)查詢某一 key值,此需要路由到目標(biāo)節(jié)點(diǎn)去取值。分別采用本發(fā)明方法與現(xiàn)有方法進(jìn)行路由查找,并對(duì)比兩種方法找到目標(biāo)節(jié)點(diǎn)所需經(jīng)過(guò)的路由節(jié)點(diǎn)數(shù)。最終得到的對(duì)比結(jié)果如附圖4 (截取了實(shí)驗(yàn)的一部分?jǐn)?shù)據(jù))所示,其中,第二列表示本節(jié)點(diǎn)即發(fā)起查找請(qǐng)求的節(jié)點(diǎn),第三列表示要查找的目標(biāo)節(jié)點(diǎn),第四列和第五列表示依據(jù)改進(jìn)前后算法,路由過(guò)程經(jīng)過(guò)的節(jié)點(diǎn)。在十次實(shí)驗(yàn)中,原本算法需路由節(jié)點(diǎn)數(shù)44 (將該表中第四列中所用顯示到的節(jié)點(diǎn)相力Π)個(gè),而本發(fā)明(即圖中的改進(jìn)算法)只需路由節(jié)點(diǎn)數(shù)33 (將該表中第五列中所用顯示到的節(jié)點(diǎn)相加)個(gè)。由此,相比現(xiàn)有方法,本發(fā)明的路由效率提升了 25%。
權(quán)利要求
1.一種非關(guān)系型數(shù)據(jù)庫(kù)Cassandra中分區(qū)路由方法,所述非關(guān)系型數(shù)據(jù)庫(kù)Cassandra 一個(gè)數(shù)據(jù)中心中每個(gè)節(jié)點(diǎn)在一定空間內(nèi)隨機(jī)被分配一個(gè)ID值,該ID值在本數(shù)據(jù)中心內(nèi)是唯一的,這個(gè)ID代表其在環(huán)上的位置;每個(gè)節(jié)點(diǎn)都存儲(chǔ)一張路由表,路由表內(nèi)記錄有按照離本節(jié)點(diǎn)的距離所選定的多個(gè)其他節(jié)點(diǎn)的IP信息;進(jìn)行路由搜索時(shí),根據(jù)節(jié)點(diǎn)間的距離由近到遠(yuǎn)進(jìn)行遞歸查找,其特征在于,所述節(jié)點(diǎn)間的距離是通過(guò)對(duì)兩節(jié)點(diǎn)的ID進(jìn)行異或運(yùn)算得到。
2.如權(quán)利要求1所述非關(guān)系型數(shù)據(jù)庫(kù)Cassandra中分區(qū)路由方法,其特征在于,所述路由表中保存有與本節(jié)點(diǎn)距離為 的節(jié)點(diǎn)信息,I = 0,1,2,-,A',^為預(yù)先設(shè)定的整數(shù)。
3.如權(quán)利要求2所述非關(guān)系型數(shù)據(jù)庫(kù)Cassandra中分區(qū)路由方法,其特征在于,該方法包括以下步驟步驟1、接收到查詢請(qǐng)求的節(jié)點(diǎn)將查詢請(qǐng)求中的key值進(jìn)行哈希,得到的哈希值即為所要查找目標(biāo)節(jié)點(diǎn)的ID;步驟2、將目標(biāo)節(jié)點(diǎn)ID與本節(jié)點(diǎn)ID進(jìn)行異或運(yùn)算得到兩節(jié)點(diǎn)的距離,查找路由表,看路由表對(duì)應(yīng)的距離范圍那一行第三列上,有無(wú)目標(biāo)節(jié)點(diǎn),如存在,直接返回目標(biāo)節(jié)點(diǎn);如不存在,則轉(zhuǎn)步驟3;步驟3、將該距離范圍內(nèi)那一行的第三列所存放的所有節(jié)點(diǎn)ID與目標(biāo)節(jié)點(diǎn)ID異或,找出異或值最小的那個(gè)節(jié)點(diǎn),以該節(jié)點(diǎn)為本節(jié)點(diǎn)執(zhí)行步驟2,依次遞歸查找,直到返回目標(biāo)節(jié)點(diǎn)ο
全文摘要
本發(fā)明公開(kāi)了一種非關(guān)系型數(shù)據(jù)庫(kù)Cassandra中分區(qū)路由方法。所述非關(guān)系型數(shù)據(jù)庫(kù)Cassandra一個(gè)數(shù)據(jù)中心中每個(gè)節(jié)點(diǎn)在一定空間內(nèi)隨機(jī)被分配一個(gè)ID值,該ID值在本數(shù)據(jù)中心內(nèi)是唯一的,這個(gè)ID在本代表其在環(huán)上的位置;每個(gè)節(jié)點(diǎn)都存儲(chǔ)一張路由表,路由表內(nèi)記錄有按照離本節(jié)點(diǎn)的距離所選定的多個(gè)其他節(jié)點(diǎn)的IP信息;進(jìn)行路由搜索時(shí),根據(jù)節(jié)點(diǎn)間的距離由近到遠(yuǎn)進(jìn)行遞歸查找,所述節(jié)點(diǎn)間的距離是通過(guò)對(duì)兩節(jié)點(diǎn)的ID進(jìn)行異或運(yùn)算得到。本發(fā)明通過(guò)對(duì)現(xiàn)有路由方法進(jìn)行改進(jìn),以異或算法為距離度量基礎(chǔ),有效提高了非關(guān)系型數(shù)據(jù)庫(kù)Cassandra中的數(shù)據(jù)查詢效率。
文檔編號(hào)H04L12/56GK102201986SQ20111011879
公開(kāi)日2011年9月28日 申請(qǐng)日期2011年5月10日 優(yōu)先權(quán)日2011年5月10日
發(fā)明者陳葉輝, 陳國(guó)慶 申請(qǐng)人:蘇州兩江科技有限公司