張春波 徐翠娟 李曉會 哈爾濱職業(yè)技術(shù)學(xué)院
隨著科技的不斷發(fā)展,人們正在十分高速的產(chǎn)生著各種類型的數(shù)據(jù)。特別是云計算產(chǎn)業(yè)的形成,使得大數(shù)據(jù)被更多人多關(guān)注,也成為了一個很多人都知道的概念。數(shù)據(jù)的存儲和查詢是大數(shù)據(jù)中的一個問題,也對人們對數(shù)據(jù)的應(yīng)用有較大的影響,所以必須做好相關(guān)方面的工作。
目前,數(shù)據(jù)存儲和查詢主要分為兩個內(nèi)容,一個是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,另外一個就是NoSQL數(shù)據(jù)庫,下面做具體分析。
傳統(tǒng)關(guān)系型數(shù)據(jù)庫是以關(guān)系代數(shù)模型為基礎(chǔ),然后使用集合代數(shù)等數(shù)學(xué)方面的概念來處理其中的數(shù)據(jù)。過去,在數(shù)據(jù)量不大的時候,關(guān)系型數(shù)據(jù)庫也只是在單機(jī)的環(huán)境下運行,或者是在規(guī)模不大的服務(wù)器上運行。但是,隨著數(shù)據(jù)量的不斷增加,單機(jī)版的數(shù)據(jù)庫已經(jīng)不能滿足實際的需求,也開發(fā)出來了能夠在集群上運行的關(guān)系型數(shù)據(jù)庫版本。但是集群版存在一些問題。首先就是技術(shù)問題,如果磁盤子系統(tǒng)發(fā)生問題,整個系統(tǒng)可能就會出現(xiàn)問題。其次就是許可費的問題。很多關(guān)系型數(shù)據(jù)庫都是按照單臺服務(wù)器的方式進(jìn)行收費,所以在集群中使用就會比較貴,特別是在大數(shù)據(jù)時代,隨著數(shù)據(jù)量的增加,收費也在不斷增加,所以使用這種數(shù)據(jù)庫的人越來越少。
NoSQL數(shù)據(jù)庫相比傳統(tǒng)關(guān)系數(shù)據(jù)庫有更多的優(yōu)勢。應(yīng)用NoSQL數(shù)據(jù)庫,不需要使用“模式”,也就不用對結(jié)構(gòu)定義進(jìn)行修改,可以隨意的添加字段,在對不規(guī)則數(shù)據(jù)的處理上有很好的作用,而在關(guān)系型數(shù)據(jù)庫中,必須使用自定義的字段表,理解起來比較難。另外一個優(yōu)勢就是可以“列存”。通過列存的方法,在讀取數(shù)據(jù)的過程中,只需要訪問相關(guān)的屬性就行,不但可以提高速度,還能夠進(jìn)行數(shù)據(jù)的壓縮。
Pregel是一種大塊同步并行計算模型,主要依據(jù)點的ID,將圖劃分成很多不同的板塊,每一個板塊都是由一組點以及他們出發(fā)的邊組合而成。在沒有錯誤的情況下,Pregel主要分為下面幾個部分。第一,就是任務(wù)分配和主節(jié)點的初始化。用戶可以將編寫完成的程序傳輸?shù)郊荷?,然后并行?zhí)行,可以將其中的一個當(dāng)成主節(jié)點,其不屬于任何一個部分,只需要負(fù)責(zé)從節(jié)點活躍性的協(xié)調(diào)工作;第二,是劃分方案決定的階段,主節(jié)點決定可以將圖分成幾份,也不指定一個節(jié)點有多少塊,將一個節(jié)點劃分成很多塊,可以很好的提高并行性,從而可以增強(qiáng)計算的效率。每一個節(jié)點都需要負(fù)責(zé)維護(hù)其板塊的狀態(tài)和執(zhí)行計算的工作,對其他節(jié)點的信息進(jìn)行管理;第三,就是圖數(shù)據(jù)的劃分階段。主節(jié)點可以將用戶輸入進(jìn)來的數(shù)據(jù)傳給從節(jié)點,如果從節(jié)點收到了屬于自己的點,就可以對自己的數(shù)據(jù)結(jié)構(gòu)進(jìn)行更新。當(dāng)輸入徹底結(jié)束之后,所有的點都應(yīng)該處于激活的狀態(tài);第四,計算。從節(jié)點應(yīng)該按照主節(jié)點的指示實施超級步,從節(jié)點需要在激活狀態(tài)的點中執(zhí)行,每一個點都應(yīng)該有一個線程可以進(jìn)行計算,然后對上邊一個超級步中的信息進(jìn)行傳遞。在所有計算都完成之后,從節(jié)點需要按照主節(jié)點的指導(dǎo)保存自己的圖。
對于任何一個頂點,GraphLab都可以將其分配到多臺機(jī)器上邊,并且將其中的一臺當(dāng)成主頂點,其他的機(jī)器作為鏡像頂點。主頂點應(yīng)該管理鏡像頂點,可以給鏡像頂點安排計算的任務(wù)。而鏡像頂點主要就是一個代理者,需要和主頂點上的數(shù)據(jù)保持一致。而針對邊的存儲,一臺機(jī)器和一條邊需要保持一對一的形式,這樣也可以解決邊的數(shù)量過多的問題。另外,可以將一個機(jī)器上的點和邊構(gòu)成一個地圖,每個機(jī)器都有本地ID到全局ID的映射。
GBase模型更加側(cè)重于圖數(shù)據(jù)的存儲與查詢,將圖先進(jìn)行劃分,再進(jìn)行壓縮,最后進(jìn)行計算。GBase可以簡單的分為兩個部分,索引階段和查詢階段。在索引階段中,可以將一個比較大的邊數(shù)據(jù)文件分成很多同構(gòu)的板塊,然后結(jié)合劃分的結(jié)果,重新排序定點的位置,使同一個劃分中的點能夠放在一起。然后,可以將劃分好的數(shù)據(jù)進(jìn)行壓縮,最后存儲到數(shù)據(jù)庫中。在查詢階段,GBase可以提供一個有效的基本算法,比如歸類、異常檢測等。這種以圖結(jié)構(gòu)為基礎(chǔ)的方法,能夠更好的利用圖的信息提高存儲和查詢的效率。雖然這種方法的使用難度略大,但是效率相比要更高,因為不需要使用較多的網(wǎng)絡(luò)通訊,也不用等到最慢的節(jié)點徹底完成計算。
隨著大數(shù)據(jù)時代的到來,人們生活、工作中需要的數(shù)據(jù)也越來越多,對數(shù)據(jù)的存儲和查詢也變得更加困難。但是隨著技術(shù)的發(fā)展,人們也在不斷更新數(shù)據(jù)庫,應(yīng)用更多的模型,希望可以提高大數(shù)據(jù)環(huán)境下數(shù)據(jù)存儲和查詢的效率。
[1]劉曉.大數(shù)據(jù)環(huán)境下數(shù)據(jù)中心的數(shù)據(jù)生命周期管理研究[J].中國金融電腦,2014,(10):71-75.
[2]顧榮,仇紅劍,楊文家等.Goldfish:基于矩陣分解的大規(guī)模RDF數(shù)據(jù)存儲與查詢系統(tǒng)[J].計算機(jī)學(xué)報,2017,40(10):2212-2230.
[3]伍晉博,宋杰,張莉等.基于概率的大數(shù)據(jù)查詢系統(tǒng)——Probery[J].計算機(jī)應(yīng)用,2016,36(1):8-12.