梁雪青, 杜舒明
(廣東電網(wǎng)廣州供電局, 廣東, 廣州 510000)
在社會信息化發(fā)展大背景下,網(wǎng)絡中的數(shù)據(jù)量增長速度越來越快,因此傳統(tǒng)的紙質(zhì)資料存儲方式不再適用。一般情況下,數(shù)據(jù)分為兩種類型,即結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。在這兩種數(shù)據(jù)中,非結(jié)構(gòu)化數(shù)據(jù)增長態(tài)勢格外顯著。非結(jié)構(gòu)化數(shù)據(jù)是指用戶瀏覽信息時,產(chǎn)生的文檔、圖片、音頻以及視頻等多種類型的文件,這類數(shù)據(jù)的結(jié)構(gòu)不固定,并且增長速度十分顯著。根據(jù)統(tǒng)計資料顯示,目前非結(jié)構(gòu)化數(shù)據(jù)正以60%的增長速度不斷增加,國內(nèi)的研究學者為了更好地實現(xiàn)數(shù)據(jù)高效存儲的目標,文獻[1]設(shè)計一種區(qū)塊鏈的數(shù)據(jù)存儲方法以及文獻[2]設(shè)計了一種基于Cassandra的數(shù)據(jù)存儲方法。同時,國外學者對此也進行了深入研究,也取得了不錯的研究成果,例如文獻[3]提出一種優(yōu)化非二元圖碼的組合方法以及基于納米單芯片的數(shù)據(jù)存儲方法。但隨著信息化水平的日益提高,這幾種傳統(tǒng)方法的存儲能力逐漸出現(xiàn)不足的現(xiàn)象,因此以傳統(tǒng)方法為基礎(chǔ),提出基于MapReduce模型的非結(jié)構(gòu)化數(shù)據(jù)分布式存儲方法。人工智能就是仿照人的思維方式,結(jié)合機器性能而形成的一種新的智能技術(shù),利用普通計算機程序?qū)崿F(xiàn)更加詳細與精確地控制操作[3]。此次研究以人工智能技術(shù)的應用模式為依據(jù),對分布式存儲方法進行優(yōu)化,以期為科技發(fā)展大背景下的數(shù)據(jù)存儲提供更加有力的技術(shù)保障。
隨著互聯(lián)網(wǎng)在各個行業(yè)以及領(lǐng)域中的廣泛應用,網(wǎng)絡中的數(shù)據(jù)量逐漸增大,其增長速度也隨之加快,因此存儲方法設(shè)計的第一步就是要對非結(jié)構(gòu)化數(shù)據(jù)進行數(shù)據(jù)分片:垂直分片與水平分片。
已知數(shù)據(jù)庫中包含著很多的非結(jié)構(gòu)化數(shù)據(jù)集合,且每一個集合都有各自的特點,通過彼此之間的交互關(guān)系組成一套完整的數(shù)據(jù)鏈。但傳統(tǒng)數(shù)據(jù)存儲方式下所有基本數(shù)據(jù)的并發(fā)與訪問都主要集中在單庫上,因此數(shù)據(jù)庫存儲的壓力激增,降低了網(wǎng)絡的綜合性能。所以利用垂直分片策略,拆分數(shù)據(jù)庫中的數(shù)據(jù)集合,將其中關(guān)聯(lián)性較小的數(shù)據(jù)拆分到不同的分片節(jié)點中,降低多節(jié)點訪問帶來的壓力。然而網(wǎng)絡與系統(tǒng)程序模塊雖然具有獨立性,但從總體上來看所有模塊之間都存在著或多或少的關(guān)聯(lián)性,因此進行垂直分片時需要綜合考慮數(shù)據(jù)的分離度,又要考慮分片后連接查詢開銷[4]。以實際買賣業(yè)務為例,垂直分片設(shè)計方案如圖1所示。

圖1 垂直分片方案
分析圖1可知,項目信息和客戶信息屬于公共信息,與各項業(yè)務之間的關(guān)聯(lián)性不強,因此利用垂直分片將此類數(shù)據(jù)存儲到其他節(jié)點。而一些查詢類信息的關(guān)聯(lián)性較強,若采用垂直分片方法處理此類信息,會導致具有強關(guān)聯(lián)性的數(shù)據(jù)分配不同存儲節(jié)點,增加了系統(tǒng)查詢開銷,因此設(shè)計的數(shù)據(jù)分片方案,要求不對關(guān)聯(lián)性較強的非結(jié)構(gòu)數(shù)據(jù)進行垂直分區(qū)。
通過垂直分片能夠使數(shù)據(jù)更加清晰,從而保障網(wǎng)絡的可擴展性。但垂直分片只能緩解數(shù)據(jù)存儲的部分壓力,因此設(shè)計水平分片策略,對其他類型的數(shù)據(jù)存儲方式進行橫向擴展。水平分片就是按照一定的分片規(guī)則,將數(shù)據(jù)庫中信息存儲到多個節(jié)點中,令每個節(jié)點包含原數(shù)據(jù)集合的部分記錄,通過降低數(shù)據(jù)規(guī)模,以擴大存儲效果。分片規(guī)則是水平分片方案中的一項難點,因此結(jié)合實際訪問業(yè)務的特點和要求,根據(jù)數(shù)據(jù)特點及范圍的分片規(guī)則進行數(shù)據(jù)水平分區(qū)[5]。范圍分片根據(jù)分片字段的取值范圍,將查詢類數(shù)據(jù)存入不同的節(jié)點中,因此假設(shè)分片字段為ID,則通過下列方式,定義分片與字段范圍之間的映射關(guān)系:
0-5 000 000→0
5 000 001-10 000 000→1
(1)
10 000 001-15 000 000→2
將0-5 000 000范圍內(nèi)的ID值存儲到第一個分片節(jié)點中,將5 000 001-10 000 000范圍內(nèi)的ID值存儲到第二個分片節(jié)點。以此類推,得到如圖2所示的水平分片規(guī)則。
該規(guī)則支持動態(tài)擴展,因此只需將新的節(jié)點加入到圖2中,就可以進行集群擴展,則不再需要進行大量的數(shù)據(jù)遷移。但水平分片后,新增加節(jié)點的數(shù)據(jù)量明顯少于原有節(jié)點數(shù)量,無法平衡各節(jié)點訪問壓力,因此需要對非結(jié)構(gòu)化數(shù)據(jù)進行聚簇處理,改善這一問題。
根據(jù)文件相似性的基本定義,參考目前數(shù)據(jù)挖掘中常用的聚類方法,對非結(jié)構(gòu)化數(shù)據(jù)進行聚簇處理,盡量保證生成的數(shù)據(jù)簇中,數(shù)據(jù)文件的規(guī)模接近數(shù)據(jù)塊的整數(shù)倍,在優(yōu)化

圖2 水平分片規(guī)則
水平分片方法的應用下,解決存儲空間過度浪費的問題。該聚簇過程總共分為三個步驟,具體如圖3所示[6]。

圖3 非結(jié)構(gòu)化數(shù)據(jù)聚簇過程
第一步,構(gòu)建k最近鄰圖。該過程利用相似性度量法,通過計算2個非結(jié)構(gòu)化數(shù)據(jù)文件之間的相似性,得到相似性矩陣S,根據(jù)該矩陣構(gòu)建k最近鄰圖,令每一個節(jié)點表示一個非結(jié)構(gòu)化數(shù)據(jù)文件。若文件A是文件B的k個最相近文件之一,則可證明2個節(jié)點存在于一條邊上,而邊的權(quán)重就是2個文件之間的相似性。
第二步,初始簇集生成,該過程利用算法劃分k最近鄰圖,得到若干個較小的子簇,記為W1,W2,…,Wn,其中n表示初始簇集的規(guī)模。根據(jù)邊分割的最小化原則,將簇W劃分為2個不同的子簇,分別用Wi和Wj表示,保障各個邊的權(quán)重之和在最小范圍內(nèi)。在初始簇集的基礎(chǔ)上,根據(jù)簇之間大小的契合度、簇的空間利用率,修正初始簇集[7]。其中,簇的空間利用率計算式為
PWi=HWiCeilHWiNH·NH
(2)
式中,HWi表示簇的大小,NH表示數(shù)據(jù)塊的大小。根據(jù)上述計算結(jié)果,得到簇之間大小的契合度計算結(jié)果:
QWi,Wj=HWi+HWjCeilHWi+HWjNH·NH
(3)
在實際中,要求簇之間大小的契合度大于每個簇單獨存儲的空間利用率,因此存在如下的聚簇限制條件:
QWi,Wj>maxPWi,PWj
(4)
當滿足上述條件時,說明存儲空間利用率有所提升。
第三步,修正合并初始簇集。計算修正簇集合中每一個簇與其余簇之間的契合度,選出其中計算結(jié)果最高的簇,并判斷契合度是否滿足合并條件。若滿足則合并兩個簇,如果不滿足將其放入最終結(jié)果簇中,重復上述過程,直到待修正簇集合為空[8]。通過前兩節(jié)的設(shè)計,以提升存儲空間的利用效率。
設(shè)計MapReduce模型,以此構(gòu)建一個分布式存儲模型。當用戶訪問數(shù)據(jù)時,通過MapReduce模型完成數(shù)據(jù)加載、數(shù)據(jù)查詢以及數(shù)據(jù)分選,利用Hadoop分布式計算提高數(shù)據(jù)的訪問效率。人工智能技術(shù)的優(yōu)勢就在于結(jié)構(gòu)清晰、手段智能,可以輕松處理大數(shù)據(jù)集。因此可以實現(xiàn)控制程序輸入和輸出類型的智能選擇,利用Map負責任務處理過程中的準備工作,完成對非結(jié)構(gòu)化數(shù)據(jù)的組織;利用Reduce進行任務處理工作,保證數(shù)據(jù)存儲過程的智能性。
該過程中的任務數(shù)據(jù)流,如圖4所示[9]。

圖4 MapReduce數(shù)據(jù)流
通過上述手段,構(gòu)建一個具有可擴展性的分布式存儲模型。要求建立的分布式存儲模型,由多個數(shù)據(jù)庫組成,每一個數(shù)據(jù)庫中,又包含了相同屬性的數(shù)據(jù)集合,而每個集合中,又含有無數(shù)個非結(jié)構(gòu)化數(shù)據(jù)文檔,每個文檔由不同的字段組成,每個字段為一組鍵值對,其中數(shù)據(jù)的字段名稱為鍵,屬性值為對,該數(shù)據(jù)模型如圖5所示。

圖5 分布式存儲模型
根據(jù)圖5可知,該模型中的集合關(guān)系是完全按照之前的設(shè)計要求而建立的,該模型不用預先定義字段結(jié)構(gòu),就可以直接在同一個集合中存儲不同結(jié)構(gòu)的數(shù)據(jù)文檔。當用戶訪問數(shù)據(jù)庫時,可以隨時動態(tài)添加或刪除文檔字段,實現(xiàn)對非結(jié)構(gòu)化數(shù)據(jù)的智能存儲[10]。
至此在MapReduce模型的輔助下,非結(jié)構(gòu)化數(shù)據(jù)的分布式存儲方法設(shè)計完畢。
搭建實驗測試環(huán)境,進行對比測試。將此次提出的方法作為實驗組,將文獻[1]方法與文獻[2]方法作為對照組,比較不同方法的內(nèi)存消耗、數(shù)據(jù)寫入時間、數(shù)據(jù)讀取時間以及訪問頻率,以驗證三種不同數(shù)據(jù)存儲方法的基本使用性能。
為了保證實驗測試結(jié)果可靠性,此次實驗測試開始之前,準備了大量的非結(jié)構(gòu)化數(shù)據(jù),這些數(shù)據(jù)的總大小為313 GB,共包含六種文件格式,具體參數(shù)值如表1所示。

表1 實驗測試基本數(shù)據(jù)
以表1中準備的非結(jié)構(gòu)數(shù)據(jù)文件為基礎(chǔ),分別利用不同的存儲方法進行測試,根據(jù)實驗測試結(jié)果,得出具體研究結(jié)論。
不同文件存儲方法的內(nèi)存消耗測試比較結(jié)果如圖6所示。

圖6 內(nèi)存消耗測試結(jié)果
根據(jù)圖6測試結(jié)果可知,無論面對何種文件類型,研究方法都可以節(jié)省非結(jié)構(gòu)化數(shù)據(jù)的存儲空間用量,隨著存入文件數(shù)目的增多,這種方法的這種優(yōu)勢就更加明顯。而傳統(tǒng)方法的數(shù)據(jù)存儲空間用量隨著存入文件數(shù)目的增多而迅速擴大,可見傳統(tǒng)方法的存儲內(nèi)存消耗過大,存在浪費現(xiàn)象。
文件寫入與讀取是驗證數(shù)據(jù)存儲性能的一個重要指標,可以檢驗數(shù)據(jù)存儲過程中是否存在丟失的問題,也可以檢驗數(shù)據(jù)存儲路徑的正確性。
實驗進行到第二階段,測試不同數(shù)據(jù)存儲方法的文件寫入時間、文件讀取時間。圖7為當文件總數(shù)量達到10萬個時,不同方法的文件寫入與文件讀取時間測試對比結(jié)果。

(a) 文件寫入時間對比

(b) 文件讀出時間對比圖7 文件寫入與取時間測試結(jié)果
根據(jù)圖7中的兩組測試結(jié)果可知,研究方法能夠?qū)⑽募懭氪鎯芾砟K所在節(jié)點的本地緩存中,節(jié)省了文件寫入HDFS的時間,且與傳統(tǒng)方法相比,其單位時間的文件寫入量更大,可見這種方法的寫入文件速度有所提升。而在隨機文件合并存儲的前提下,讀取文件時,研究方法可以在合并后的大文件中進行數(shù)據(jù)查詢,可以提升文件讀取效率。
完成上述測試后,進行第三階段的文件訪問頻率測試。圖8為非結(jié)構(gòu)化數(shù)據(jù)文件的訪問頻率測試結(jié)果。

圖8 文件訪問頻率測試結(jié)果
根據(jù)圖8中的測試結(jié)果可知,在10個預測周期中,研究方法的訪問頻次具有動態(tài)變化特征,而傳統(tǒng)存儲方法,無論面對何種類型的非結(jié)構(gòu)化數(shù)據(jù),其訪問頻次總是維持在一個固定范圍內(nèi),可見該存儲方法的動態(tài)調(diào)節(jié)能力較差,最終導致文件的讀取效率下降。因此三種方法測試組數(shù)據(jù)響應時間存在巨大差異。
此次研究將傳統(tǒng)方法作為研究依據(jù),通過融入MapReduce模型,優(yōu)化非結(jié)構(gòu)化數(shù)據(jù)分布式存儲方法的綜合性能。經(jīng)過實驗測試可知,該方法取得了不錯的應用效果。但在科技水平發(fā)展速度如此快的背景下,該方法還需要根據(jù)新的技術(shù)進行及時調(diào)整,以便于更好地適應網(wǎng)絡數(shù)據(jù)的存儲需求。