段淑萍,王曉麗
(甘肅機電職業技術學院,甘肅 天水 741001)
隨著繼電保護的不斷發展和數據的日益復雜化,數據的存儲和管理方式也發生了很大的變化,在伸縮性和可用性上有了更高的要求,傳統的數據管理面臨著各種壓力和挑戰。繼電保護大數據具有大數據的普遍特性,其特征可以概括為5 個V(Volume、Variety、Velocity、Veracity 和Value)。即數量大、數據類型多、處理速度要求快、數據準確性要求高、價值密度低。在目前的繼電保護數據存儲系統中,一般都是使用傳統的關系型數據庫儲存,隨著需要管理的數據向大數據演進,這些系統在滿足對空間的利用率、海量數據存儲支持和數據高可靠性等方面的需求時己經顯得越來越無能為力,在應對云存儲技術和云計算技術等方面也表現出很多難以克服的問題。在此背景之下,MongoDB 作為NoSQL 中的佼佼者,得以在繼電保護大數據管理領域中大展拳腳,得到了越來越多的應用。
繼電保護是電力系統中最重要的組成部分之一,承擔著切除故障和反映電力設備不正常運行狀態的任務,起著保護電力系統安全穩定運行的作用。隨著國家電力行業的迅猛發展,電網容量、電廠裝機容量逐年增加,電網運行方式日益復雜,對繼電保護可靠性、選擇性、靈敏性和速動性的要求越來越高。繼電保護裝置從電磁式繼電器保護、晶體管保護、集成電路保護發展到今天的微機保護,保護裝置的可靠性已經非常高,因裝置故障發生保護誤動、拒動的情況已經很少。如果所有電廠建立起完善的繼電保護綜合管理系統,解決目前的管理短板,將能提高本單位的設備運行水平,減少設備故障率并提高電網安全穩定運行周期。
筆者通過對繼電保護大數據管理系統需求進行分析、大數據模型構建和管理系統實現,得出一套可用于繼電保護大數據增刪改查(CRUD)的管理模型,達到對結構化、半結構化和非結構化繼電保護大數據的管理,解決傳統數據管理系統存儲結構單一問題。
繼電保護大數據管理系統需要對電力系統和元件測量的數據以及供電單位產生的用戶數據,包括結構性數據功率、電壓、電流等以及非結構化數據網頁、音頻、視頻和圖片的儲存。其內容主要包含四個模塊:數據采集模塊、數據儲存模塊、數據處理模塊和數據應用模塊。如圖1所示。

圖1 繼保大數據管理系統原理圖
數據采集模塊:該模塊的功能主要是收集繼電保護大數據,并將大數據傳輸到數據儲存模塊。
數據儲存模塊:該模塊利用NoSQL 數據庫將繼電保護大數據儲存為結構化、半結構化甚至非結構化的數據格式。
數據處理模塊:該模塊是繼電保護大數據管理系統的核心,該模塊完成與數據儲存模塊的交互,利用基于Linux 操作系統的Hadoop構架,對數據進行計算,得出結論。
數據應用模塊:接收來自數據處理模塊的處理分析結果,對電力系統繼電保護裝置發出動作。有故障時,自動、迅速、有選擇地將故障元件從電力系統中切除,使故障元件免于繼續遭到破壞,保證其它無故障部分迅速恢復正常運行;當電力系統無故障時,確保繼電保護裝置不動作。
數據模型的構建包括三方面的內容:①數據儲存結構;②數據操作;③數據約束。對于結構化數據,系統提供基本CRUD操作,對于非結構化數據,系統提供上傳、下載、刪除以及第三方軟件查看的操作。數據約束也就是保證數據的唯一性,在 MongoDB 數據庫中,每一個記錄都有位移 ID 叫做“_id”,保證數據的一一對應性。
在對 MongoDB 數據庫的部署中,使用了Robomongo 數據庫可視化工具。Robomongo是一款開源軟件。提供對數據庫鏈接,以及查詢數據庫中的db、Collection、Document 以及GridFS 的功能,其可視化的方式分為表格、文件和代碼三種方式。
使用 shell 語句部署MongoDB 數據庫流程如下:
(1) 安裝 MongoDB 數據庫,并配置環境變量。
(2) 啟動 mongod 服務器:mongod --dbpath D:MongoDBDATA;默認將log文件存在同一個文件夾。
(3) 啟動 mongo 服務器:mongo 127.0.0.1:27017;默認使用 test 數據庫。
(4) 使用可視化工具 Robomongo 查看數據庫已經成功建立。
使用 Java 語言部署數據庫:
(1) 安裝 Java 語言 MongoDB 驅動。
(2) 啟動 mongod 服務。
(3) 在 eclipse 中建立一個 class 文件,使用 client 關鍵字啟動 mongo 服務器:MongoClient client = new MongoClient("localhost" ,27017),默認端口 27017。
MongoDB 在儲存結構化數據時,相對于關系型數據庫,其更靈活,由于能夠在文檔中嵌套文檔,使得儲存交互數據時十分容易。使用Java語言eclipse工具操作 MongoDB 數據庫儲存時,其步驟如下:
① 啟動 mongod 服務,創建新的客戶端,在相應的端口下創建數據庫,數據庫下創建集合,再在集合中創建文檔。
② 構建一個 Map 類型的數據,將要存儲的數據利用 put 方法導入 Map 中。
③ 利用 MongoDB 的 Java 驅動中的 insertOne 方法將 Map 儲存到文檔中。
對于非結構化數據,MongoDB 數據庫采用 GridFS 機制,GridFS 機制默認使用 fs.files 和 fs.chunks 來儲存文件。
利用MongoDB 中 GridFS 存儲文件的步驟是:
① 新建文件輸入流作為文件上傳的“管道”。
② 啟動 mongod 服務,并獲得新的 GridFS。
③ 設置 fs.files 文件中的配置信息。
④ 利用 MongoDB 中 Java 驅動的 save()函數將文件上傳到 MongoDB中。
對結構化數據實現增刪改查,需要 MongoDB 的 Java 驅動,利用該驅動包完成對 MongoDB 的管理。
插入數據功能:
① 啟動 mongod 服務。
② 新建 Map 對象,填入目標數據。
③ 利用 insertOne 方法插入數據。
對于刪除數據功能,MongoDB 中將產出一個文檔,而不是文檔中的一個記錄,在刪除之前,需要一個 BSON 格式的 filter 來尋找相應的 Document。
① 啟動 mongod 服務。
② 新建 BSON 格式的 filter。
③ 利用 deleteOne()方法刪除文檔。
修改文檔是對文檔中的其中一個或者多個記錄進行更新,在更新之前也需要一個 BSON 格式的 filter。其步驟跟刪除操作一樣,只是將其中的 deleteOne()方法改為 updateOne()方法。
查詢數據庫時,利用一個 BSON 格式的數據作為查詢條件,一般而言,當我們查詢數據庫時,都會進行遍歷數據庫集合的操作。其步驟如下。
① 啟動mongod服務。
② 構建查詢條件。
③ 利用find()方法查詢數據庫。
接著要對數據庫進行遍歷,其程序框圖如圖2所示。

圖2 查詢數據庫的程序流程圖
對于管理非結構化數據,提供了上傳、查詢、下載、刪除和利用第三方軟件查看的功能。系統中管理的非結構化數據包括網頁、PDF 文檔、音頻、圖片還有視頻文件。網頁中包含的大量信息,能夠提取具有極高價值的數據。在對網頁進行相關操作之前,首先要保存一個網頁,利用瀏覽器搜索關鍵詞“繼電保護”,獲取到關于繼電保護的網頁,并將網頁保存到本地磁盤。
保存:獲取網頁數據之后,將其保存到數據庫中,利用對非結構化數據保存的功能直接實現對網頁數據的保存。
刪除:要對 MongoDB 數據庫中的數據進行刪除,需要先找到 fs.files 文件中的“_id”。默認情況下,系統為每一個 GridFS 文件分配一個特定 Object 類型的“_id”,用戶也可以自行定義專屬的“_id”,以便對數據查找。同時,也可以應用文件名進行查找,但是存在風險,因為文件名有可能會重復,本系統中采用自定義文件的“_id”,然后再進行查找。操作步驟如下:
① 啟動 mongod 服務。
② 建立查詢條件,需要一個 DBObject 類型的數據。
③ 利用 MongoDB 的 Java 驅動中的 remove()方法刪除。
查看:對于網頁,需利用 Microsoft 公司的 IE 瀏覽器查看,Java 語言在調用 Windows 系統的系統工具時,需先獲取到工具在系統中的位置。在獲取到 IE 瀏覽器位置之后,建立一個新的程序進程,專門用來調用該瀏覽器,并將網頁文件本地盤中的位置傳送給該進程,利用該進程調用 IE 瀏覽器打開文件。
下載:網頁文件的下載,需要先查詢到相關的文件,因此首先建立一個檢索條件是必要的,其次,對 MongoDB 中 GridFS 文件的下載需要使用文件輸出流。
具體操作步驟如下:
① 啟動 mongod 服務。
② 建立索引條件,需要一個 DBObject 類型的數據。
③ 新建一個 GridFSDBfile。
④ 利用 MongoDB 的 Java 驅動中的 findOne()方法查詢到數據庫中的GridFS 文件。
⑤ 新建文件輸出流“管道”,為文件輸出提供接口。
⑥ 將 GridFSDBfile 加文件輸出流。
對于音頻、視頻文件,基本的上傳、下載、刪除和查詢操作都跟對網頁操作一樣,不同的地方是在調用第三方軟件的時候,網頁使用 IE 瀏覽器,而音頻使用音樂播放器,視頻采用視頻播放器。在播放視頻或者音頻時,可以選用直接調用第三方軟件,也可以使用Java的一個媒體框架JMF。對于圖片和 PDF文件,可以編寫一個獨立的界面來顯示,不需要使用第三方軟件。本系統結構圖如圖3所示。

圖3 基于MongoDB的繼保大數據系統結構圖
結構化數據管理界面如圖4所示。在管理結構化數據時,需要在交互界面上擁有對數據庫進行增刪改查的操作,同時要實時的顯示操作過后的結果,并且對于不同的結構化數據要有不同的操作項來區分。

圖4 交互界面
整個交互界面使用Java 中JFrame 作為框架,標題是“基于MongoDB 的大數據管理系統設計”,左側“結構化數據”菜單欄,菜單項包括“發動機”、“變壓器”、“母線”等繼電保護元件的選項;界面左下側的“非結構化數據”管理欄;界面頂頭的是一個搜索框和搜索按鈕,點擊搜索按鈕以后,系統會按照搜索框中的關鍵詞對MongoDB 數據庫做檢索;界面中心是顯示區;界面右側是列表進行增加一行數據、刪除一行數據和修改數據進行操作的按鈕和數據填入區域。
可視化展示就是將界面于底層的數據庫之間的操作合二為一,將增刪改查功能變得界面化、可操作化。如圖5所示。

圖5 數據可視化界面
此處展示添加操作如圖6所示,右側輸入參數,點擊添加按鈕,在中間列表中顯示添加的數據。

圖6 結構化數據增加操作界面
此處展示非結構化數據中一張圖片的查詢功能。如圖7所示。

圖7 非結構化數據查詢操作界面
設計實現基于MongoDB 的繼電保護大數據管理系統,設計繼電保護大數據模型,在Windows 上運行的MongoDB 中創建數據實體,基于MVC 模式的繼保大數據管理系統,實現結構化、非結構化繼保大數據的管理。此系統利用新型非關系型數據庫MongoDB替代傳統關系型數據庫,有效解決傳統繼電保護大數據管理中存儲結構單一的問題,對基于MongoDB數據庫做進一步分析和決策奠定基礎,對電力系統中除繼電保護以外的其他管理系統也有重要的借鑒意義。