段淑萍,王曉麗
(甘肅機電職業(yè)技術(shù)學(xué)院,甘肅 天水 741001)
隨著繼電保護的不斷發(fā)展和數(shù)據(jù)的日益復(fù)雜化,數(shù)據(jù)的存儲和管理方式也發(fā)生了很大的變化,在伸縮性和可用性上有了更高的要求,傳統(tǒng)的數(shù)據(jù)管理面臨著各種壓力和挑戰(zhàn)。繼電保護大數(shù)據(jù)具有大數(shù)據(jù)的普遍特性,其特征可以概括為5 個V(Volume、Variety、Velocity、Veracity 和Value)。即數(shù)量大、數(shù)據(jù)類型多、處理速度要求快、數(shù)據(jù)準(zhǔn)確性要求高、價值密度低。在目前的繼電保護數(shù)據(jù)存儲系統(tǒng)中,一般都是使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫儲存,隨著需要管理的數(shù)據(jù)向大數(shù)據(jù)演進,這些系統(tǒng)在滿足對空間的利用率、海量數(shù)據(jù)存儲支持和數(shù)據(jù)高可靠性等方面的需求時己經(jīng)顯得越來越無能為力,在應(yīng)對云存儲技術(shù)和云計算技術(shù)等方面也表現(xiàn)出很多難以克服的問題。在此背景之下,MongoDB 作為NoSQL 中的佼佼者,得以在繼電保護大數(shù)據(jù)管理領(lǐng)域中大展拳腳,得到了越來越多的應(yīng)用。
繼電保護是電力系統(tǒng)中最重要的組成部分之一,承擔(dān)著切除故障和反映電力設(shè)備不正常運行狀態(tài)的任務(wù),起著保護電力系統(tǒng)安全穩(wěn)定運行的作用。隨著國家電力行業(yè)的迅猛發(fā)展,電網(wǎng)容量、電廠裝機容量逐年增加,電網(wǎng)運行方式日益復(fù)雜,對繼電保護可靠性、選擇性、靈敏性和速動性的要求越來越高。繼電保護裝置從電磁式繼電器保護、晶體管保護、集成電路保護發(fā)展到今天的微機保護,保護裝置的可靠性已經(jīng)非常高,因裝置故障發(fā)生保護誤動、拒動的情況已經(jīng)很少。如果所有電廠建立起完善的繼電保護綜合管理系統(tǒng),解決目前的管理短板,將能提高本單位的設(shè)備運行水平,減少設(shè)備故障率并提高電網(wǎng)安全穩(wěn)定運行周期。
筆者通過對繼電保護大數(shù)據(jù)管理系統(tǒng)需求進行分析、大數(shù)據(jù)模型構(gòu)建和管理系統(tǒng)實現(xiàn),得出一套可用于繼電保護大數(shù)據(jù)增刪改查(CRUD)的管理模型,達到對結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化繼電保護大數(shù)據(jù)的管理,解決傳統(tǒng)數(shù)據(jù)管理系統(tǒng)存儲結(jié)構(gòu)單一問題。
繼電保護大數(shù)據(jù)管理系統(tǒng)需要對電力系統(tǒng)和元件測量的數(shù)據(jù)以及供電單位產(chǎn)生的用戶數(shù)據(jù),包括結(jié)構(gòu)性數(shù)據(jù)功率、電壓、電流等以及非結(jié)構(gòu)化數(shù)據(jù)網(wǎng)頁、音頻、視頻和圖片的儲存。其內(nèi)容主要包含四個模塊:數(shù)據(jù)采集模塊、數(shù)據(jù)儲存模塊、數(shù)據(jù)處理模塊和數(shù)據(jù)應(yīng)用模塊。如圖1所示。
圖1 繼保大數(shù)據(jù)管理系統(tǒng)原理圖
數(shù)據(jù)采集模塊:該模塊的功能主要是收集繼電保護大數(shù)據(jù),并將大數(shù)據(jù)傳輸?shù)綌?shù)據(jù)儲存模塊。
數(shù)據(jù)儲存模塊:該模塊利用NoSQL 數(shù)據(jù)庫將繼電保護大數(shù)據(jù)儲存為結(jié)構(gòu)化、半結(jié)構(gòu)化甚至非結(jié)構(gòu)化的數(shù)據(jù)格式。
數(shù)據(jù)處理模塊:該模塊是繼電保護大數(shù)據(jù)管理系統(tǒng)的核心,該模塊完成與數(shù)據(jù)儲存模塊的交互,利用基于Linux 操作系統(tǒng)的Hadoop構(gòu)架,對數(shù)據(jù)進行計算,得出結(jié)論。
數(shù)據(jù)應(yīng)用模塊:接收來自數(shù)據(jù)處理模塊的處理分析結(jié)果,對電力系統(tǒng)繼電保護裝置發(fā)出動作。有故障時,自動、迅速、有選擇地將故障元件從電力系統(tǒng)中切除,使故障元件免于繼續(xù)遭到破壞,保證其它無故障部分迅速恢復(fù)正常運行;當(dāng)電力系統(tǒng)無故障時,確保繼電保護裝置不動作。
數(shù)據(jù)模型的構(gòu)建包括三方面的內(nèi)容:①數(shù)據(jù)儲存結(jié)構(gòu);②數(shù)據(jù)操作;③數(shù)據(jù)約束。對于結(jié)構(gòu)化數(shù)據(jù),系統(tǒng)提供基本CRUD操作,對于非結(jié)構(gòu)化數(shù)據(jù),系統(tǒng)提供上傳、下載、刪除以及第三方軟件查看的操作。數(shù)據(jù)約束也就是保證數(shù)據(jù)的唯一性,在 MongoDB 數(shù)據(jù)庫中,每一個記錄都有位移 ID 叫做“_id”,保證數(shù)據(jù)的一一對應(yīng)性。
在對 MongoDB 數(shù)據(jù)庫的部署中,使用了Robomongo 數(shù)據(jù)庫可視化工具。Robomongo是一款開源軟件。提供對數(shù)據(jù)庫鏈接,以及查詢數(shù)據(jù)庫中的db、Collection、Document 以及GridFS 的功能,其可視化的方式分為表格、文件和代碼三種方式。
使用 shell 語句部署MongoDB 數(shù)據(jù)庫流程如下:
(1) 安裝 MongoDB 數(shù)據(jù)庫,并配置環(huán)境變量。
(2) 啟動 mongod 服務(wù)器:mongod --dbpath D:MongoDBDATA;默認將log文件存在同一個文件夾。
(3) 啟動 mongo 服務(wù)器:mongo 127.0.0.1:27017;默認使用 test 數(shù)據(jù)庫。
(4) 使用可視化工具 Robomongo 查看數(shù)據(jù)庫已經(jīng)成功建立。
使用 Java 語言部署數(shù)據(jù)庫:
(1) 安裝 Java 語言 MongoDB 驅(qū)動。
(2) 啟動 mongod 服務(wù)。
(3) 在 eclipse 中建立一個 class 文件,使用 client 關(guān)鍵字啟動 mongo 服務(wù)器:MongoClient client = new MongoClient("localhost" ,27017),默認端口 27017。
MongoDB 在儲存結(jié)構(gòu)化數(shù)據(jù)時,相對于關(guān)系型數(shù)據(jù)庫,其更靈活,由于能夠在文檔中嵌套文檔,使得儲存交互數(shù)據(jù)時十分容易。使用Java語言eclipse工具操作 MongoDB 數(shù)據(jù)庫儲存時,其步驟如下:
① 啟動 mongod 服務(wù),創(chuàng)建新的客戶端,在相應(yīng)的端口下創(chuàng)建數(shù)據(jù)庫,數(shù)據(jù)庫下創(chuàng)建集合,再在集合中創(chuàng)建文檔。
② 構(gòu)建一個 Map 類型的數(shù)據(jù),將要存儲的數(shù)據(jù)利用 put 方法導(dǎo)入 Map 中。
③ 利用 MongoDB 的 Java 驅(qū)動中的 insertOne 方法將 Map 儲存到文檔中。
對于非結(jié)構(gòu)化數(shù)據(jù),MongoDB 數(shù)據(jù)庫采用 GridFS 機制,GridFS 機制默認使用 fs.files 和 fs.chunks 來儲存文件。
利用MongoDB 中 GridFS 存儲文件的步驟是:
① 新建文件輸入流作為文件上傳的“管道”。
② 啟動 mongod 服務(wù),并獲得新的 GridFS。
③ 設(shè)置 fs.files 文件中的配置信息。
④ 利用 MongoDB 中 Java 驅(qū)動的 save()函數(shù)將文件上傳到 MongoDB中。
對結(jié)構(gòu)化數(shù)據(jù)實現(xiàn)增刪改查,需要 MongoDB 的 Java 驅(qū)動,利用該驅(qū)動包完成對 MongoDB 的管理。
插入數(shù)據(jù)功能:
① 啟動 mongod 服務(wù)。
② 新建 Map 對象,填入目標(biāo)數(shù)據(jù)。
③ 利用 insertOne 方法插入數(shù)據(jù)。
對于刪除數(shù)據(jù)功能,MongoDB 中將產(chǎn)出一個文檔,而不是文檔中的一個記錄,在刪除之前,需要一個 BSON 格式的 filter 來尋找相應(yīng)的 Document。
① 啟動 mongod 服務(wù)。
② 新建 BSON 格式的 filter。
③ 利用 deleteOne()方法刪除文檔。
修改文檔是對文檔中的其中一個或者多個記錄進行更新,在更新之前也需要一個 BSON 格式的 filter。其步驟跟刪除操作一樣,只是將其中的 deleteOne()方法改為 updateOne()方法。
查詢數(shù)據(jù)庫時,利用一個 BSON 格式的數(shù)據(jù)作為查詢條件,一般而言,當(dāng)我們查詢數(shù)據(jù)庫時,都會進行遍歷數(shù)據(jù)庫集合的操作。其步驟如下。
① 啟動mongod服務(wù)。
② 構(gòu)建查詢條件。
③ 利用find()方法查詢數(shù)據(jù)庫。
接著要對數(shù)據(jù)庫進行遍歷,其程序框圖如圖2所示。
圖2 查詢數(shù)據(jù)庫的程序流程圖
對于管理非結(jié)構(gòu)化數(shù)據(jù),提供了上傳、查詢、下載、刪除和利用第三方軟件查看的功能。系統(tǒng)中管理的非結(jié)構(gòu)化數(shù)據(jù)包括網(wǎng)頁、PDF 文檔、音頻、圖片還有視頻文件。網(wǎng)頁中包含的大量信息,能夠提取具有極高價值的數(shù)據(jù)。在對網(wǎng)頁進行相關(guān)操作之前,首先要保存一個網(wǎng)頁,利用瀏覽器搜索關(guān)鍵詞“繼電保護”,獲取到關(guān)于繼電保護的網(wǎng)頁,并將網(wǎng)頁保存到本地磁盤。
保存:獲取網(wǎng)頁數(shù)據(jù)之后,將其保存到數(shù)據(jù)庫中,利用對非結(jié)構(gòu)化數(shù)據(jù)保存的功能直接實現(xiàn)對網(wǎng)頁數(shù)據(jù)的保存。
刪除:要對 MongoDB 數(shù)據(jù)庫中的數(shù)據(jù)進行刪除,需要先找到 fs.files 文件中的“_id”。默認情況下,系統(tǒng)為每一個 GridFS 文件分配一個特定 Object 類型的“_id”,用戶也可以自行定義專屬的“_id”,以便對數(shù)據(jù)查找。同時,也可以應(yīng)用文件名進行查找,但是存在風(fēng)險,因為文件名有可能會重復(fù),本系統(tǒng)中采用自定義文件的“_id”,然后再進行查找。操作步驟如下:
① 啟動 mongod 服務(wù)。
② 建立查詢條件,需要一個 DBObject 類型的數(shù)據(jù)。
③ 利用 MongoDB 的 Java 驅(qū)動中的 remove()方法刪除。
查看:對于網(wǎng)頁,需利用 Microsoft 公司的 IE 瀏覽器查看,Java 語言在調(diào)用 Windows 系統(tǒng)的系統(tǒng)工具時,需先獲取到工具在系統(tǒng)中的位置。在獲取到 IE 瀏覽器位置之后,建立一個新的程序進程,專門用來調(diào)用該瀏覽器,并將網(wǎng)頁文件本地盤中的位置傳送給該進程,利用該進程調(diào)用 IE 瀏覽器打開文件。
下載:網(wǎng)頁文件的下載,需要先查詢到相關(guān)的文件,因此首先建立一個檢索條件是必要的,其次,對 MongoDB 中 GridFS 文件的下載需要使用文件輸出流。
具體操作步驟如下:
① 啟動 mongod 服務(wù)。
② 建立索引條件,需要一個 DBObject 類型的數(shù)據(jù)。
③ 新建一個 GridFSDBfile。
④ 利用 MongoDB 的 Java 驅(qū)動中的 findOne()方法查詢到數(shù)據(jù)庫中的GridFS 文件。
⑤ 新建文件輸出流“管道”,為文件輸出提供接口。
⑥ 將 GridFSDBfile 加文件輸出流。
對于音頻、視頻文件,基本的上傳、下載、刪除和查詢操作都跟對網(wǎng)頁操作一樣,不同的地方是在調(diào)用第三方軟件的時候,網(wǎng)頁使用 IE 瀏覽器,而音頻使用音樂播放器,視頻采用視頻播放器。在播放視頻或者音頻時,可以選用直接調(diào)用第三方軟件,也可以使用Java的一個媒體框架JMF。對于圖片和 PDF文件,可以編寫一個獨立的界面來顯示,不需要使用第三方軟件。本系統(tǒng)結(jié)構(gòu)圖如圖3所示。
圖3 基于MongoDB的繼保大數(shù)據(jù)系統(tǒng)結(jié)構(gòu)圖
結(jié)構(gòu)化數(shù)據(jù)管理界面如圖4所示。在管理結(jié)構(gòu)化數(shù)據(jù)時,需要在交互界面上擁有對數(shù)據(jù)庫進行增刪改查的操作,同時要實時的顯示操作過后的結(jié)果,并且對于不同的結(jié)構(gòu)化數(shù)據(jù)要有不同的操作項來區(qū)分。
圖4 交互界面
整個交互界面使用Java 中JFrame 作為框架,標(biāo)題是“基于MongoDB 的大數(shù)據(jù)管理系統(tǒng)設(shè)計”,左側(cè)“結(jié)構(gòu)化數(shù)據(jù)”菜單欄,菜單項包括“發(fā)動機”、“變壓器”、“母線”等繼電保護元件的選項;界面左下側(cè)的“非結(jié)構(gòu)化數(shù)據(jù)”管理欄;界面頂頭的是一個搜索框和搜索按鈕,點擊搜索按鈕以后,系統(tǒng)會按照搜索框中的關(guān)鍵詞對MongoDB 數(shù)據(jù)庫做檢索;界面中心是顯示區(qū);界面右側(cè)是列表進行增加一行數(shù)據(jù)、刪除一行數(shù)據(jù)和修改數(shù)據(jù)進行操作的按鈕和數(shù)據(jù)填入?yún)^(qū)域。
可視化展示就是將界面于底層的數(shù)據(jù)庫之間的操作合二為一,將增刪改查功能變得界面化、可操作化。如圖5所示。
圖5 數(shù)據(jù)可視化界面
此處展示添加操作如圖6所示,右側(cè)輸入?yún)?shù),點擊添加按鈕,在中間列表中顯示添加的數(shù)據(jù)。
圖6 結(jié)構(gòu)化數(shù)據(jù)增加操作界面
此處展示非結(jié)構(gòu)化數(shù)據(jù)中一張圖片的查詢功能。如圖7所示。
圖7 非結(jié)構(gòu)化數(shù)據(jù)查詢操作界面
設(shè)計實現(xiàn)基于MongoDB 的繼電保護大數(shù)據(jù)管理系統(tǒng),設(shè)計繼電保護大數(shù)據(jù)模型,在Windows 上運行的MongoDB 中創(chuàng)建數(shù)據(jù)實體,基于MVC 模式的繼保大數(shù)據(jù)管理系統(tǒng),實現(xiàn)結(jié)構(gòu)化、非結(jié)構(gòu)化繼保大數(shù)據(jù)的管理。此系統(tǒng)利用新型非關(guān)系型數(shù)據(jù)庫MongoDB替代傳統(tǒng)關(guān)系型數(shù)據(jù)庫,有效解決傳統(tǒng)繼電保護大數(shù)據(jù)管理中存儲結(jié)構(gòu)單一的問題,對基于MongoDB數(shù)據(jù)庫做進一步分析和決策奠定基礎(chǔ),對電力系統(tǒng)中除繼電保護以外的其他管理系統(tǒng)也有重要的借鑒意義。