李興武
摘要:隨著現(xiàn)代科技的逐漸發(fā)展,我國對于檔案存儲的研究也得到了社會各界的廣泛重視,因此需要利用對存儲檔案文檔管理進行重復(fù)的去重操作。
關(guān)鍵詞:大數(shù)據(jù);MongoDB數(shù)據(jù)庫;檔案文檔存儲;去重研究
中圖分類號:TP311 文獻標識碼:A 文章編號:1007-9416(2017)09-0099-01
1 傳統(tǒng)的檔案存儲
在傳統(tǒng)的檔案存儲的過程當中,主要是對文檔來進行文件的形式進行存儲,對于原本的數(shù)據(jù)需要根據(jù)實際情況來建立起檔案文件和數(shù)據(jù)的鏈接,并把該鏈接的路徑存儲在關(guān)系數(shù)據(jù)庫中。在此種方式下對文件進行存儲的過程當中,會產(chǎn)生相當多的重復(fù)文件。[1]因此在其存儲的過程當中為了避免出現(xiàn)重復(fù)的現(xiàn)象,都需要進行人工的方式來檢查。在這種方式下,存儲空間很快會被耗盡,要靠不斷的增加存儲設(shè)備來解決大量檔案數(shù)據(jù)存放的問題,同時在管理方面也是相當不利的,在擴展性方面是相對較差的。在此種情況下,就需要利用MongoDB數(shù)據(jù)庫來存儲這些非結(jié)構(gòu)化的數(shù)據(jù),并且在存放之前就完成對重復(fù)檔案文檔的去重操作。
2 MongoDB數(shù)據(jù)庫存儲和管理機制
2.1 多用戶存儲機制
在進行存儲的過程當中,MongoDB數(shù)據(jù)庫提供主從復(fù)制和副本集復(fù)制2種方式滿足冗余備份與高可用性。一般來說都是需要主從復(fù)制的,可以在進行復(fù)制的過程的當中對數(shù)據(jù)做出有效的轉(zhuǎn)移和優(yōu)化。并且在對MongoDB數(shù)據(jù)庫當中還可以實現(xiàn)自動切片功能,易于實現(xiàn)橫向擴展。此項功能主要適用于在用戶存儲量相對較大的情況下,其中所產(chǎn)生的數(shù)據(jù)量和頻繁的I/O操作也是相對較多的,因此可以采用自動切片與副本集復(fù)制相結(jié)合的方式,來實現(xiàn)對不同的數(shù)據(jù)集合進行分層存儲,這樣一來在每一個分片當中都會具備不同的多個副本,從而對數(shù)據(jù)庫服務(wù)器端實現(xiàn)故障轉(zhuǎn)移以及自動擴展的現(xiàn)象,[2]其流程圖如圖1所示。在客戶對其中的數(shù)據(jù)進行讀取的時候,可以調(diào)用路由進程,并從配置服務(wù)器中讀取數(shù)據(jù)與片的對應(yīng)關(guān)系等信息,實現(xiàn)對數(shù)據(jù)信息的有效讀取。
2.2 矢量空間數(shù)據(jù)存儲
在對數(shù)據(jù)進行存儲的過程當中,需要對數(shù)據(jù)的格式進行掌握和了解,一般情況下,在傳統(tǒng)的矢量型空間數(shù)據(jù)格式包括Shapefile、TAB、GML、GeoJSON等類型。因此在對其數(shù)據(jù)進行存儲到MongoDB數(shù)據(jù)庫的時候,需要在中間件來對矢量的數(shù)據(jù)文件進行讀取,最后將其轉(zhuǎn)化成為MongoDB數(shù)據(jù)庫可以存儲讀取的數(shù)據(jù)。除此之外,在對空間數(shù)據(jù)進行存儲到MongoDB數(shù)據(jù)庫的時候需要充分的借鑒geojson格式的空間數(shù)據(jù)表達形式,將每個空間對象轉(zhuǎn)化為一個 json 對象,并以 key/value的方式存儲空間對象的空間屬性及非空間屬性。
2.3 海量數(shù)據(jù)處理機制
隨著現(xiàn)代化檔案文檔的增加,需要處理的數(shù)據(jù)量也在逐漸的提高,因此需要對海量的數(shù)據(jù)作出快速處理,其中主要利用到了MapReduce模型來對其進行計算分割,對于數(shù)據(jù)需要分割并且發(fā)布到不同的計算群當中的來進行計算。在計算的過程當中,MongoDB 內(nèi)置了 Map函數(shù)和 Reduce 函數(shù)對數(shù)據(jù)進行批處理和聚合操作。
3 MongoDB中的去重算法
在MongoDB數(shù)據(jù)庫對檔案文檔的實際應(yīng)用當中,主要是去重算法進行分析,在對檔案文檔的分析當中,需要根據(jù)文檔檔案的相關(guān)信息來生成一個userInfo.users集合中的一條記錄。在對其記錄進行計算的過程當中需要對文檔中的MD5校驗碼進行獲取,之后對于數(shù)據(jù)庫當中的文件名進行逐條的遍歷搜索,從而可以對該文檔的校驗碼進行重復(fù)情況的查找。如果在數(shù)據(jù)庫當中發(fā)現(xiàn)重復(fù)的校驗碼,就需要對其文檔進行大小的獲取,從而確定該上傳文檔的存儲總塊數(shù),并把該值記錄到 fileInfo.files 集合中對應(yīng)記錄中。然后對檔案文檔進行上傳并對文檔內(nèi)容按固定的分塊大小存放到 fileContent.chucks集合中。對于該條相同的記錄進行加1處理,其中需要利用其中的上傳地點來判斷是否在同一個地點當中對相同的檔案文件進行了上傳。如果在數(shù)據(jù)庫的集合中沒有發(fā)現(xiàn)相同的記錄,就需要對其做出存儲。從而可以保證在下次訪問這個檔案的時候,可以利用userInfo.users集合中的 upLoadfileID來對其fileInfo.files集合進行查找,最后利用其集合訪問到需要訪問的檔案文檔,最大限度的避免了檔案文檔中所出現(xiàn)的重復(fù)存儲的現(xiàn)象,也可以實現(xiàn)對不同類型的文檔檔案進行不同編碼流程的存儲。在這個過程當中,需要對數(shù)據(jù)庫計算當中所需要用到的及種類進行定義,其中分別是 UserInfo,F(xiàn)ileInfo,F(xiàn)ileContent ,主要對應(yīng)的是不同的三個集合,其中在對數(shù)據(jù)庫操作類的定義當中可以用DBObj來表示,定義去重的類用RemoveRepeat來表示。
在對其進行分析計算的過程當中,在進行方法判斷的過程當中對于已經(jīng)存在的集合記錄中并沒由發(fā)現(xiàn)和將要上傳的檔案文檔重復(fù)的現(xiàn)象,因此需要利用一定的方法來是否存在重復(fù)上傳檔案文檔的數(shù)據(jù)記錄,也就是需要在進行數(shù)據(jù)記錄導(dǎo)入的時候做出批量的判斷。
最后,在對其進行10臺主機組成的集群當中進行在實驗的情況下,對于數(shù)據(jù)庫存儲的文件在不同的格式下對文檔進行單個上傳驗證,可以充分的顯示出在該種去重方法當中去重率達到了90%,去重效果還是相對比較理想的,同時對于其系統(tǒng)的擴展應(yīng)用也可以得到最大限度的提高。
4 結(jié)語
綜上所述,在對文檔信息進行存儲的過程當中,由于其數(shù)據(jù)信息當中本身存在的特點,需要充分的利用MongoDB數(shù)據(jù)庫來實現(xiàn)對檔案文檔的存儲和去重研究,充分的利用MongoDB數(shù)據(jù)庫當中的功能來對其中不同類型以及不同大小的檔案文檔做出分析和研究處理,最終在去重算法的基礎(chǔ)上,最大限度的提高對檔案文件的去重效果,從而可以對我國的檔案管理工作進行工作效率的提高。
參考文獻
[1]劉愉,王立軍.基于MongoDB的EHR存儲方案研究與設(shè)計[J].中國數(shù)字醫(yī)學(xué),2013,(6):20-24.
[2]賀建英.大數(shù)據(jù)下MongoDB數(shù)據(jù)庫檔案文檔存儲去重研究[J].現(xiàn)代電子技術(shù),2015,38(16):51-55.endprint