許 娜, 耿恒高, 徐傳鵬, 彭蒙蒙, 彭蘇萍, 何登科
(中國礦業(yè)大學(xué)(北京)地球科學(xué)與測繪工程學(xué)院,煤炭資源與安全開采國家重點實驗室,北京 100083)
地震勘探數(shù)據(jù)在地球物理勘探領(lǐng)域是資源勘探開發(fā)、資源評價與利用及相關(guān)決策制定的重要基礎(chǔ)資料,其高效存取、處理和利用將直接影響石油、天然氣和煤炭等能源勘探開發(fā)的經(jīng)濟效益。近幾年,隨著勘探技術(shù)的日益發(fā)展,萬道以上的高密度地震勘探技術(shù)得到廣泛應(yīng)用,地震數(shù)據(jù)呈現(xiàn)爆炸式增長,數(shù)據(jù)規(guī)??蛇_PB、EB量級,地震勘探數(shù)據(jù)進入大數(shù)據(jù)時代。面對如此海量的數(shù)據(jù),如何科學(xué)、有效地存取與管理地震大數(shù)據(jù),提高地震數(shù)據(jù)的利用價值,是煤炭資源與安全開采重點實驗室亟需解決的科學(xué)問題。另外,地球物理學(xué)專業(yè)學(xué)生如何學(xué)習(xí)和運用新信息技術(shù)來管理、處理海量的地震數(shù)據(jù),也是新時期地球物理學(xué)專業(yè)教學(xué)中亟需解決的實踐教學(xué)問題。
5G通信、云計算、大數(shù)據(jù)、人工智能、物聯(lián)網(wǎng)等技術(shù)的發(fā)展,為海量的地震數(shù)據(jù)存儲管理提供了一個契機[1]。這些新技術(shù)使通過無限的存儲空間實現(xiàn)地震勘探大數(shù)據(jù)管理系統(tǒng)的高可用性和低維護成本成為可能,地震勘探數(shù)據(jù)已邁入“大數(shù)據(jù)”行列,對地震勘探行業(yè)產(chǎn)生深遠的影響[2-4]。目前對于海量的地震勘探數(shù)據(jù),缺少規(guī)范的在線存取和系統(tǒng)集中式管理,信息應(yīng)用功能性不強,數(shù)據(jù)共享程度有待提高[5]。隨著互聯(lián)網(wǎng)Web技術(shù)的蓬勃發(fā)展,Web交互變得更加便捷,Web系統(tǒng)在數(shù)據(jù)治理方面得到重視,能夠?qū)崿F(xiàn)數(shù)據(jù)的網(wǎng)絡(luò)管理和達到數(shù)據(jù)共享的功能[6]。這種獨立于平臺的使用方式越來越受到開發(fā)者和用戶的青睞,國內(nèi)能源院校、單位已經(jīng)開始規(guī)劃實驗室信息管理系統(tǒng)[7-9]。系統(tǒng)開發(fā)人員已經(jīng)逐漸將研究方式從C/S架構(gòu)轉(zhuǎn)向B/S架構(gòu),使用Web形式進行地學(xué)數(shù)據(jù)存儲管理[10-12]。本文從重點實驗室對地震勘探數(shù)據(jù)存取管理需求為出發(fā)點,總結(jié)勘探開發(fā)數(shù)據(jù)管理技術(shù)、地理信息系統(tǒng)技術(shù)以及油田、煤田系統(tǒng)架構(gòu)設(shè)計等技術(shù)方法,將互聯(lián)網(wǎng)主流開發(fā)技術(shù)應(yīng)用到地震勘探數(shù)據(jù)存取管理,提出了基于MongoDB的地震勘探數(shù)據(jù)管理系統(tǒng)的設(shè)計與實現(xiàn)。同時為地球物理學(xué)專業(yè)的地震勘探和地球物理軟件兩大類課程提供了豐富的實踐教學(xué)案例。
地球物理勘探作為地球科學(xué)中重要的研究手段,已經(jīng)產(chǎn)生了海量的勘探數(shù)據(jù)。在各種勘探方法中,地震勘探技術(shù)是勘探石油、天然氣和煤炭等能源最有效的方法,地震勘探過程中產(chǎn)生的數(shù)據(jù)被稱為地震數(shù)據(jù)。地震勘探原理是利用人工激發(fā)地震波在地下地質(zhì)體中傳播后被地表檢波器接收,通過處理檢波器接收的地震信號,研究地下地質(zhì)構(gòu)造,尋找有用礦產(chǎn)資源的一種極重要的地球物理勘探方法,被廣泛應(yīng)用于石油、煤田、地?zé)岬饶茉刺綔y。
隨著科學(xué)技術(shù)的進步,各類物探傳感器飛速發(fā)展,數(shù)據(jù)采集、傳輸技術(shù)得到了很大的提高,萬道以上高密度地震勘探技術(shù)開始廣泛應(yīng)用于復(fù)雜的勘探對象,地震勘探已逐步向高密度、高精度發(fā)展,地震數(shù)據(jù)采集量迅速增長,總量達到了PB、EB級規(guī)模,呈現(xiàn)指數(shù)增長趨勢[13-14]。據(jù)統(tǒng)計,2017年,每一炮的地震數(shù)據(jù)為32 000道,到了2020年,上升為64 000道,按照摩爾定律,每一炮的地震數(shù)據(jù)3年會翻一番[15]。如此海量的地震數(shù)據(jù),傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已經(jīng)難以滿足存儲管理需求,需要探索出更加合適的存儲管理方式。并且,當(dāng)今市場上的大多數(shù)地震數(shù)據(jù)軟件系統(tǒng)都定義了自己的內(nèi)部格式,導(dǎo)致了數(shù)據(jù)存儲方面的某些局限性,這對于構(gòu)建統(tǒng)一的地震勘探數(shù)據(jù)管理系統(tǒng)帶來了一定的挑戰(zhàn)。因此,系統(tǒng)一方面需要滿足多種數(shù)據(jù)格式快速存取和高效管理需求;另一方面還需滿足數(shù)據(jù)量的不斷增加,數(shù)據(jù)源應(yīng)具備易擴展性。
地震數(shù)據(jù)格式是地震勘探過程中數(shù)據(jù)存儲的一種特殊格式,地震數(shù)據(jù)格式較為復(fù)雜,通常以二進制形式存儲。地震勘探道數(shù)據(jù)類型常見的分為:IBM浮點型、IEEE浮點型、16位整型、32位整型[16]。地震數(shù)據(jù)格式眾多,野外數(shù)據(jù)采集儀器一般會有自己專門的數(shù)據(jù)組織形式,數(shù)據(jù)格式也各不相同,這些數(shù)據(jù)格式只針對軟件本身,在其它軟件中很難兼容管理。為了統(tǒng)一地震數(shù)據(jù)格式,國際勘探地球物理協(xié)會(Society ofExploration Geophysicists,SEG)制定了標(biāo)準(zhǔn)的地震數(shù)據(jù)記錄格式——SEG格式。SEG格式有如下幾種:SEGB格式、SEG-A格式、SEG-C格式、SEG-D格式、SEG-Y格式等[17]。隨著地震勘探技術(shù)發(fā)展和軟件系統(tǒng)的不斷迭代,部分格式已經(jīng)淘汰,目前業(yè)內(nèi)使用最多的是SEG-Y格式。本文以SEG-Y格式為主要研究對象,SEG-Y格式又分為標(biāo)準(zhǔn)和非標(biāo)準(zhǔn)格式,區(qū)別在于是否含有3 600 Byte的文件頭。標(biāo)準(zhǔn)的SEG-Y格式主要是由3部分組成,其結(jié)構(gòu)如圖1所示[18]。
圖1 SEG-Y數(shù)據(jù)格式示意圖
由圖1可以看出,第1部分是ASCII編碼3 200 Byte EBCDIC文件頭,存儲在40條記錄中,每條記錄包括80 Byte,保存了數(shù)據(jù)整體性的描述信息,主要是記錄了施工區(qū)域、施工單位和測量參數(shù)等信息。第2部分是文件頭,共400 Byte,用二進制表示,記錄了數(shù)據(jù)的具體信息。第3部分則是數(shù)據(jù)信息,記錄了具體的地震數(shù)據(jù),每一炮對應(yīng)一道數(shù)據(jù)信息,每一道數(shù)據(jù)包括道頭和道數(shù)據(jù)兩部分信息,道頭信息共240 Byte,使用二進制存放,記錄了該道的具體位置信息,如采樣點數(shù)、采樣間隔、道集號、XLine號、InLine號以及坐標(biāo)信息等。地震勘探數(shù)據(jù)通常以SEG-Y格式存儲在工作站,如Alpha、Sun、IBM工作站。
地震勘探在采集、處理和解釋等各個階段產(chǎn)生了大量的地震數(shù)據(jù),這些數(shù)據(jù)具有采集成本高、可用周期長、數(shù)據(jù)量大等特點。地震數(shù)據(jù)包含了大量的結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。海量的地震數(shù)據(jù)需要科學(xué)有效的存取管理,地震勘探數(shù)據(jù)管理系統(tǒng)經(jīng)歷了如下幾個階段:人工管理階段、文件系統(tǒng)管理階段、數(shù)據(jù)庫系統(tǒng)管理階段、分布文件系統(tǒng)管理階段等(見表1)。
表1 地震勘探數(shù)據(jù)管理系統(tǒng)發(fā)展階段
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫由于存在擴展性有限、數(shù)據(jù)存取效率低、性能不足等缺陷,已無法滿足當(dāng)今地震數(shù)據(jù)面臨的存取與管理需求,因此有必要探索一種新的數(shù)據(jù)源來提高地震數(shù)據(jù)管理系統(tǒng)的使用效率。而NoSQL數(shù)據(jù)庫具有水平擴展容易、數(shù)據(jù)存儲效率高和性能穩(wěn)定等優(yōu)點,可作為最佳數(shù)據(jù)源選擇,目前已應(yīng)用在地學(xué)各領(lǐng)域。本文分析NoSQL數(shù)據(jù)庫和地震勘探數(shù)據(jù)管理系統(tǒng)特點與優(yōu)勢,以滿足實驗室對地震勘探數(shù)據(jù)高效存取與管理需求為出發(fā)點,選擇合適的NoSQL數(shù)據(jù)庫作為數(shù)據(jù)源。
近年來,非關(guān)系型數(shù)據(jù)庫(NoSQL)在數(shù)據(jù)庫領(lǐng)域迅速發(fā)展,并且非關(guān)系型數(shù)據(jù)庫(NoSQL)被認(rèn)為比關(guān)系型數(shù)據(jù)庫(SQL)更適合于海量數(shù)據(jù)的存儲和管理[19-20]。NoSQL數(shù)據(jù)庫使用分布式節(jié)點進行水平擴展,用戶可以通過添加節(jié)點來動態(tài)提高數(shù)據(jù)庫存儲負(fù)載[21-22]。到目前為止,廣泛使用的NoSQL數(shù)據(jù)庫分為以下四大類[23-24](見表2)。
表2 非關(guān)系型數(shù)據(jù)庫分類
本文系統(tǒng)主要基于Web頁面實現(xiàn)地震勘探數(shù)據(jù)的高效、快速存取管理,分析上述NoSQL數(shù)據(jù)庫的特點,最終采用Web端表現(xiàn)優(yōu)異的文檔型數(shù)據(jù)庫典型代表MongoDB數(shù)據(jù)庫作為系統(tǒng)開發(fā)的數(shù)據(jù)源。
MongoDB是基于分布式文件系統(tǒng)的NoSQL開源數(shù)據(jù)庫項目,它是一個高性能且可擴展的面向文檔型存儲模式的數(shù)據(jù)庫[25]。它使用C++編程語言開發(fā),使用類似于JSON類型的BSON(Binary JSON)松散式格式,可存儲比較復(fù)雜的數(shù)據(jù)類型,可作為Web應(yīng)用程序優(yōu)秀的數(shù)據(jù)源。MongoDB提供了索引、聚合、分片和負(fù)載均衡等功能,支持大規(guī)模數(shù)據(jù)批處理,是一種介于關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)之間的數(shù)據(jù)庫。MongoDB采用內(nèi)存映射的內(nèi)部管理機制,在進行數(shù)據(jù)管理操作時,MongoDB會把磁盤商隊數(shù)據(jù)的所有操作轉(zhuǎn)換為內(nèi)存操作,其中所有關(guān)于內(nèi)存的操作全部由操作系統(tǒng)來執(zhí)行。MongoDB采用文檔模型進行數(shù)據(jù)存儲,與關(guān)系模型的存儲方式不同,如圖2所示。相比于關(guān)系模型,文檔模型更適合作為Web開發(fā)的選擇,主要基于以下幾點:
圖2 關(guān)系模型與文檔模型
(1)讀寫效率高。文檔模型把數(shù)據(jù)信息存儲在JSON中,查詢數(shù)據(jù)時用很少的時間就可查詢到磁頭,相比于關(guān)系模型的二維表,在IO性能上有明顯優(yōu)勢。
(2)可擴展能力強。由于多節(jié)點數(shù)據(jù)關(guān)聯(lián)存在性能問題,因此關(guān)系型數(shù)據(jù)庫很難做分布式。而文檔模型不考慮關(guān)聯(lián),數(shù)據(jù)容易分庫,水平擴展比較容易。
(3)動態(tài)模式。關(guān)系模型中二維表表示數(shù)據(jù)相對固定;文檔模型數(shù)據(jù)結(jié)構(gòu)靈活,每個文檔可以存儲不同結(jié)構(gòu)的數(shù)據(jù)。
(4)模型自然。文檔模型與對象模型十分類似,無需經(jīng)過對象關(guān)系映射(ORM)雙向轉(zhuǎn)換,可直接用于內(nèi)存和存儲之間相互操作。
(1)瀏覽器端開發(fā)技術(shù)。瀏覽器端(前端)開發(fā)主要采用HTML、CSS、JavaScript 3種基本語言。為了更好、更快速開發(fā),系統(tǒng)在開發(fā)階段采用了較為完善的前端框架。本文通過Node Package Manager(NPM)、Stack Overflow Survey、GitHub Stars統(tǒng)計數(shù)據(jù)來篩選出當(dāng)前應(yīng)用成熟和廣泛的框架,比較當(dāng)前幾種主流的前端框架,最終選用Vue.js作為地震大數(shù)據(jù)管理系統(tǒng)的前端開發(fā)框架。
Vue.js是一個開源的輕量級前端JavaScript框架,采用自下而上的方式開發(fā)設(shè)計。Vue.js有著名的全家桶系列,包括了Vue-cli、Vue-router、Vuex、Axios等。Vue-cli稱為腳手架,是官方開發(fā)的標(biāo)準(zhǔn)工具,通過Vue-cli可以快速構(gòu)建系統(tǒng)的前端框架。Vue-router是Vue.js官方指定的路由管理器,實現(xiàn)數(shù)據(jù)的全局管理。Vuex是應(yīng)用程序開發(fā)的狀態(tài)管理模式,它將所有組件共享的變量存儲在一個對象里,該對象放在頂層組件供其他組件使用。Axios是基于Promise的HTTP請求包,Vue.js使用Axios進行HTTP調(diào)用。Axios把請求封裝起來,看起來像一個整體。Axios的API很豐富,除了常用的請求方法外,還提供了以下功能:①全局?jǐn)?shù)據(jù)請求響應(yīng)與攔截;②轉(zhuǎn)換請求和響應(yīng)數(shù)據(jù);③取消請求;④自動轉(zhuǎn)換為JSON數(shù)據(jù);⑤客戶端防止CSRF/XSRF攻擊;⑥可以創(chuàng)建不同的實例,提供并發(fā)封裝;⑦為復(fù)雜型場景提供靈活定義。有了這些模塊,使得系統(tǒng)的前端開發(fā)能夠快速的實現(xiàn)業(yè)務(wù)功能。
(2)服務(wù)器端開發(fā)技術(shù)。Python作為當(dāng)今最流行的開發(fā)語言之一,得到廣大編程愛好者的人員的使用。Python Web框架有許多,如Django、Flask、Tornado、Pylons、Web2py、Bottle等,目前最為流行的是Django和Flask,系統(tǒng)采用Django作為服務(wù)器端(后端)開發(fā)框架。Django是一個遵循MVC架構(gòu)模式的Python Web網(wǎng)絡(luò)框架,它包含了創(chuàng)建應(yīng)用需要的幾乎全部功能,可以快速開發(fā)安全和可維護的網(wǎng)站。Django只需要單獨的安裝包來安裝,框架本身能夠?qū)崿F(xiàn)各種功能,可以不依靠其它的庫來完成。它具有設(shè)計優(yōu)秀、結(jié)構(gòu)合理、性能出眾、功能完善、要素齊全等特點,具體表現(xiàn)在Django提供了完善的幫助文檔;在訪問數(shù)據(jù)庫時提供了豐富的組件功能;Django提供了靈活的URL映射,幫助快速編寫接口;Template模板語言能夠幫助編輯Web頁面;提供了專門的后臺管理系統(tǒng);提供完整的錯誤信息提示幫助系統(tǒng)開發(fā)。Django采用MTV模式的框架基礎(chǔ),它將開發(fā)任務(wù)分為Model、Template、View三大部分,如圖3所示。
圖3 Django MTV框架
MTV與MVC模式非常相似,它將開發(fā)工作分為3層,數(shù)據(jù)存取層(Model)實現(xiàn)業(yè)務(wù)對象明模型和數(shù)據(jù)庫之間關(guān)系映射(ORM);表現(xiàn)層(Template)提供了語法模板展示信息頁面;業(yè)務(wù)邏輯層(View)調(diào)用數(shù)據(jù)存取層和表現(xiàn)層,處理用戶請求并返回響應(yīng)。Django響應(yīng)順序如下:①Django收到瀏覽器HTTP請求;②通過URLconf查找對應(yīng)的視圖,進行URL路由分發(fā);③視圖接收到業(yè)務(wù)請求后查詢數(shù)據(jù),獲取對應(yīng)的頁面;④視圖函數(shù)處理完成給服務(wù)器返回HTTP響應(yīng);⑤服務(wù)器將響應(yīng)發(fā)送給瀏覽器。
系統(tǒng)在后端開發(fā)中使用Python語言操作MongoDB時,使用PyMongo、MongoEngine、Djongo等模塊,這些模塊可以很好的操作MongoDB數(shù)據(jù)庫。系統(tǒng)采用Django REST Framework(DRF)進行接口的編寫,DRF是Django實現(xiàn)RESTful風(fēng)格API框架,具有以下特點:具有清晰的API Web信息頁面;Django ORM自動序列化;支持OAuth1和OAuth2授權(quán);支持身份認(rèn)證和權(quán)限控制;內(nèi)置訪問頻率限制功能;豐富的定制層級;可擴展性,插件豐富,使用廣泛,文檔豐富等。
軟件系統(tǒng)最開始在大型機上運行,用戶通過“啞終端”方式登錄使用軟件系統(tǒng)。隨著個人電腦發(fā)展和應(yīng)用,人們開始在電腦客戶端(Client)使用軟件系統(tǒng),數(shù)據(jù)庫運行在服務(wù)器端(Server),這種Client/Server模式簡稱C/S架構(gòu)。隨著Web技術(shù)的不斷發(fā)展,系統(tǒng)開發(fā)逐步向瀏覽器端過渡,由于C/S架構(gòu)需要更新每個客戶端桌面應(yīng)用程序才可以滿足系統(tǒng)的更新,實現(xiàn)起來比較繁瑣。因此新型的Browser/Server架構(gòu)模式開始出現(xiàn),簡稱B/S架構(gòu)。在B/S架構(gòu)中,用戶訪問瀏覽器獲取Web頁面,通過瀏覽器請求服務(wù)器,服務(wù)器端完成應(yīng)用程序的業(yè)務(wù)請求和數(shù)據(jù)存儲功能,這種方式具有極強的交互性。B/S架構(gòu)系統(tǒng)更新十分便捷,只需服務(wù)器端進行升級部署,瀏覽器就可以輕松地使用新的應(yīng)用,因此B/S架構(gòu)迅速流行起來。本文研究的系統(tǒng)采用前后端分離的B/S分層架構(gòu)開發(fā)模式,主要基于以下幾點:
(1)分布性強。系統(tǒng)建立在廣域網(wǎng),不同的用戶可以隨時隨地進行數(shù)據(jù)的查詢、瀏覽等操作。在網(wǎng)絡(luò)環(huán)境下,可以利用電腦、平板、手機等設(shè)備通過瀏覽器進行快速訪問。
(2)擴展簡單。通過增加網(wǎng)頁和添加相關(guān)頁面功能即可擴展系統(tǒng)業(yè)務(wù)。根據(jù)用戶需求,可定制專門的功能模塊,具有很好的靈活性和較強的耦合性。
(3)維護方便。通過更新修改對應(yīng)的組件即可實現(xiàn)系統(tǒng)更新。只需開發(fā)者完成相應(yīng)工作,用戶無需任何操作。
(4)共享性強。通過網(wǎng)絡(luò)可以實時地實現(xiàn)數(shù)據(jù)的共享,對數(shù)據(jù)進行存取管理。
(5)使用靈活。不僅可以應(yīng)用于Windows平臺,還可以應(yīng)用于Unix/Linux等平臺,在電腦、平板、手機等設(shè)備上都可以進行使用。
(1)硬件環(huán)境配置。硬件配置需要考慮到數(shù)據(jù)庫服務(wù)器的CPU、內(nèi)存、硬盤配置等方面,信息如表3所示。
表3 硬件環(huán)境配置參數(shù)
(2)軟件環(huán)境配置。對MongoDB數(shù)據(jù)庫軟件進行安裝和相關(guān)參數(shù)的配置,如表4所示。MongoDB 4個節(jié)點部署在虛擬機Vmware Workstation中的CentOS7.2環(huán)境下。系統(tǒng)使用Virtualenv創(chuàng)建Python虛擬環(huán)境,保證軟件環(huán)境的獨立性和兼容性。
表4 系統(tǒng)軟件信息
(3)系統(tǒng)測試環(huán)境。使用不同內(nèi)核瀏覽器進行測試,包括:IE11、Chrome 80.0、Firefox 71.0、Safari 14.1等;對系統(tǒng)在電腦端、移動手機、平板等設(shè)備中的顯示效果和功能進行測試。
(4)分布式存儲集群搭建。地震大數(shù)據(jù)管理系統(tǒng)數(shù)據(jù)源采用MongoDB副本集與分片結(jié)合的方式搭建分布式集群,目前搭建4個節(jié)點,分別在CentOS_master、CentOS_slave1、CentOS_slave2、CentOS_slave3機器上進行部署,具體集群規(guī)劃信息如表5所示。
表5 服務(wù)器規(guī)劃
具體分片集群架構(gòu)如圖4所示,每臺機器具體配置了相關(guān)信息。
圖4 系統(tǒng)集群部署結(jié)構(gòu)圖
創(chuàng)建分布式集群相關(guān)目錄。在四臺虛擬機器CentOS_master、CentOS_slave1、CentOS_slave2、CentOS_slave3中分別配置對應(yīng)文件目錄,下面是每臺機器的創(chuàng)建相關(guān)文件目錄的具體操作步驟。例如在Master:192.168.55.110節(jié)點創(chuàng)建conf、mongos、config、shard1、shard3、shard4等相關(guān)目錄的命令如下:
初始化副本集:rs.initiate(config),出現(xiàn)相關(guān)信息,如圖5所示。
圖5 初始化副本集
(6)配置分片副本集。在四臺機器上分別進行相關(guān)信息配置,這里以shard1副本集為例。在3個節(jié)點master、slave1、slave2機器中/usr/local/mydb/conf/shard1.conf目錄下進行如下相關(guān)信息配置:
初始化副本集配置,使用命令rs.initiate(config),出現(xiàn)如圖6所示表示成功。
圖6 初始化shard1副本集
(7)配置Mongos。先啟動各節(jié)點配置服務(wù)器Configs,再啟動分片服務(wù)器Shard,最后啟動路由Mongos。分別在對應(yīng)機器(master、slave1、slave2)/usr/local/mydb/conf/mongos.conf目錄下添加如下內(nèi)容:
查看集群狀態(tài):通過命令sh.status()查看信息如圖7所示。
圖7 分片集群狀態(tài)
(9)分布式存儲集群啟動。啟動所有節(jié)點配置服務(wù)器(節(jié)點master、slave1、slave2),啟動命令如下:
成功啟動分布式存儲集群,集群連接測試如圖8示。
(1)負(fù)載均衡測試。在一般情況下,數(shù)據(jù)在MongoDB數(shù)據(jù)存儲會幾乎均勻的分配到各個節(jié)點,但由于網(wǎng)絡(luò)不穩(wěn)定等原因,有可能會出現(xiàn)數(shù)據(jù)服務(wù)器宕機的情況。如果系統(tǒng)僅部署一臺數(shù)據(jù)庫服務(wù)器,會造成數(shù)據(jù)丟失,這顯然是不合理的選擇。針對上述可能出現(xiàn)的問題,系統(tǒng)采用MongoDB數(shù)據(jù)庫副本集(Replica Set)的方式來實現(xiàn)數(shù)據(jù)的復(fù)和備份,即均衡負(fù)載特性。本文測試向搭建好的分布式集群中寫入10萬條數(shù)據(jù)進行測試,查看其數(shù)據(jù)分布情況,每個節(jié)點的數(shù)據(jù)分布結(jié)果見圖9。
圖9 分布式集群各節(jié)點數(shù)據(jù)信息
從圖9中可以統(tǒng)計如下信息:
從統(tǒng)計信息中可以發(fā)現(xiàn),10萬條數(shù)據(jù)量在各個節(jié)點上維持在25 000條左右,系統(tǒng)搭建分布式集群在插入數(shù)據(jù)時可以達到負(fù)載均衡的效果。
(2)集群壓力測試。利用Mongostat可以查看MongoDB的實時性能、QPS和連接數(shù)等信息。使用命令監(jiān)測分片集群,如圖10所示顯示了插入數(shù)據(jù)時監(jiān)控界面。啟動命令如下:
圖10 分片集群mongostat監(jiān)控界面
mongostat--host 192.168.55.110:20000
分片集群通過YCSB進行讀寫性能等壓力測試,YCSB(Yahoo!Cloud Serving Benchmark)是一款開源的分布式性能測試工具,常用于測試NoSQL產(chǎn)品的讀寫性能。本文通過MongoDB自帶的Mongostat監(jiān)控配合YCSB進行測試,對系統(tǒng)集群進行讀寫測試。YCSB中workloads目錄自帶6種壓力測試,信息見表6。
表6 YCSB場景對應(yīng)關(guān)系
系統(tǒng)分別對workloads幾種模式進行集群測試,這里100%讀的場景為例,配置文件workloadc_mongo信息如下:
在集群中先進行數(shù)據(jù)加載,命令如下,查看系統(tǒng)生成相關(guān)信息如圖11所示。
圖11 YCSB加載測試數(shù)據(jù)信息
加載好數(shù)據(jù),進行Run測試命令如下:
分別進行workloada、workloadb、workloadc、workloadd、workloade、workloadf等幾種情況下測試,統(tǒng)計各種情況下的運行時間(Runtime)和吞吐量(Throughout),如圖12所示。
通過圖12可以清晰地發(fā)現(xiàn),在運行100萬條數(shù)據(jù)量情況下workloade情況下運行時間最長,每秒集群吞吐量最少,每秒僅僅達到約98條數(shù)據(jù);workloadc情況選下運行運行時間最短,每秒的吞吐量大約為2 181條數(shù)據(jù)。通過測試對比這幾種情況,發(fā)現(xiàn)MongoDB分布式集群在寫數(shù)據(jù)的方面表現(xiàn)一般,但在讀數(shù)據(jù)方面比寫數(shù)據(jù)表現(xiàn)出色,比較適合系統(tǒng)開發(fā)中數(shù)據(jù)讀多寫少的特點。
中國礦業(yè)大學(xué)(北京)煤炭資源與安全開采國家重點實驗室經(jīng)過幾十年的煤炭地震勘探,積累了海量的地震勘探數(shù)據(jù),這些數(shù)據(jù)包括了結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),這些寶貴的勘探數(shù)據(jù)的獲取花費了大量的人力和財力,需要科學(xué)、規(guī)范的存儲管理。地震勘探過程中產(chǎn)生的結(jié)構(gòu)化數(shù)據(jù)包括了EXCEL、TXT、CSV等格式數(shù)據(jù),這些結(jié)構(gòu)化數(shù)據(jù)適合于建立索引和自動創(chuàng)建元數(shù)據(jù)。半結(jié)構(gòu)化數(shù)據(jù)包括HTML、XML、JSON等格式和一些NoSQL數(shù)據(jù)庫中的格式。非結(jié)構(gòu)結(jié)構(gòu)化數(shù)據(jù)包括文檔、圖片、音頻、視頻等格式的資料。
3.5.1 結(jié)構(gòu)化數(shù)據(jù)存儲
對于地震勘探數(shù)據(jù)中EXCEL、CSV、TXT等數(shù)據(jù)格式,可以轉(zhuǎn)化為BSON格式進行存儲。對于存儲特定的空間信息的數(shù)據(jù),系統(tǒng)采用GeoJSON編碼格式。以存儲地理坐標(biāo)為例,系統(tǒng)可以采用引用式和嵌入式兩種存儲方式(見圖13)。其他數(shù)據(jù)在數(shù)據(jù)存儲中需要根據(jù)數(shù)據(jù)的存儲要求采用合適的方式進行數(shù)據(jù)存儲。系統(tǒng)支持相關(guān)數(shù)據(jù)的常見格式導(dǎo)出功能,滿足需求。
圖13 數(shù)據(jù)存儲方式
3.5.2 非結(jié)構(gòu)化數(shù)據(jù)存儲
非結(jié)構(gòu)化數(shù)據(jù)的存儲,在關(guān)系型數(shù)據(jù)庫中通常是采用存儲數(shù)據(jù)的路徑方式進行管理,本文研究的系統(tǒng)采用MongoDB內(nèi)置的GridFS存儲桶進行存取管理,這樣存儲方式可以將數(shù)據(jù)描述信息和GridFS中的數(shù)據(jù)源緊密的聯(lián)系起來,在讀取數(shù)據(jù)時都能夠快速地定位到相關(guān)數(shù)據(jù)。如圖14所示,地震SEG-Y文件數(shù)據(jù)存儲在數(shù)據(jù)庫中,地震數(shù)據(jù)信息表中filedata字段信息與GridFS中ID字段進行關(guān)聯(lián),地震數(shù)據(jù)信息表記錄文件名、研究區(qū)域、單位信息、上傳人員等描述信息,GridFS存儲記錄文件名、ID、數(shù)據(jù)大小、數(shù)據(jù)類型、上傳時間等信息。
圖14 地震勘探數(shù)據(jù)信息關(guān)聯(lián)方式
系統(tǒng)前端使用Vue.js技術(shù)實現(xiàn)地震勘探數(shù)據(jù)管理的Web頁面,采用響應(yīng)式布局的方式適配手機、平板、筆記本等不同的訪問設(shè)備,實現(xiàn)系統(tǒng)功能界面的友好顯示。如圖15所示,前者是在電腦端瀏覽器顯示結(jié)果,后者是在移動手機端瀏覽器顯示結(jié)果,系統(tǒng)能夠?qū)崿F(xiàn)響應(yīng)式布局,界面顯示友好。
圖15 不同設(shè)備下系統(tǒng)界面顯示測試頁面
系統(tǒng)根據(jù)地震勘探業(yè)務(wù)需求實現(xiàn)相關(guān)功能界面,完成對地震勘探數(shù)據(jù)的存取管理和快速查詢。其中包括了數(shù)據(jù)的上傳、下載、瀏覽、添加、刪除、修改、查詢等基礎(chǔ)功能,還實現(xiàn)了地震勘探數(shù)據(jù)典型的SEG-Y數(shù)據(jù)的數(shù)據(jù)解析查看功能,如圖16所示。
圖16 地震元數(shù)據(jù)管理頁面
為了滿足煤炭資源與安全開采國家重點實驗室對地震勘探數(shù)據(jù)存取管理,同時為在地球物理學(xué)專業(yè)的教學(xué)中幫助學(xué)生掌握和運用新技術(shù)手段管理和處理海量地震勘探數(shù)據(jù),設(shè)計和實現(xiàn)了地震勘探數(shù)據(jù)管理系統(tǒng)。針對地震勘探數(shù)據(jù)采集、處理及解釋等各階段數(shù)據(jù)需求,對地震勘探Web系統(tǒng)運行業(yè)務(wù)進行分析和設(shè)計,簡要闡述了系統(tǒng)的開發(fā)技術(shù)、系統(tǒng)架構(gòu)和底層數(shù)據(jù)源,探索一種基于MongoDB分布式存儲集群作管理系統(tǒng)新的數(shù)據(jù)源,設(shè)計和實現(xiàn)了系統(tǒng)Web功能。
將NoSQL數(shù)據(jù)庫技術(shù)應(yīng)用到地震勘探領(lǐng)域是石油、煤炭等能源行業(yè)的發(fā)展趨勢。為了滿足實驗室對海量地震勘探數(shù)據(jù)存儲管理新需求,本文提出了基于MongoDB的地震勘探數(shù)據(jù)管理系統(tǒng)的設(shè)計與實現(xiàn)。該系統(tǒng)能夠滿足重點實驗室海量地震勘探數(shù)據(jù)的存儲管理需求,實現(xiàn)高效的地震數(shù)據(jù)管理,為數(shù)據(jù)處理、解釋人員提供了很好的服務(wù),也為地學(xué)的相關(guān)研究提供借鑒和參考。同時,為地震勘探基礎(chǔ)課程和地球物理軟件實踐教學(xué)提供了豐富的案例,幫助學(xué)生理解和掌握新信息技術(shù)在海量地震勘探數(shù)據(jù)中的應(yīng)用。