本發(fā)明涉及計算機(jī)領(lǐng)域,尤其涉及一種可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法及裝置。
背景技術(shù):
語義網(wǎng)是通過萬維網(wǎng)上的文檔添加能夠被機(jī)器理解的語義(Meta Data),從而使整個互聯(lián)網(wǎng)成為一個通用的信息交換媒介。資源描述框架(Resource Description Framework,簡稱:RDF)是用于描述網(wǎng)絡(luò)資源的萬維網(wǎng)聯(lián)盟(World Wide Web Consortium,簡稱:W3C)標(biāo)準(zhǔn),用于表達(dá)關(guān)于互聯(lián)網(wǎng)網(wǎng)頁資源的元數(shù)據(jù),例如網(wǎng)頁的標(biāo)題、作者、修改日期、內(nèi)容以及版權(quán)信息等。基于RDF數(shù)據(jù)對語義網(wǎng)進(jìn)行研究,一直是科學(xué)界的研究熱點。而如何高性能、易擴(kuò)展地存儲和查詢海量RDF數(shù)據(jù)成為亟需解決的問題。
現(xiàn)有技術(shù)中,針對海量的RDF數(shù)據(jù),學(xué)術(shù)界已經(jīng)開發(fā)了一些成熟的RDF數(shù)據(jù)存儲方法,這些存儲方法大都采用傳統(tǒng)的集中式關(guān)系型數(shù)據(jù)庫來存儲RDF數(shù)據(jù)。但是,隨著RDF數(shù)據(jù)的急速增長,傳統(tǒng)的集中式關(guān)系型數(shù)據(jù)存儲方式已經(jīng)無法滿足存儲及查詢計算的需求,因此,分布式RDF數(shù)據(jù)存儲與查詢系統(tǒng)得到了越來越多的應(yīng)用。例如,一種RDF數(shù)據(jù)存儲方案中,采用鍵值(key-value)存儲系統(tǒng)Redis作為RDF數(shù)據(jù)的存儲系統(tǒng),通過將RDF數(shù)據(jù)通過多個存儲節(jié)點進(jìn)行存儲,并行處理查詢?nèi)蝿?wù),從而提高了查詢效率。
但是,現(xiàn)有技術(shù)中提供的這種分布式RDF數(shù)據(jù)存儲方法,當(dāng)某一個數(shù)據(jù)存儲節(jié)點失效時,數(shù)據(jù)就會丟失,導(dǎo)致服務(wù)中斷。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法及裝置,用于解決現(xiàn)有技術(shù)中的資源描述框架數(shù)據(jù)存儲方法中存儲節(jié)點失效導(dǎo)致服務(wù)中斷的問題。
本發(fā)明實施例提供一種智能終端的外設(shè)管控檢測方法,包括:
將所有資源描述框架RDF數(shù)據(jù)分配到至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲;
將每個第一存儲節(jié)點的內(nèi)存中的數(shù)據(jù)備份到第二存儲節(jié)點的持久化存儲器中,所述第一存儲節(jié)點及所述第二存儲節(jié)點為所述至少兩個存儲節(jié)點中的任意一個存儲節(jié)點,所述第二存儲節(jié)點與所述第一存儲節(jié)點相鄰。
在上述實施例的基礎(chǔ)上,所述方法還包括:
監(jiān)控所述至少兩個存儲節(jié)點的存儲狀態(tài);
若所述第一存儲節(jié)點的存儲狀態(tài)為失效,則,將所述第二存儲節(jié)點的持久化存儲器中備份的所述第一存儲節(jié)點的內(nèi)存中的數(shù)據(jù),恢復(fù)到所述第二存儲節(jié)點的內(nèi)存中。
在上述實施例的基礎(chǔ)上,所述將所有資源描述框架RDF數(shù)據(jù)分配到至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲之前,還包括:
獲取所述RDF數(shù)據(jù)的主語、謂語及賓語;
根據(jù)所述主語、謂語及賓語對所述RDF數(shù)據(jù)建立索引;
所述將所有RDF數(shù)據(jù)分配到至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲,包括:
根據(jù)一致性哈希算法將建立了索引的所述RDF數(shù)據(jù)分配到所述至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲。
在上述實施例的基礎(chǔ)上,所述根據(jù)所述主語、謂語及賓語對所述RDF數(shù)據(jù)建立索引,包括以下任意一種或多種方式的組合:
以主語和謂語為鍵,賓語為值對所述RDF數(shù)據(jù)建立索引;
以主語和賓語為鍵,謂語為值對所述RDF數(shù)據(jù)建立索引;
以謂語和賓語為鍵,主語為值對所述RDF數(shù)據(jù)建立索引;
以主語為鍵,謂語和賓語為值對所述RDF數(shù)據(jù)建立索引;
以謂語為鍵,主語和謂語為值對所述RDF數(shù)據(jù)建立索引;
以賓語為鍵,主語和謂語為值對所述RDF數(shù)據(jù)建立索引。
本發(fā)明實施例還提供一種可伸縮的分布式的資源描述框架數(shù)據(jù)存儲裝置,包括:
分配模塊,用于將所有資源描述框架RDF數(shù)據(jù)分配到至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲;所述至少兩個存儲節(jié)點包括第一存儲節(jié)點及第二存儲節(jié)點;
備份模塊,用于將所述第一存儲節(jié)點的內(nèi)存中的數(shù)據(jù)備份到所述第二存儲節(jié)點的持久化存儲器中,所述第二存儲節(jié)點與所述第一存儲節(jié)點相鄰。
在上述實施例的基礎(chǔ)上,所述裝置還包括:
監(jiān)控模塊,用于監(jiān)控所述至少兩個存儲節(jié)點的存儲狀態(tài);
數(shù)據(jù)恢復(fù)模塊,用于當(dāng)所述監(jiān)控模塊監(jiān)控到所述第一存儲節(jié)點的存儲狀態(tài)為失效時,將所述第二存儲節(jié)點的持久化存儲器中備份的所述第一存儲節(jié)點的內(nèi)存中的數(shù)據(jù),恢復(fù)到所述第二存儲節(jié)點的內(nèi)存中。
在上述實施例的基礎(chǔ)上,所述裝置還包括:
獲取模塊,用于在所述分配模塊將所有資源描述框架RDF數(shù)據(jù)分配到至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲之前,獲取所述RDF數(shù)據(jù)的主語、謂語及賓語;
內(nèi)存存儲管理模塊,用于根據(jù)所述主語、謂語及賓語對所述RDF數(shù)據(jù)建立索引;
所述分配模塊,用于根據(jù)一致性哈希算法將建立了索引的所述RDF數(shù)據(jù)分配到所述至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲。
在上述實施例的基礎(chǔ)上,所述內(nèi)存存儲管理模塊,具體用于:
以主語和謂語為鍵,賓語為值對所述RDF數(shù)據(jù)建立索引;
以主語和賓語為鍵,謂語為值對所述RDF數(shù)據(jù)建立索引;
以謂語和賓語為鍵,主語為值對所述RDF數(shù)據(jù)建立索引;
以主語為鍵,謂語和賓語為值對所述RDF數(shù)據(jù)建立索引;
以謂語為鍵,主語和謂語為值對所述RDF數(shù)據(jù)建立索引;
以賓語為鍵,主語和謂語為值對所述RDF數(shù)據(jù)建立索引。
本發(fā)明實施例提供的可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法及裝置,通過將所有RDF數(shù)據(jù)分配到各個存儲節(jié)點,提高了數(shù)據(jù)存儲及訪問的效率。同時,支持存儲節(jié)點的動態(tài)加入和退出,并將各個存儲節(jié)點中的數(shù)據(jù)備份到一致性哈希環(huán)中的相鄰存儲節(jié)點中,保證某個存儲節(jié)點失效時,能夠快速地從該存儲節(jié)點的相鄰存儲節(jié)點本地恢復(fù)數(shù)據(jù),保證系統(tǒng)不崩潰,持續(xù)提供數(shù)據(jù)存儲及查詢服務(wù)。當(dāng)新增存儲節(jié)點時,數(shù)據(jù)根據(jù)一致性哈希協(xié)議自動遷移,新增節(jié)點能夠迅速投入使用。同時,采用Redis集群作為底層的內(nèi)存存儲系統(tǒng),并采用SP_O,SO_P,OP_S,S_OP,P_SO,O_SP 6個索引,并在此基礎(chǔ)上構(gòu)建了分布式的RDF查詢引擎,實現(xiàn)了一個快速查詢的分布式RDF系統(tǒng),并能夠支持任何類型的數(shù)據(jù)查詢。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖做一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例可伸縮的分布式的資源描述框架數(shù)據(jù)存儲及查詢系統(tǒng)的結(jié)構(gòu)示意圖;
圖2為本發(fā)明實施例中查詢計劃生成模塊生成的查詢計劃樹的結(jié)構(gòu)示意圖;
圖3是本發(fā)明實施例可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法的流程示意圖;
圖4為本發(fā)明實施例可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法進(jìn)行數(shù)據(jù)分配及備份的流程示意圖;
圖5為本發(fā)明實施例可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法向存儲節(jié)點中分配數(shù)據(jù)的過程示意圖;
圖6為本發(fā)明實施例可伸縮的分布式的資源描述框架數(shù)據(jù)存儲裝置的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實施例智能終端的可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法及裝置,用于實現(xiàn)資源描述框架(Resource Description Framework,簡稱RDF)數(shù)據(jù)基于鍵值的分布式存儲和查詢,提高數(shù)據(jù)讀取效率,同時通過將數(shù)據(jù)備份到相鄰存儲節(jié)點中,使得某個存儲節(jié)點失效時,可以從相鄰存儲節(jié)點中恢復(fù)數(shù)據(jù),防止系統(tǒng)崩潰,服務(wù)中斷,影響數(shù)據(jù)存儲與查詢性能。
圖1為本發(fā)明實施例可伸縮的分布式的資源描述框架數(shù)據(jù)存儲及查詢系統(tǒng)的結(jié)構(gòu)示意圖。
請參閱圖1,本發(fā)明實施例提供的可伸縮的分布式的資源描述框架數(shù)據(jù)存儲及查詢系統(tǒng)包括主控節(jié)點10,至少兩個從節(jié)點20,及用于實現(xiàn)所述主控節(jié)點10與所述從節(jié)點20之間通信的通信模塊30。所述主控節(jié)點10及從節(jié)點20可以為具有數(shù)據(jù)處理能力及存儲能力的設(shè)備,如計算機(jī)。所述主控節(jié)點10包括:RDF數(shù)據(jù)解析器11、字典12、RDF數(shù)據(jù)統(tǒng)計模塊13、RDF數(shù)據(jù)切分器14、查詢語句解析器15、查詢計劃生成模塊16及優(yōu)化查詢模塊17。所述從節(jié)點20包括本地查詢處理器21、內(nèi)存存儲管理模塊22、備份及恢復(fù)模塊23、磁盤存儲管理模塊24及監(jiān)控模塊25。
具體地,所述RDF數(shù)據(jù)解析器11負(fù)責(zé)從不同格式的RDF數(shù)據(jù)文件中提取出主語、謂語及賓語(subject,predicate,object)三元組。RDF數(shù)據(jù)源目前一般來自NT,N3,TTL等格式的數(shù)據(jù)文件。他們以不同的方式來描述RDF數(shù)據(jù)圖,但他們的基本元素都是三元組。所述RDF數(shù)據(jù)解析器11能夠識別這些格式的數(shù)據(jù)文件,并從每條語句中提取出三元組。一個數(shù)據(jù)文件大則10G,所述RDF數(shù)據(jù)解析器11能夠快速地處理這些文件。
所述字典12用于將字符串格式的三元組映射成ID,以便于對三元組進(jìn)行編碼及排序,并且節(jié)省存儲空間。首先,從所述RDF數(shù)據(jù)解析器11中接收字符串格式的三元組,然后根據(jù)每個元組到字典中去查找對應(yīng)的標(biāo)識(Ientification,簡稱ID)。如果存在則直接返回該ID,如果不存在則生成一個唯一的ID,并將所述ID和所述字符串對應(yīng)存入字典中,返回所述ID。
所述RDF數(shù)據(jù)類型統(tǒng)計模塊13用于統(tǒng)計不同組合的三元組的數(shù)量,并將統(tǒng)計數(shù)據(jù)保存到所述主控節(jié)點10的內(nèi)存中。所述統(tǒng)計數(shù)據(jù)為將來查詢計劃的優(yōu)化提供幫助,以最優(yōu)化連接順序,減少中間數(shù)據(jù)的產(chǎn)生。鑒于主語(簡稱S),謂語(簡稱P),賓語(簡稱O),主語和謂語(簡稱SP),謂語和賓語(簡稱PO)類型的三元組在查詢中較為常用,所述數(shù)據(jù)類型統(tǒng)計模塊13存儲相同S、相同P、相同O、相同SP或者相同PO的數(shù)量,在查詢過程中需要決定連接順序時,根據(jù)這些統(tǒng)計數(shù)據(jù)來判斷。數(shù)量少的先連接,數(shù)量多的后連接,從而提高查詢效率。
所述RDF數(shù)據(jù)切分器14用于按照一致性哈希規(guī)則將數(shù)據(jù)分配到各個從節(jié)點20中。由于一致性哈希算法支持節(jié)點的動態(tài)加入和退出,因此通過一致性哈希算法可以實現(xiàn)系統(tǒng)的容錯功能。首先構(gòu)建一個環(huán)形哈希空間,然后將RDF數(shù)據(jù)哈希到環(huán)中,接著將存儲節(jié)點哈希到環(huán)中,按照順時針方向,將數(shù)據(jù)存到相鄰的存儲節(jié)點中。當(dāng)刪除一個存儲節(jié)點時,按照順時針方向,將被刪節(jié)點的數(shù)據(jù)路由到下一個存儲節(jié)點中。當(dāng)新增一個存儲節(jié)點時,將新增節(jié)點及其逆時針方向相鄰的存儲節(jié)點之間的數(shù)據(jù)都路由到新增存儲節(jié)點中。
所述查詢語句解析器15用于將查詢語言和數(shù)據(jù)獲取協(xié)議(Simple Protocol and RDF Query Language,簡稱:SPARQL)查詢語句解析成一個查詢圖,并識別出其中的變量、常量以及查詢模式。
所述查詢計劃生成模塊16用于根據(jù)查詢語句生成一個查詢計劃,查詢計劃是一個操作樹,樹上每個節(jié)點都是一個算子,算子包括掃描操作,連接操作。
圖2為本發(fā)明實施例中查詢計劃生成模塊生成的查詢計劃樹的結(jié)構(gòu)示意圖。如圖2所示,DIS表示掃描操作,從存儲中找到符合的查詢模式,DMJ表示對兩個查詢模式進(jìn)行連接操作,最后DHJ對所有的結(jié)果進(jìn)行連接,生成最終的查詢計劃。
所述優(yōu)化查詢模塊17用于根據(jù)生成的所述查詢計劃以及所述統(tǒng)計數(shù)據(jù),優(yōu)化掃描和連接順序,使查詢計劃樹上的操作能夠并行執(zhí)行,并盡量減少中間結(jié)果的產(chǎn)生。
所述從節(jié)點20的所述本地查詢處理器21用于根據(jù)從所述主控節(jié)點10中接收到的所述查詢計劃執(zhí)行相關(guān)的掃描操作和連接操作,并負(fù)責(zé)各個從節(jié)點20間相互傳輸中間結(jié)果。其中掃描操作表示根據(jù)所述查詢模式從存儲中找到符合條件的三元組,連接操作表示將兩個查詢模式計算笛卡爾積得到中間結(jié)果或者最終結(jié)果。
所述內(nèi)存存儲管理模塊22用于將接收到的RDF三元組數(shù)據(jù)以鍵值(key-value)的方式存入內(nèi)存中,并根據(jù)查詢要求快速地查找數(shù)據(jù)。目前針對查詢的可能情況,一共建立6類索引。分別是:SP為鍵,O為值;SO為鍵,P為值;OP為鍵,S為值;S為鍵,OP為值;P為鍵,SO為值;O為鍵,SP為值。索引后的數(shù)據(jù)以(String,Set<String>)字符串結(jié)構(gòu)存儲在Redis數(shù)據(jù)庫中。
所述備份及恢復(fù)模塊23用于根據(jù)一致性哈希算法將所述從節(jié)點20的內(nèi)存中存儲的數(shù)據(jù)備份到相鄰從節(jié)點的持久化存儲器,例如磁盤中。磁盤中的數(shù)據(jù)以鍵值結(jié)構(gòu)由磁盤管理模塊24負(fù)責(zé)組織和管理。直到所有數(shù)據(jù)加載完成,備份也相應(yīng)完成。當(dāng)所述從節(jié)點20失效時能夠快速地從相鄰從節(jié)點的磁盤中恢復(fù)數(shù)據(jù),保證查詢服務(wù)不中斷。
所述監(jiān)控模塊25用于監(jiān)控各個從節(jié)點20,一旦任意一個從節(jié)點20失效,快速通知所述主控節(jié)點10恢復(fù)所述失效從節(jié)點中的數(shù)據(jù)。所述主控節(jié)點10收到請求后,通知其他存活的從節(jié)點并行地恢復(fù)數(shù)據(jù),實現(xiàn)容錯。具體地,所述監(jiān)控模塊24進(jìn)行失效檢測利用了Zookeeper的配置管理和組成員管理服務(wù)。
圖3是本發(fā)明實施例可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法的流程示意圖。
請參閱圖3,本發(fā)明實施例提供的可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法包括:
S101:將所有資源描述框架RDF數(shù)據(jù)分配到至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲;
所述存儲節(jié)點為上述可伸縮的分布式的資源描述框架數(shù)據(jù)存儲及查詢系統(tǒng)中的從節(jié)點。具體地,所述存儲節(jié)點可以為具有存儲功能的電子設(shè)備,如計算機(jī)、移動終端等。
在執(zhí)行所述步驟S101之前,當(dāng)主控節(jié)點接收到RDF數(shù)據(jù)后,先獲取所述RDF數(shù)據(jù)的主語、謂語及賓語;然后根據(jù)所述主語、謂語及賓語對所述RDF數(shù)據(jù)建立索引。
所述將所有RDF數(shù)據(jù)分配到至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲,包括:
根據(jù)一致性哈希算法將建立了索引的所述RDF數(shù)據(jù)分配到所述至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲。
具體地,所述根據(jù)所述主語、謂語及賓語對所述RDF數(shù)據(jù)建立索引,包括以下任意一種或多種方式的組合:
以主語和謂語為鍵,賓語為值對所述RDF數(shù)據(jù)建立索引;
以主語和賓語為鍵,謂語為值對所述RDF數(shù)據(jù)建立索引;
以謂語和賓語為鍵,主語為值對所述RDF數(shù)據(jù)建立索引;
以主語為鍵,謂語和賓語為值對所述RDF數(shù)據(jù)建立索引;
以謂語為鍵,主語和謂語為值對所述RDF數(shù)據(jù)建立索引;
以賓語為鍵,主語和謂語為值對所述RDF數(shù)據(jù)建立索引。
采用上述六種方式建立索引,涵蓋了RDF數(shù)據(jù)主語、謂語、賓語三元組按照鍵值結(jié)構(gòu)的任意組合方式,使得本發(fā)明實施例提供的分布式的資源描述框架數(shù)據(jù)存儲方法可以支持任何類型的數(shù)據(jù)查詢。
S102:將每個第一存儲節(jié)點的內(nèi)存中的數(shù)據(jù)備份到第二存儲節(jié)點的持久化存儲器中,所述第一存儲節(jié)點及所述第二存儲節(jié)點為所述至少兩個存儲節(jié)點中的任意一個存儲節(jié)點,所述第二存儲節(jié)點與所述第一存儲節(jié)點相鄰。
進(jìn)一步地,所述方法還包括:
監(jiān)控所述至少兩個存儲節(jié)點的存儲狀態(tài);
若所述第一存儲節(jié)點的存儲狀態(tài)為失效,則,將所述第二存儲節(jié)點的持久化存儲器中備份的所述第一存儲節(jié)點的內(nèi)存中的數(shù)據(jù),恢復(fù)到所述第二存儲節(jié)點的內(nèi)存中。
圖4為本發(fā)明實施例可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法進(jìn)行數(shù)據(jù)分配及備份的流程示意圖。
請參閱圖3,進(jìn)行數(shù)據(jù)分配時,主控節(jié)點從RDF數(shù)據(jù)文件中解析出主語、謂語及賓語三元組,對每條三元組建立上述6種鍵值類型的索引,并且根據(jù)一致性哈希協(xié)議將RDF數(shù)據(jù)分發(fā)到多個相應(yīng)的存儲節(jié)點中保存。多個存儲節(jié)點接收到數(shù)據(jù)后存儲一份至內(nèi)存,并根據(jù)一致性哈希協(xié)議找到該存儲節(jié)點在一致性哈希環(huán)上的相鄰存儲節(jié)點,將數(shù)據(jù)備份到該相鄰存儲節(jié)點的持久化存儲器,例如磁盤中。
圖5為本發(fā)明實施例可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法向存儲節(jié)點中分配數(shù)據(jù)的過程示意圖。
下面以圖5為例對數(shù)據(jù)的分配、備份及恢復(fù)過程進(jìn)行說明。
請參閱圖5,對數(shù)據(jù)進(jìn)行分配時,首先,構(gòu)建一個環(huán)形哈??臻g,然后將所有RDF數(shù)據(jù)哈希到環(huán)中,接著將各個存儲節(jié)點哈希到環(huán)中,按照順時針方向,將數(shù)據(jù)存到相鄰的存儲節(jié)點中。如圖3,示例地,數(shù)據(jù)1-3存儲于存儲節(jié)點A的內(nèi)存中,數(shù)據(jù)4-6存儲于存儲節(jié)點B的內(nèi)存中,數(shù)據(jù)7-9存儲于存儲節(jié)點C的內(nèi)存中,數(shù)據(jù)10-12存儲于存儲節(jié)點D的內(nèi)存中,依次類推。同時,數(shù)據(jù)1-3備份于存儲節(jié)點A的相鄰存儲節(jié)點B的磁盤中,數(shù)據(jù)4-6備份于存儲節(jié)點B的相鄰存儲節(jié)點C的磁盤中,數(shù)據(jù)7-9備份于存儲節(jié)點D的磁盤中,數(shù)據(jù)10-12備份于存儲節(jié)點A的磁盤中,依次類推。
當(dāng)存儲節(jié)點D失效,需要刪除存儲節(jié)點D時,系統(tǒng)通過以下方式對存儲節(jié)點D中的數(shù)據(jù)進(jìn)行恢復(fù):
1)從存儲節(jié)點A的磁盤中恢復(fù)數(shù)據(jù)10-12至內(nèi)存中;
2)將存儲節(jié)點A磁盤中的所有數(shù)據(jù)10-12及1-3轉(zhuǎn)移到存儲節(jié)點B的磁盤中;
3)清空存儲節(jié)點A的磁盤中的所有數(shù)據(jù);
4)將存儲節(jié)點C內(nèi)存中的所有數(shù)據(jù)備份到存儲節(jié)點A的磁盤中。
示例地,請繼續(xù)參閱圖4,當(dāng)分布式系統(tǒng)集群計算能力和存儲能力不足,需要新增存儲節(jié)點D時,各個存儲節(jié)點中的數(shù)據(jù)遷移過程如下:
1)計算新增存儲節(jié)點D的哈希值,根據(jù)存儲節(jié)點D的哈希值確定存儲節(jié)點在哈希環(huán)中的位置;
2)從存儲節(jié)點B的磁盤中將存儲節(jié)點D的存儲范圍內(nèi)的數(shù)據(jù)恢復(fù)到存儲節(jié)點D的內(nèi)存中;
3)將存儲節(jié)點A的磁盤的數(shù)據(jù)中將存儲節(jié)點C的存儲范圍內(nèi)的數(shù)據(jù)轉(zhuǎn)移到存儲節(jié)點D的磁盤中;
4)情況存儲節(jié)點A的磁盤中的數(shù)據(jù);
5)從存儲節(jié)點B的磁盤中將存儲節(jié)點D的存儲范圍內(nèi)的數(shù)據(jù)轉(zhuǎn)移到存儲節(jié)點A的磁盤中;
6)從存儲節(jié)點A的內(nèi)存中刪除存儲節(jié)點D的存儲范圍內(nèi)的數(shù)據(jù);
7)從存儲節(jié)點B的磁盤中刪除存儲節(jié)點D的存儲范圍內(nèi)的數(shù)據(jù)。
本發(fā)明實施例提供的可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法,通過一致性哈希算法將所有RDF數(shù)據(jù)分配到各個存儲節(jié)點,提高了數(shù)據(jù)存儲訪問的效率。同時,支持存儲節(jié)點的動態(tài)加入和退出,并將各個存儲節(jié)點中的數(shù)據(jù)備份到一致性哈希環(huán)中的相鄰存儲節(jié)點中,保證某個存儲節(jié)點失效時,能夠快速地從該存儲節(jié)點的相鄰存儲節(jié)點本地恢復(fù)數(shù)據(jù),保證系統(tǒng)不崩潰,持續(xù)提供數(shù)據(jù)存儲及查詢服務(wù)。當(dāng)新增存儲節(jié)點時,數(shù)據(jù)根據(jù)一致性哈希協(xié)議自動遷移,新增節(jié)點能夠迅速投入使用。同時,采用Redis集群作為底層的內(nèi)存存儲系統(tǒng),并采用SP_O,SO_P,OP_S,S_OP,P_SO,O_SP 6個索引,并在此基礎(chǔ)上構(gòu)建了分布式的RDF查詢引擎,實現(xiàn)了一個快速查詢的分布式RDF系統(tǒng),并能夠支持任何類型的數(shù)據(jù)查詢。
圖6為本發(fā)明實施例可伸縮的分布式的資源描述框架數(shù)據(jù)存儲裝置的結(jié)構(gòu)示意圖。
請參閱圖6,本發(fā)明實施例提供的可伸縮的分布式的資源描述框架數(shù)據(jù)存儲裝置,至少包括分配模塊610及備份模塊620。
所述分配模塊610,用于將所有資源描述框架RDF數(shù)據(jù)分配到至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲;所述至少兩個存儲節(jié)點包括第一存儲節(jié)點及第二存儲節(jié)點;
所述備份模塊620,用于將所述第一存儲節(jié)點的內(nèi)存中的數(shù)據(jù)備份到所述第二存儲節(jié)點的持久化存儲器中,所述第二存儲節(jié)點與所述第一存儲節(jié)點相鄰。
在上述實施例的基礎(chǔ)上,進(jìn)一步地,所述裝置還包括:
監(jiān)控模塊630,用于監(jiān)控所述至少兩個存儲節(jié)點的存儲狀態(tài);
數(shù)據(jù)恢復(fù)模塊640,用于當(dāng)所述監(jiān)控模塊監(jiān)控到所述第一存儲節(jié)點的存儲狀態(tài)為失效時,將所述第二存儲節(jié)點的持久化存儲器中備份的所述第一存儲節(jié)點的內(nèi)存中的數(shù)據(jù),恢復(fù)到所述第二存儲節(jié)點的內(nèi)存中。
在上述實施例的基礎(chǔ)上,進(jìn)一步地,所述裝置還包括:
獲取模塊650,用于在所述分配模塊將所有資源描述框架RDF數(shù)據(jù)分配到至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲之前,獲取所述RDF數(shù)據(jù)的主語、謂語及賓語;
內(nèi)存存儲管理模塊660,用于根據(jù)所述主語、謂語及賓語對所述RDF數(shù)據(jù)建立索引;
所述分配模塊610,用于根據(jù)一致性哈希算法將建立了索引的所述RDF數(shù)據(jù)分配到所述至少兩個存儲節(jié)點的內(nèi)存中進(jìn)行存儲。
在上述實施例的基礎(chǔ)上,進(jìn)一步地,所述內(nèi)存存儲管理模塊660,具體用于:
以主語和謂語為鍵,賓語為值對所述RDF數(shù)據(jù)建立索引;
以主語和賓語為鍵,謂語為值對所述RDF數(shù)據(jù)建立索引;
以謂語和賓語為鍵,主語為值對所述RDF數(shù)據(jù)建立索引;
以主語為鍵,謂語和賓語為值對所述RDF數(shù)據(jù)建立索引;
以謂語為鍵,主語和謂語為值對所述RDF數(shù)據(jù)建立索引;
以賓語為鍵,主語和謂語為值對所述RDF數(shù)據(jù)建立索引。
本發(fā)明實施例提供的可伸縮的分布式的資源描述框架數(shù)據(jù)存儲裝置用于實現(xiàn)上述方法實施例提供的可伸縮的分布式的資源描述框架數(shù)據(jù)存儲方法,其具體實現(xiàn)原理及技術(shù)效果與方法實施例類似,在此不再贅述。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機(jī)、手機(jī)或其他便攜裝置的可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。