亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于MongoDB的海量活斷層探測文件存儲入庫方法

        2017-09-29 17:24:00劉堅陳曉琳
        軟件導(dǎo)刊 2017年9期
        關(guān)鍵詞:南水北調(diào)

        劉堅 陳曉琳

        摘 要:針對關(guān)系型數(shù)據(jù)庫無法滿足海量活斷層探測文件入庫效率要求與存儲無法橫向線性擴展的問題,基于MongoDB非關(guān)系型數(shù)據(jù)庫的海量活斷層探測文件存儲入庫方法,充分利用MongoDB內(nèi)存文件映射方式,可動態(tài)增加節(jié)點以擴展性能、提高負(fù)載。以南水北調(diào)中線核心水源區(qū)活斷層管理系統(tǒng)為例進行測試,與傳統(tǒng)關(guān)系數(shù)據(jù)庫存儲入庫文件方式進行性能對比試驗分析,結(jié)果表明:該方法顯著提高了海量活斷層探測文件的存儲入庫與查詢效率,能有效解決關(guān)系數(shù)據(jù)庫存取非結(jié)構(gòu)化數(shù)據(jù)時的性能瓶頸問題。

        關(guān)鍵詞:MongoDB;活斷層;非關(guān)系型數(shù)據(jù)庫;南水北調(diào)

        DOI:10.11907/rjdk.171390

        中圖分類號:TP301 文獻標(biāo)識碼:A 文章編號:1672-7800(2017)009-0004-03

        Abstract:In a relational database can not meet the massive active fault detection and storage file storage efficiency requirements can not be horizontal linear expansion of the problem, try to use non relational database MongoDB massive active fault detection method based on file storage, which makes full use of MongoDB memory file mapping, dynamically add nodes to extend and improve the performance. Taking water source area core active fault management system as an example for testing, analysis, performance comparison test with the traditional relational database storage file results show that this method significantly improved the massive file active fault detection in storage and query efficiency, effectively solved the bottleneck problem of relational database access to unstructured data.

        Key Words:MongoDB; active fault; non relational database; the south-to-north water diversion project

        0 引言

        活斷層突發(fā)性錯動是引起地震災(zāi)害的主要原因,確定活斷層滑動速度、位置等參數(shù),建立相應(yīng)數(shù)據(jù)庫可幫助社會有效降低震害損失。美國地質(zhì)調(diào)查局(USGS)公布了全美范圍內(nèi)第四紀(jì)活斷層與褶皺匯編數(shù)據(jù)庫;新西蘭地質(zhì)與核科學(xué)院(GNS)建成了新西蘭活動斷層數(shù)據(jù)庫;1996年中國已初步建成了第1個活動構(gòu)造數(shù)據(jù)庫[1],僅存儲了活斷層幾何學(xué)與運動學(xué)基本信息,信息單一且不具備開放性。隨著多種先進技術(shù)探測手段的運用,面對獲取目標(biāo)區(qū)域最全、最新、精細(xì)化海量探測文件數(shù)據(jù),怎樣保證數(shù)據(jù)高效分類入庫及提供高性能查詢服務(wù),是建立開放性活斷層探測信息管理系統(tǒng)的關(guān)鍵環(huán)節(jié)。

        傳統(tǒng)活斷層探測信息系統(tǒng)采用關(guān)系型數(shù)據(jù)庫(RDBMS)管理[2]??紤]到多種探測數(shù)據(jù),特別是地形地貌等遙感數(shù)據(jù)的多時態(tài)、大數(shù)據(jù)量,且隨時間推移數(shù)據(jù)量指數(shù)增長的特點,RDBMS難以支撐海量數(shù)據(jù)的存儲擴展與高效查詢時遇到的性能瓶頸問題。非關(guān)系型數(shù)據(jù)庫(NoSQL)具有高效存儲與訪問、高并發(fā)讀寫、高可用性、高可擴展性等特點,能極大提高數(shù)據(jù)庫讀寫性能與系統(tǒng)擴展能力,而MongoDB是NoSQL的典型代表。鑒于此,本文提出一種基于MongoDB的海量活斷層探測文件存儲入庫方法。

        1 MongoDB簡介

        MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫,由C++語言編寫,旨在為應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案[3]。數(shù)據(jù)分不同類型存儲在同一個數(shù)據(jù)集中,成為一個集合,支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似JSON的BSON格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。MongoDB最大的特點是支持的查詢語言非常強大,其語法類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。

        它的特點是高性能、易使用、易部署,存儲數(shù)據(jù)快捷方便。主要功能特性有:①面向集合存儲易存儲對象類型的數(shù)據(jù);②模式自由;③支持動態(tài)查詢;④支持完全索引,包含內(nèi)部對象;⑤支持查詢;⑥支持復(fù)制與故障恢復(fù);⑦使用高效的二進制數(shù)據(jù)存儲,包括大型對象(如視頻等);⑧自動處理碎片,以支持云計算層次的擴展性;⑨支持RUBY、PYTHON、JAVA、C++、PHP、C#等多種語言;⑩文件存儲格式為BSON(一種JSON的擴展);可通過網(wǎng)絡(luò)訪問。

        2 基于MongoDB的存儲原理

        2.1 存儲原理

        以南水北調(diào)中線核心水源區(qū)活斷層管理系統(tǒng)為例,活斷層數(shù)據(jù)庫包括的數(shù)據(jù)成果類型比較多,具體包括基礎(chǔ)地理信息(GIS)、地球化學(xué)類探測數(shù)據(jù)成果、電磁探測數(shù)據(jù)成果、探地雷達探測數(shù)據(jù)成果、深層/淺層地震探測數(shù)據(jù)成果、地震危害性評估成果等專業(yè)庫。

        根據(jù)以上文件類型,按文件大小大致分為兩類:第一類,對于小文件(小于等于16MB),MongoDB使用BSON對象進行文件存儲,這類存儲比較簡單,不贅述;第二類,針對大于16MB的大文件是采用GridFS規(guī)范進行存儲。其中將文件名作為鍵 (Key),具體內(nèi)容數(shù)據(jù)作為值 (Value)[4],GridFS規(guī)范是將大文件分割成許多小塊文件進行存儲,每塊文件存儲的信息包括兩部分:第一部分存儲自己以及相鄰兩小塊文件的位置信息,第二部分存儲具體數(shù)據(jù)信息,塊與塊之間用塊序號連接[5]。文件分塊后,信息被存于兩個集合里,分別是Files(元數(shù)據(jù)對象)集合與chunks(相關(guān)信息的二進制格式)集合。兩子集存儲結(jié)構(gòu)格式如下所示:endprint

        Files={

        _ID:ObjectId(“2016071500232”),

        filename:”test.png”,∥文件名

        length:1543,∥文件大小(單位字節(jié))

        ChunkSize:165,∥chunks大小

        uploadDate:ISODate(“2016071508351234”),

        md5:“XXX”

        }

        Chunks集合中的file_id與files集合中的_ID相同,chunks集合的文檔格式如下:

        chunks={

        _ID:ObjectId(“201607234678”),

        file_id:ObjectId(“2016071500232”)

        n:NumberInt(2),//代表chunks序號,從0開始

        data:BinaData(“…”)//數(shù)據(jù)

        }

        _ID默認(rèn)情況下是MongoDB用時間戳、進程標(biāo)識(PID)、機器名等組合關(guān)鍵字計算獲得的ObjectID,它具有很高的唯一性與很強的辨識度[6]。

        2.2 存儲入庫方法

        各類探測數(shù)據(jù)不僅涉及文件的存儲,還有相關(guān)各類屬性(時間、大小、備注等)信息需要存儲,且文件探測數(shù)據(jù)的類型不一樣,所需存儲的屬性信息也不同。MongoDB文檔型存儲,基于GridFS的大文件型存儲方式都有各自的不足:一方面,文檔型存儲方式雖然能存儲探測數(shù)據(jù)的屬性信息,但對于大于16 M的探測數(shù)據(jù)卻無法有效存儲;另一方面,基于GridFS的大文件存儲方式能有效存儲探測數(shù)據(jù),但不能存儲探測數(shù)據(jù)的各種屬性信息。

        因此,筆者設(shè)計了一種新的存儲方法,將以上兩種存儲模式優(yōu)勢互補進行有效結(jié)合,以發(fā)揮更大的存儲優(yōu)勢。首先,將探測數(shù)據(jù)以GridFS大文件存儲方式寫入保存至數(shù)據(jù)庫中。其次,利用GridFS提供相應(yīng)的接口自動或手動錄入來獲取探測數(shù)據(jù)的相關(guān)屬性信息。第三,將該屬性信息以一條文檔信息形式,通過MongoDB傳統(tǒng)的文檔型存儲模式插入數(shù)據(jù)庫。此過程中最關(guān)鍵一步是將該探測數(shù)據(jù)_ID號作為一條記錄存入文檔信息中,并以此關(guān)聯(lián)探測數(shù)據(jù)的_ID編號與文檔的id編號,該方法實現(xiàn)了用一條文檔中記錄的探測數(shù)據(jù)_ID編號即可快速檢索到與該文檔記錄信息對應(yīng)的探測數(shù)據(jù)[7]。

        3 存儲方法實現(xiàn)

        分兩類實現(xiàn):一類是大文件利用GridFS方式實現(xiàn),另一類是屬性數(shù)據(jù)通過BSON方式實現(xiàn)。第一類GridFS方式讀寫實現(xiàn)函數(shù)代碼如下:

        采用 C#語言開發(fā)的存儲文件函數(shù)如下:

        private void UpLoadFile(IMongoDatabase database, string sourceFilename)

        { //建立GridFS 存取對象

        IGridFSBucket bucket = new GridFSBucket(database);

        //以流的方式上傳文件

        using (var stream = bucket.OpenUploadStream(sourceFilename))

        { var id = stream.Id;

        stream.Close();

        }

        }

        讀取文件的函數(shù)如下:

        private void DownloadFile(IMongoDB database,string sourceFilename,string targetFilename)

        { //建立GridFS 存取對象

        IGridFSBucket bucket = new GridFSBucket(database);

        //建立下載文件目的地

        FileStream destination = new FileStream(targetFilename, FileMode.Create);

        //以流的方式下載文件

        bucket.DownloadToStreamByName(sourceFilename, destination);

        using (var stream = bucket.OpenDownloadStreamByName(sourceFilename))

        {stream.Close();}

        }

        對于屬性數(shù)據(jù),具體存儲的部分實現(xiàn)代碼如下:

        BsonDocument T = new BsonDocument{

        {“編號”,_id},

        {“名字”,name},

        ……

        };

        Col.Insert(T)

        4 應(yīng)用分析

        4.1 測試環(huán)境與實例

        為測試檢驗MongoDB數(shù)據(jù)庫存取海量探測文件與屬性信息的性能,在測試代碼的關(guān)鍵處設(shè)置秒表起止時間點,以統(tǒng)計所耗時間。將MongoDB數(shù)據(jù)庫與Mysql數(shù)據(jù)庫在讀寫性能方面進行比較,目前Mysql支持幾乎所有數(shù)據(jù)類型,且在開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng)中被認(rèn)為功能是較強大的。

        采用的測試平臺為:Intel Core i7處理器、8G內(nèi)存、2TB硬盤、Windows10 64位操作系統(tǒng)、C#編程語言、MongoDB版本為3.0、Mysql版本為5.1.48。測試平臺軟、硬件環(huán)境如表1所示。

        該測試分兩類,分別測試大文件插入數(shù)據(jù)庫性能及從數(shù)據(jù)庫中查詢數(shù)據(jù)效率。以南水北調(diào)中線核心水源區(qū)的探測文件批量入庫為例,如圖1所示,進行測試分析。endprint

        4.2 存儲性能對比

        分別對MongoDB3.0與Mysql-5.1.48做30、70、150、300、800、10 000次文件寫入試驗,文件大小約為30MB/個,兩者的二進制文件存儲耗時(單位:ms)性能對比結(jié)果如圖2所示。Mysql所耗時間隨文件個數(shù)增多而劇增,而MongoDB耗時變化不大,可以看出,當(dāng)存儲寫入數(shù)據(jù)庫文件數(shù)量越來越多時,MongoDB的性能優(yōu)勢越來越明顯。

        4.3 查詢性能對比

        分別對MongoDB3.0與Mysql-5.1.48做數(shù)據(jù)量MB為50、100、200、300、500的查詢性能測試,從圖3可以看出,MongoDB耗時(單位:ms)比較小,而Mysql查詢耗時隨數(shù)據(jù)量增長變化幅度陡然增大。

        5 結(jié)論

        本文提出一種基于MongoDB的海量活斷層探測文件存儲入庫方法,并與傳統(tǒng)關(guān)系型數(shù)據(jù)庫Mysql在存取效率上進行性能比對分析測試,結(jié)果表明:該方法在數(shù)據(jù)存儲與查詢等性能方面具有顯著優(yōu)勢,特別是數(shù)據(jù)量大時更加明顯。為更進一步深入研究,體現(xiàn)該方法在海量文件數(shù)據(jù)入庫存儲的優(yōu)勢,同時為更高層次的應(yīng)用提供有益參考,未來將繼續(xù)開展與其它典型關(guān)系數(shù)據(jù)庫對比測試工作。

        參考文獻:

        [1] 于貴華,鄧起東,鄔倫.利用GIS系統(tǒng)建立中國活動斷裂信息咨詢分析系統(tǒng)[J].地震地質(zhì),1996,18(2):156-160.

        [2] 于貴華,徐錫偉,孫怡,等.城市活斷層探測信息系統(tǒng)的設(shè)計與實現(xiàn)——以福州市活斷層信息管理系統(tǒng)為例[J].地震地質(zhì),2006,28(4):655-662.

        [3] ELOISE GIEGERICH. MongoDB certified professional spotlight: may mascenik[EB/OL].http:// blog.mongodb.org.

        [4] 霍多羅夫,迪洛爾夫.MongoDB權(quán)威指南[M].北京:人民郵電出版社,2011.

        [5] 張艷霞,豐繼林,郝偉,等.基于NoSQL的文件型大數(shù)據(jù)存儲技術(shù)研究[J].制造業(yè)自動化,2014,36(3):27-30.

        [6] SATTAR ABDUL, LORENZEN, TORBEN, NALLAMADDI, et al. Incorporating NoSQL into a database course[J].ACM Inroads,2013,4(2):50-53.

        [7] 劉堅,李盛樂,戴苗,等.基于Hbase的地震大數(shù)據(jù)存儲研究[J].大地測量與地球動力學(xué),2015,35(5):890-893.

        (責(zé)任編輯:何 麗)endprint

        猜你喜歡
        南水北調(diào)
        南水北調(diào)東線山東段工程建設(shè)
        山東水利(2020年12期)2021-01-18 05:59:04
        南水北調(diào)工程運行建設(shè)管理
        南水北調(diào)工程管理
        南水北調(diào)運行管理研究
        石墨烯材料在南水北調(diào)突發(fā)污染事件處理中的應(yīng)用探討
        南水北調(diào)
        地下水庫消納南水北調(diào)引水方案初探
        建立跨穿南水北調(diào)配套工程管理體系的思考
        MOSAIC SCADA在南水北調(diào)閘(泵)站監(jiān)控系統(tǒng)中的應(yīng)用
        水利信息化(2015年5期)2015-12-21 12:54:40
        DRAINING THE SOUTH
        漢語世界(2015年2期)2015-03-26 09:19:01
        国产成人一区二区三中文| 日本人妖熟女另类二区| 国产av无码专区亚洲av男同| 无码一区二区三区亚洲人妻| 风流少妇又紧又爽又丰满| 国产91在线|亚洲| 国产三级韩三级日产三级| 日韩欧美中文字幕公布| 精产国品一二三产品蜜桃| 2021国产成人精品国产| av免费看网站在线观看| 久久精品女人av一区二区| 精品无码国产一区二区三区av| 最近中文av字幕在线中文| 太大太粗太爽免费视频| av在线高清观看亚洲| 日本最新免费二区三区| 无码人妻精品一区二区三区66| 国产呦系列视频网站在线观看| 激情视频在线观看好大| 国产精品扒开腿做爽爽爽视频| 国产精品视频一区二区噜噜| 免费人成视频欧美| 一本色道久久88加勒比综合| 欧美不卡一区二区三区| 曰本无码人妻丰满熟妇5g影院| 亚洲AⅤ乱码一区二区三区| 日韩av一区二区不卡| 中文在线8资源库| 免费在线视频一区| 亚洲一区二区三区最新视频| 亚洲av福利天堂一区二区三| 国产精品亚洲二区在线观看| 精品国产一区二区三区香蕉| 亚洲av成人永久网站一区| 日韩人妻ol丝袜av一二区| 中文在线а√天堂官网| 中文字幕日韩人妻在线| 国产亚洲av另类一区二区三区| 午夜精品久久久久成人| 日韩在线不卡一区在线观看|