房 萍
(延邊職業(yè)技術(shù)學(xué)院 吉林 延吉 133000)
互聯(lián)網(wǎng)技術(shù)的快速發(fā)展提高了數(shù)據(jù)組織的效率。 與此同時(shí),每天都有大量的數(shù)據(jù)需要進(jìn)行比較和組織[1]。 如何提高數(shù)據(jù)組織的效能也成為一個(gè)非常令人擔(dān)憂的問題。隨著數(shù)據(jù)量的快速增長,數(shù)據(jù)存儲(chǔ)也將得到擴(kuò)展。 然而,在分布式數(shù)據(jù)的存儲(chǔ)中存在許多關(guān)聯(lián)。 需要解決的問題是如何整合這些數(shù)據(jù)并利用它們來探索潛在價(jià)值。 因此,本文設(shè)計(jì)了一個(gè)基于MongoDB 的信息系統(tǒng),選擇MongoDB 作為存儲(chǔ)底層,以此來實(shí)現(xiàn)多個(gè)異構(gòu)數(shù)據(jù)源的可靠集成,并通過在大量數(shù)據(jù)中集成和共享來自多個(gè)源的數(shù)據(jù)來解決有效的效率問題。
信息系統(tǒng)使用不同解決方案來應(yīng)對(duì)不同技術(shù)、不同環(huán)境和特定需求,并且信息系統(tǒng)實(shí)現(xiàn)了獨(dú)立性、互操作的功能。 但前概念的決策支持系統(tǒng)等全球應(yīng)用程序需要廣泛集成這些異構(gòu)性,從而為管理人員提供完善的信息,科學(xué)地決策計(jì)劃。 系統(tǒng)異構(gòu)是客觀存在的,包括硬件和軟件的異構(gòu)[2]。 同時(shí),考慮到成本、對(duì)系統(tǒng)自主性的要求以及現(xiàn)有系統(tǒng)對(duì)企業(yè)的關(guān)鍵知識(shí),IT 系統(tǒng)的集成將創(chuàng)建一個(gè)和諧、統(tǒng)一、高度可訪問和高度互操作的新系統(tǒng),同時(shí)尊重現(xiàn)有系統(tǒng)并努力保持其自身的自主權(quán)。 包括運(yùn)行支撐環(huán)境集成、功能集成、信息集成、人員組織集成、應(yīng)用集成等。信息集成是實(shí)現(xiàn)信息的正確及時(shí)傳輸,也是支撐信息的關(guān)鍵,所以具有重要意義。 信息集成比傳播更重要,信息集成可以產(chǎn)生更多效果。 集成信息可以幫助我們利用現(xiàn)有資源來科學(xué)地預(yù)測(cè)和評(píng)估業(yè)務(wù)趨勢(shì)。 信息集成可以發(fā)揮信息的力量,提高生產(chǎn)效率。
分布式存儲(chǔ)系統(tǒng)通過計(jì)算機(jī)網(wǎng)絡(luò)連接大量服務(wù)器,提供存儲(chǔ)工具。 與共享存儲(chǔ)系統(tǒng)相比,分布式存儲(chǔ)系統(tǒng)具有獨(dú)特的優(yōu)勢(shì),如可擴(kuò)展性、低成本和高性能。 分布式數(shù)據(jù)庫、分布式表格系統(tǒng)、分布式鍵值系統(tǒng)、分布式文件系統(tǒng)均是當(dāng)前常見的存儲(chǔ)系統(tǒng)。
MongoDB 屬于與未非關(guān)系型數(shù)據(jù)庫,提供了一種數(shù)據(jù)存儲(chǔ)方法,不僅靈活、可擴(kuò)展,并且十分強(qiáng)大。 MongoDB 使用鍵值來存儲(chǔ)數(shù)據(jù),其結(jié)構(gòu)尚未固定。 不同的提示可能有不同的字段,適合非結(jié)構(gòu)化的數(shù)據(jù)儲(chǔ)存[3]。 相較于數(shù)據(jù)庫關(guān)系來說,MongoDB 存在一定的優(yōu)勢(shì),包括:(1)處理海量數(shù)據(jù)時(shí)的高性能:一般關(guān)系型數(shù)據(jù)庫是采用的Cache 是Query Cache。 在更新時(shí),Cache 會(huì)失效,這也導(dǎo)致頻繁訪問更改數(shù)據(jù)的數(shù)據(jù)集高效化不足。 而MongoDB Cake 是細(xì)粒度、記錄級(jí)的Cache,更適合存儲(chǔ)訪問頻繁更改的數(shù)據(jù)。(2)擴(kuò)展性更強(qiáng):MongoDB 利用文檔化的數(shù)據(jù)模型,實(shí)現(xiàn)數(shù)據(jù)共享。 不同席位之間的數(shù)據(jù)沒有外鍵,使數(shù)據(jù)更容易擴(kuò)展。 (3)數(shù)據(jù)結(jié)構(gòu)比較靈活:MongoDB 以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù),不再需要給存儲(chǔ)的數(shù)據(jù)建立存儲(chǔ)結(jié)構(gòu),可以對(duì)數(shù)據(jù)靈活增加和減少字段。
數(shù)據(jù)集成是將格式不同、來源不同、屬性不同的數(shù)據(jù)進(jìn)行物理集成和邏輯集成,從而實(shí)現(xiàn)完整的數(shù)據(jù)[4]。 當(dāng)前有邏輯集成和物理集成兩種常見的數(shù)據(jù)集成類型。 其中,邏輯集成僅提供接口,或是看起來在本地查詢,但是數(shù)據(jù)無需儲(chǔ)存在本地。 邏輯集成見圖1 所示。
圖1 邏輯集成示意圖
物理集成見圖2 所示。 物理集成是在本地中儲(chǔ)存所有來源不同的數(shù)據(jù),僅詢問數(shù)據(jù)是否應(yīng)該存儲(chǔ)在本地。
圖2 物理集成示意圖
系統(tǒng)設(shè)計(jì)的總體目標(biāo)是集成和集成來自多個(gè)來源的異構(gòu)數(shù)據(jù)。 圖3 所示為系統(tǒng)設(shè)計(jì)架構(gòu)圖。 系統(tǒng)分為數(shù)據(jù)轉(zhuǎn)換模塊、數(shù)據(jù)采集、數(shù)據(jù)格式管理、系統(tǒng)訪問管理、數(shù)據(jù)查詢和數(shù)據(jù)存儲(chǔ)等重要模塊。 數(shù)據(jù)格式管理能夠進(jìn)行訪問與目標(biāo)數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)定制;管理系統(tǒng)主要負(fù)責(zé)調(diào)整端口號(hào)、IP、數(shù)據(jù)庫密碼等數(shù)據(jù)源。 數(shù)據(jù)收集模塊負(fù)責(zé)收集眾多來源異構(gòu)數(shù)據(jù),并且收集數(shù)據(jù)后要通過數(shù)據(jù)轉(zhuǎn)化和存儲(chǔ)模塊將數(shù)據(jù)存儲(chǔ)在分布式存儲(chǔ)系統(tǒng)(MongoDB 類)中,實(shí)現(xiàn)了多元文化數(shù)據(jù)的集成。 另外,數(shù)據(jù)查詢模塊還會(huì)提供統(tǒng)一問卷,使用戶可以在本地查詢存儲(chǔ)的數(shù)據(jù)。
圖3 系統(tǒng)架構(gòu)圖
根據(jù)定義的結(jié)構(gòu)映射化將待接入的數(shù)據(jù)轉(zhuǎn)化為目標(biāo)數(shù)據(jù)。 因?yàn)樾枰L問系統(tǒng)中的多個(gè)數(shù)據(jù)源,并且數(shù)據(jù)結(jié)構(gòu)具有一定差異,因此需要分別訪問每個(gè)數(shù)據(jù)源,從而合并相同類型的數(shù)據(jù),將其妥善保存。 由于數(shù)據(jù)具有廣泛的來源,如果使用傳統(tǒng)關(guān)系數(shù)據(jù)存儲(chǔ)數(shù)據(jù)的話,會(huì)出現(xiàn)大量空間浪費(fèi)的情況。 同時(shí)在數(shù)據(jù)量急劇增長時(shí),查詢效率也會(huì)下降。 擴(kuò)展數(shù)據(jù)庫接受向上擴(kuò)展機(jī)制時(shí),需大量成本。 因此,基于上述多重因素,本文選擇MongoDB 為存儲(chǔ)底層。不僅能夠通過MongoDB 文檔庫消除各個(gè)數(shù)據(jù)源之間數(shù)據(jù)字段的差異。 同時(shí)MongoDB 開放了其源屬性,使擴(kuò)展和分發(fā)操作變得更容易,更好地處理大量數(shù)據(jù)[5]。
為了解決大量數(shù)據(jù)造成的可訪問性問題,采用分布式集群創(chuàng)建MongoDB,并采用數(shù)據(jù)共享理念,即共享一個(gè)數(shù)據(jù)集,然后進(jìn)行劃分,使其成為不同的MongoDB 節(jié)點(diǎn)。
系統(tǒng)用三個(gè)服務(wù)器建構(gòu)MongoDB 集群,將其分為三個(gè)部門,且每一部分均具有三個(gè)復(fù)用集。 另外,考慮到數(shù)據(jù)源的頻繁訪問問題,所以對(duì)于數(shù)據(jù)源要采用不同的片鍵,同時(shí)確保片鍵均勻分布,以此來實(shí)現(xiàn)數(shù)據(jù)的均勻分布,最終提高系統(tǒng)的數(shù)據(jù)收集性能。
一般情況下,將其中一個(gè)分片用作讀取和寫入數(shù)據(jù)的主分片,其他分片需要與主分片之間進(jìn)行通信,確保數(shù)據(jù)完整。 另外,其他分片也擁有查詢功能,在主分片忙碌狀態(tài)下,也可以使用其他分片進(jìn)行查詢,實(shí)現(xiàn)了并發(fā)查詢功能。 每一分片有三個(gè)復(fù)用集,即擁有兩個(gè)額外的數(shù)據(jù)備份。 一旦其中一臺(tái)服務(wù)器出現(xiàn)故障,其他兩臺(tái)服務(wù)器上依舊可以保持全部的數(shù)據(jù),提高了系統(tǒng)的容錯(cuò)性和可靠性。
在MongoDB 集群內(nèi)部,數(shù)據(jù)存取模塊根據(jù)目標(biāo)數(shù)據(jù)的操作實(shí)體創(chuàng)建了一個(gè)數(shù)據(jù)集合,并將這些來自不同來源的業(yè)務(wù)實(shí)體存儲(chǔ)到一個(gè)集合中,以實(shí)現(xiàn)多個(gè)數(shù)據(jù)源的集成和集成[6]。
數(shù)據(jù)采集是應(yīng)用程序在系統(tǒng)運(yùn)行過程中一項(xiàng)非常基本的功能。 與傳統(tǒng)的數(shù)據(jù)收集不同,傳統(tǒng)的數(shù)據(jù)有一定程度的延遲。 如果在化工廠工作,數(shù)據(jù)延遲可能會(huì)導(dǎo)致嚴(yán)重后果。 因此,系統(tǒng)進(jìn)行數(shù)據(jù)收集過程中,必須確保信息的時(shí)效性。 數(shù)據(jù)的實(shí)時(shí)傳輸需要控制誤差,盡量在10 ms 以內(nèi)。 應(yīng)定期監(jiān)測(cè)采集數(shù)據(jù)的時(shí)效性,以確保任何相關(guān)數(shù)據(jù)收集都能為后續(xù)數(shù)據(jù)處理提供保障,并提高數(shù)據(jù)效率。 數(shù)據(jù)收集完成后,必須立即對(duì)信息進(jìn)行處理。 大數(shù)據(jù)時(shí)代下,每單位時(shí)間生成的信息總量非常大。 要提供數(shù)據(jù)流計(jì)劃,設(shè)計(jì)者必須依靠系統(tǒng)本身來創(chuàng)建專業(yè)的數(shù)據(jù)模塊流程。 根據(jù)模塊化系統(tǒng)的分類標(biāo)準(zhǔn),實(shí)時(shí)數(shù)據(jù)管理被劃分為一個(gè)過程系統(tǒng),并將各種類型的信息數(shù)據(jù)放置在相關(guān)的數(shù)據(jù)過程中,以提高數(shù)據(jù)處理的準(zhǔn)確性和效率[7]。
結(jié)束信息分類后,對(duì)于內(nèi)容進(jìn)行分類處理,構(gòu)建不同種類的數(shù)據(jù)庫。 或是將分類標(biāo)準(zhǔn)應(yīng)用于數(shù)據(jù)處理。 一旦所有數(shù)據(jù)都經(jīng)過科學(xué)存儲(chǔ),工作人員還應(yīng)注意任何數(shù)據(jù)內(nèi)容,這些數(shù)據(jù)內(nèi)容可作為后續(xù)查詢。 操作員可以通過數(shù)據(jù)查詢功能,了解詳細(xì)信息。
根據(jù)實(shí)時(shí)傳輸要求,利用PHD 來建立數(shù)據(jù)庫系統(tǒng),從而實(shí)現(xiàn)信息的保存和處理,使信息數(shù)據(jù)使用人員快速了解具體情況。 Unit Infor 的實(shí)際數(shù)據(jù)傳輸模塊是一個(gè)OPCServer,利用標(biāo)準(zhǔn)的OPC 方法實(shí)現(xiàn)數(shù)據(jù)讀取功能[8]。另外,用于OPC 客戶端的PHD 可以與數(shù)據(jù)傳輸模塊連接,該模塊可以導(dǎo)致到公司數(shù)據(jù)庫的實(shí)際數(shù)據(jù)傳輸。
數(shù)據(jù)整理模式以往采用的是數(shù)據(jù)報(bào)表形式進(jìn)行,但是因?yàn)楹罄m(xù)生產(chǎn)或相關(guān)參數(shù)發(fā)生變化,數(shù)據(jù)信息也需要隨之修改。 但修改多次之后,必然會(huì)丟失初始數(shù)據(jù),無法確保數(shù)據(jù)的完整性。 而使用數(shù)據(jù)庫設(shè)計(jì)方法,在軟件編制結(jié)束后,無需進(jìn)行軟件修改,僅需修改各種報(bào)表數(shù)據(jù)庫即可完成報(bào)表數(shù)據(jù)的增加或減少,而表格、表頭的改動(dòng)使EXCEL中修改更加方便,有效避免了編程人員反復(fù)修改數(shù)據(jù)庫這一重復(fù)且繁瑣的工作內(nèi)容。
本文比較了Orakle、MongoDB 單機(jī)和MongoDB 集群作為存儲(chǔ)數(shù)據(jù)庫的幾種信息集成系統(tǒng)的數(shù)據(jù)集成效果。測(cè)試集選擇一定數(shù)量的異構(gòu)數(shù)據(jù)集,基本信息見表1所示。
表1 測(cè)試數(shù)據(jù)集的基本信息情況
使用Orakle、MongoDB 單機(jī)和MongoDB 集群來測(cè)試數(shù)據(jù)集成系統(tǒng)。 三個(gè)測(cè)試集合分別在系統(tǒng)上執(zhí)行數(shù)據(jù)集成,表2 所示為集成結(jié)果情況。
表2 平均時(shí)間對(duì)比
結(jié)果發(fā)現(xiàn),當(dāng)集成數(shù)據(jù)量較小時(shí),MongoDB 單機(jī)的性能與傳統(tǒng)集成數(shù)據(jù)庫相差無幾,基于集群節(jié)點(diǎn)通信之間的時(shí)間開銷,因此MongoDB 集群低于MongoDB 單機(jī);但隨著數(shù)據(jù)量增加,MongoDB 單機(jī)的性能逐漸高于Oracle,MongoDB 集群的性能也逐漸超過MongoDB 單機(jī)。 對(duì)于大量數(shù)據(jù)來說,MongoDB 集群的性能優(yōu)于Oracle 和傳統(tǒng)集成數(shù)據(jù)庫。 這意味著采用MongoDB 集群模式搭建存儲(chǔ)底層,能夠有效提高系統(tǒng)性能。
另外,為了增強(qiáng)MongoDB 集群的查詢效率,將查詢條件字段添加索引,以下為代碼:
在設(shè)置完索引之后,對(duì)于索引前和索引后查詢所需時(shí)間的平均值分別進(jìn)行計(jì)算,并對(duì)于索引前后的查詢效率進(jìn)行對(duì)比,表3 所示為測(cè)試結(jié)果。 在結(jié)果中可以看出,當(dāng)數(shù)據(jù)量較大的情況下,在一定程度上提升了索引后數(shù)據(jù)查詢效率。 這證明海量數(shù)據(jù)背景下,在MongoDB 中建立索引,提高在系統(tǒng)中的數(shù)據(jù)查詢效率。
表3 索引前后平均查詢時(shí)間對(duì)比
在大數(shù)據(jù)時(shí)期,需要對(duì)大量數(shù)據(jù)進(jìn)行匯總和組織。 如何提高數(shù)據(jù)組織的效率也成為一個(gè)非常令人擔(dān)憂的問題。使用數(shù)據(jù)收集系統(tǒng)和信息集成系統(tǒng)能夠有效解決這一問題。 加強(qiáng)系統(tǒng)設(shè)計(jì),提高數(shù)據(jù)收集效率和數(shù)據(jù)應(yīng)用的價(jià)值是非常重要的。 所以將MongoDB 作為存儲(chǔ)底層進(jìn)行系統(tǒng)設(shè)計(jì),解決大數(shù)據(jù)時(shí)代下的數(shù)據(jù)集成性能的問題。 但是還需要對(duì)MongoDB 的索引、分片等進(jìn)行下一步研究,以便更好應(yīng)對(duì)數(shù)據(jù)量飛速上升的情況。