胡秋翔, 崇殿兵, 畢思斯
(南瑞集團(tuán)公司(國網(wǎng)電力科學(xué)研究院),南京 211006)
隨著電網(wǎng)信息化及智能電網(wǎng)的推進(jìn),電網(wǎng)GIS(Geographic Information System)得到了廣泛的應(yīng)用,涵蓋了電網(wǎng)企業(yè)的輸電、變電、配電、調(diào)度、營銷、通信等各個生產(chǎn)環(huán)節(jié)[1-3]. 但是應(yīng)用的推廣和深入使得電網(wǎng)GIS維護(hù)工作量和維護(hù)人員也越來越多,多用戶協(xié)同編輯成為電網(wǎng)GIS數(shù)據(jù)編輯維護(hù)的現(xiàn)實需要[4].目前,電網(wǎng)GIS支持多用戶協(xié)同編輯主要有以下幾種方式:
(1) 分層管理方式,通過集中維護(hù)和細(xì)分文件的形式按照圖層信息將電網(wǎng)資源空間數(shù)據(jù)拆分成多個文件,每個用戶編輯不同的文件,編輯完成后,將所有文件合并成完整的數(shù)據(jù)[5]. 分層管理的改進(jìn)方法主要體現(xiàn)在數(shù)據(jù)劃分方式上,包括將分層管理改進(jìn)為按區(qū)域分塊管理,實現(xiàn)用戶按區(qū)域管理數(shù)據(jù)[6,7]; 顧及拓?fù)潢P(guān)系的空間劃分,盡量避免不同分割單元設(shè)備之間存在拓?fù)潢P(guān)系的情況[8]等.
分層管理及其改進(jìn)方法總體上協(xié)同編輯方式簡便,在拓?fù)潢P(guān)系、編輯場景不復(fù)雜,且用戶數(shù)較少時,能夠滿足協(xié)同編輯需要. 但應(yīng)對當(dāng)前大數(shù)據(jù)量的電網(wǎng)資源空間數(shù)據(jù),以及越來越多的編輯維護(hù)工作和維護(hù)人員,分層管理方式無法維護(hù)不同數(shù)據(jù)塊間設(shè)備的拓?fù)潢P(guān)系,并且不同編輯客戶端數(shù)據(jù)不一致,無法分析.
(2) 空間數(shù)據(jù)庫方式,多個用戶同時編輯數(shù)據(jù)庫中設(shè)備數(shù)據(jù),按照完成的先后順序同步執(zhí)行入庫操作[9].這是當(dāng)前較為常見的一種方式,其改進(jìn)方法有:引入輔助表,存儲設(shè)備的操作序號和空間信息,實現(xiàn)設(shè)備操作日志的管理和操作回滾[10]; 結(jié)合狀態(tài)機(jī)機(jī)制,支持電網(wǎng)資源空間數(shù)據(jù)長事務(wù)編輯需求[11]等.
空間數(shù)據(jù)庫的方式在編輯設(shè)備沒有交集,結(jié)果不會互相影響時效果較好. 但同時編輯一個設(shè)備時,后入庫的結(jié)果會覆蓋之前的結(jié)果,無法確保最終結(jié)果與用戶的操作意愿一致,影響整體數(shù)據(jù)的正確性. 同時缺少數(shù)據(jù)同步,數(shù)據(jù)的一致性和實時性無法得到保障.
(3) 任務(wù)劃分與版本管理方式,將電網(wǎng)GIS編輯工作劃分成不同的子任務(wù),任務(wù)編輯數(shù)據(jù)存儲在任務(wù)對應(yīng)的版本表中,任務(wù)提交時手動合并版本之間的沖突設(shè)備[12],并將版本內(nèi)數(shù)據(jù)存儲到電網(wǎng)資源數(shù)據(jù)庫中,針對編輯沖突的處理,許多學(xué)者提出了優(yōu)化方法:基于版本復(fù)制的版本存儲技術(shù),分離出沖突操作存于子版本進(jìn)行處理,降低沖突處理難度[13]; 將編輯操作封裝成命令消息并采用并發(fā)操作矩陣快速檢測和處理編輯沖突[14].
任務(wù)劃分與版本管理方式能夠有效管理和拆分電網(wǎng)GIS協(xié)同編輯工作,同時版本數(shù)據(jù)提交、編輯沖突手動合并確保了數(shù)據(jù)的一致性和正確性,但考慮到電網(wǎng)GIS數(shù)據(jù)的空間復(fù)雜性和拓?fù)鋸?fù)雜性,沖突結(jié)果的手動合并會非常復(fù)雜[15],對操作人員要求很高,并且容易導(dǎo)致數(shù)據(jù)錯誤. 同時該方法最小的協(xié)同編輯單位是子任務(wù),無法實現(xiàn)多個用戶編輯同一個子任務(wù).
本文針對電網(wǎng)GIS協(xié)同編輯時的數(shù)據(jù)沖突問題和數(shù)據(jù)一致性問題,在上述任務(wù)劃分與版本管理方式基礎(chǔ)上,提出基于鎖定機(jī)制的電網(wǎng)GIS多用戶協(xié)同編輯.通過鎖定機(jī)制管理可能存在編輯沖突的任務(wù)版本內(nèi)數(shù)據(jù)及用戶待編輯數(shù)據(jù),避免編輯沖突的產(chǎn)生和沖突合并操作. 同時,編輯保存后,將編輯數(shù)據(jù)同步到其他客戶端,確保其他客戶端數(shù)據(jù)的一致性和實時性
電網(wǎng)GIS協(xié)同編輯要求建立一個多用戶、并發(fā)管理的協(xié)同工作環(huán)境,傳統(tǒng)的單層或兩層GIS系統(tǒng)結(jié)構(gòu)已經(jīng)難以模擬這種復(fù)雜場景,三層結(jié)構(gòu)已成為GIS協(xié)同編輯的普遍選擇[16]. 圖1是基于鎖定機(jī)制的電網(wǎng)GIS協(xié)同編輯體系結(jié)構(gòu)圖.

圖1 協(xié)同編輯體系結(jié)構(gòu)
圖1中數(shù)據(jù)層提供電網(wǎng)資源數(shù)據(jù),版本數(shù)據(jù),鎖定數(shù)據(jù),配置數(shù)據(jù)等電網(wǎng)GIS中所有數(shù)據(jù)的存儲,管理,索引功能; 服務(wù)層是電網(wǎng)GIS協(xié)同編輯的核心,是表示層與數(shù)據(jù)層的連接橋梁. 通過其提供的電網(wǎng)數(shù)據(jù)服務(wù)和數(shù)據(jù)代理服務(wù),實現(xiàn)表示層與數(shù)據(jù)層之間的數(shù)據(jù)交互. 鎖定服務(wù)和數(shù)據(jù)同步服務(wù)對表示層各個客戶端數(shù)據(jù)編輯行為統(tǒng)一管理,是電網(wǎng)GIS多用戶協(xié)同編輯的調(diào)控中心,也是本文研究的關(guān)鍵之處; 表示層提供用戶操作平臺,是所有數(shù)據(jù)請求和編輯行為的來源.
基于上述體系結(jié)構(gòu),電網(wǎng)GIS協(xié)同編輯流程具體如圖2.
圖2中設(shè)備數(shù)據(jù)鎖定與數(shù)據(jù)同步是整個流程的核心之處. 設(shè)備數(shù)據(jù)鎖定是本文電網(wǎng)GIS協(xié)同編輯的基礎(chǔ),將版本內(nèi)數(shù)據(jù)和待編輯設(shè)備鎖定,能夠避免不同用戶之間的編輯沖突和復(fù)雜的沖突合并操作,提高協(xié)同編輯的可用性; 數(shù)據(jù)同步服務(wù)基于消息路由和消息隊列機(jī)制,通過路由規(guī)則將各個客戶端的變更數(shù)據(jù)信息,加入到對應(yīng)的消息隊列中,其他客戶端訂閱相應(yīng)的消息隊列,同步獲取并顯示變更設(shè)備,實現(xiàn)客戶端與服務(wù)端及其他客戶端的數(shù)據(jù)一致性和實時性. 因此,下文將對數(shù)據(jù)鎖定和數(shù)據(jù)同步進(jìn)一步討論分析.
設(shè)備鎖定分為兩種,一種是用戶編輯前的設(shè)備手動鎖定,具體來說是用戶編輯之前,對可能編輯的設(shè)備預(yù)先鎖定,編輯保存時,再對鎖定的設(shè)備解鎖,確保編輯過程中其他用戶不能編輯這些設(shè)備; 另一種是任務(wù)版本內(nèi)數(shù)據(jù)的自動鎖定,具體來說是用戶編輯結(jié)果保存入任務(wù)版本表時,自動將保存的數(shù)據(jù)鎖定. 任務(wù)提交,數(shù)據(jù)由版本表轉(zhuǎn)存到電網(wǎng)資源表時,自動將對應(yīng)任務(wù)版本的鎖定數(shù)據(jù)解鎖. 自動鎖定不需要用戶手動干預(yù),同時確保任務(wù)提交前,對應(yīng)任務(wù)版本表數(shù)據(jù)不會被其他用戶編輯.

圖2 基于鎖定機(jī)制的協(xié)同編輯流程
為支持設(shè)備數(shù)據(jù)的鎖定,數(shù)據(jù)庫創(chuàng)建鎖定信息表(LockTable),并通過TYPE字段標(biāo)示鎖定類型,服務(wù)端則基于LockTable為客戶端提供鎖定服務(wù),LockTable具體表結(jié)構(gòu)如表1.

表1 鎖定信息表表結(jié)構(gòu)
鎖定服務(wù)包括設(shè)備鎖定檢測(Check),設(shè)備鎖定(Lock),設(shè)備鎖定更新(Update)等部分. Check模塊通過查詢設(shè)備鎖定表,判斷輸入設(shè)備是否已經(jīng)被鎖定,并返回具體的鎖定信息; Lock模塊在Check模塊的基礎(chǔ)上實現(xiàn)客戶端手動的設(shè)備鎖定; Update模塊實現(xiàn)用戶保存或者任務(wù)版本提交時對鎖定表的更新.
假定用戶待鎖定設(shè)備列表為LockDevList,編輯保存時的變更清單為EditList,登錄的版本ID為versionID,上述鎖定服務(wù)的Lock算法(Check算法在Lock算法中已有體現(xiàn))和編輯保存時的Update算法具體描述如表2和表3,版本提交時鎖定表更新即將versionID為提交版本ID的所有鎖定記錄刪除,不再具體描述算法.

表2 Lock算法描述

表3 Update算法描述
用戶進(jìn)入任務(wù)版本編輯數(shù)據(jù)之前,需要手動鎖定待編輯設(shè)備,之后的編輯操作只能針對已鎖定的設(shè)備.通過上述Check算法可知,待鎖定設(shè)備可能被其他用戶或者版本鎖定使得當(dāng)前鎖定操作失敗即鎖定沖突.鎖定沖突具體有以下幾種場景:
(1) 兩個或多個任務(wù)版本確實需要編輯同一設(shè)備,而設(shè)備已被其他版本鎖定.
(2) 其他用戶鎖定設(shè)備范圍過大,已經(jīng)鎖定當(dāng)前用戶需要鎖定的部分設(shè)備;
(3) 當(dāng)前用戶待鎖定設(shè)備范圍過大,包含了其他用戶或任務(wù)已經(jīng)鎖定的設(shè)備;
場景(1)中鎖定沖突由設(shè)備編輯維護(hù)業(yè)務(wù)決定,只能通過對編輯維護(hù)業(yè)務(wù)的調(diào)整和優(yōu)化來減少和避免;場景(2)和場景(3)都是鎖定設(shè)備范圍過大所致,因此,待鎖定設(shè)備的選擇是設(shè)備手動鎖定的關(guān)鍵. 待鎖定設(shè)備應(yīng)趨近滿足用戶編輯維護(hù)需要的最小設(shè)備集合. 待鎖定設(shè)備越少,鎖定沖突的概率越小,同時也減少后續(xù)用戶鎖定沖突的可能.
基于此,兼顧電網(wǎng)GIS中設(shè)備數(shù)據(jù)編輯特點,本文提出了3種手動鎖定操作:
(1) 站房鎖定. 站房內(nèi)設(shè)備是一個相對獨(dú)立的數(shù)據(jù),站內(nèi)設(shè)備編輯通常只涉及一個站房,并且一個站房通常由一個用戶管理,站房鎖定即按照用戶選擇的站房將所屬站內(nèi)設(shè)備鎖定,這種方式能夠快速有效的支持站內(nèi)設(shè)備的協(xié)同編輯;
(2) 分段饋線鎖定. 與站內(nèi)設(shè)備相似,饋線及其所屬設(shè)備是電網(wǎng)GIS中站外設(shè)備中相對獨(dú)立的數(shù)據(jù),也是站外設(shè)備編輯維護(hù)的主體,而整條饋線的空間數(shù)據(jù)范圍數(shù)據(jù)量較大,需要多個用戶同時維護(hù),因此本文提出分段饋線鎖定方式,用戶選擇饋線上起點和終點設(shè)備,根據(jù)電網(wǎng)拓?fù)浞治?找出區(qū)間所有設(shè)備執(zhí)行鎖定操作;
(3) 選中設(shè)備鎖定:對用戶選中一個或多個設(shè)備執(zhí)行鎖定操作. 選中設(shè)備鎖定是一種更廣泛的鎖定操作,能鎖定任意一個或多個沒有被鎖定過的設(shè)備,是上述兩種設(shè)備鎖定方式的有益補(bǔ)充.
設(shè)備鎖定沖突時,用戶需要等待其他用戶解除鎖定或者根據(jù)返回的沖突設(shè)備信息重新選擇待鎖定設(shè)備(LockDevList),將沖突設(shè)備排查在LockDevList之外.同時,用戶編輯維護(hù)過程還可以繼續(xù)補(bǔ)充鎖定,具體編輯鎖定流程如圖3.
數(shù)據(jù)同步服務(wù)獲取各個客戶端的變更數(shù)據(jù)和變更數(shù)據(jù)標(biāo)示信息(Key值),消息路由通過Key值和路由規(guī)則,將之加入到對應(yīng)的消息隊列中,其他客戶端獲取訂閱消息隊列中的變更設(shè)備,并更新顯示,實現(xiàn)客戶端之間數(shù)據(jù)的一致性和實時性. 具體數(shù)據(jù)同步機(jī)制如圖4.
由上可知,數(shù)據(jù)同步機(jī)制分為發(fā)送端、數(shù)據(jù)同步服務(wù)和接收端,其核心是數(shù)據(jù)同步服務(wù). 數(shù)據(jù)同步服務(wù)包括Exchange(交換機(jī)),Queue(消息隊列)兩個部分,具體過程是:
(1) 客戶端A、B將獲取的變更設(shè)備DevList和更變更數(shù)據(jù)標(biāo)示信息Key根據(jù)交換機(jī)負(fù)載情況發(fā)送給交換機(jī)Exchange1或者Exchange2;
(2) 交換機(jī)基于路由規(guī)則對Key和消息隊列Queue進(jìn)行模式匹配,將DevList發(fā)送給匹配的Queue;
(3) Queue將DevList加入隊列中,并將隊列中的DevList順序逐個發(fā)送給訂閱的客戶端.
本文基于電網(wǎng)GIS數(shù)據(jù)以地市為單位管理維護(hù)的特點,將用戶的所屬地市ID和當(dāng)前編輯設(shè)備的信息作為Key值,如用戶A的所屬地市ID為“Nanjing”,當(dāng)前編輯設(shè)備列表為a,b,c,d,則數(shù)據(jù)同步的Key值為“Nanjingabcd”. 同時消息隊列也使用地市名稱作為名稱,如“NanJing” Queue,“Zhenjiang” Queue.
路由規(guī)則是根據(jù)Key值和Queue的名稱進(jìn)行全字符匹配,若Key值中包含了Queue名稱的字符,則匹配成功,否則匹配失敗. 匹配成功時將變更設(shè)備列表DevList投入到相應(yīng)的Queue中. 即用戶A的DevList_A 投入到“Nanjing” Queue 中.
根據(jù)用戶所屬地市ID,在客戶端登陸時訂閱相應(yīng)的Queue. 所屬地市為“Nanjing”的用戶在客戶端登陸時都訂閱“Nanjing” Queue. 當(dāng) Queue 不為空時,順序?qū)⑵渲写鎯Φ腄evList發(fā)送給訂閱的客戶端. 即“Nanjing”Queue中存儲的DevList_A發(fā)送給訂閱的客戶端,因此,同屬“Nanjing”的其他客戶端都能獲取A用戶的變更設(shè)備DevList_A,實現(xiàn)數(shù)據(jù)同步.
結(jié)合上述研究,在“配網(wǎng)應(yīng)用系統(tǒng)與地理信息系統(tǒng)深度融合應(yīng)用” 項目開發(fā)過程中實現(xiàn)了基于鎖定機(jī)制的電網(wǎng)GIS協(xié)同編輯,并滿足了項目對協(xié)同編輯工作的需求.
原型系統(tǒng)協(xié)同編輯過程如圖5至圖7. 假定用戶A和B登陸同一任務(wù),分別編輯區(qū)域內(nèi)的站內(nèi)和站外設(shè)備. A、B用戶分別對站內(nèi)設(shè)備和站外部分饋線設(shè)備進(jìn)行鎖定,圖5中高亮部分為B用戶鎖定設(shè)備,左側(cè)為鎖定設(shè)備列表; 鎖定完成后同時編輯設(shè)備,A用戶在站內(nèi)添加一個間隔,B用戶移動一個柱上變壓器,如圖6所示; 保存時,A先保存,結(jié)果同步到B客戶端,如圖7所示; B再進(jìn)行保存,結(jié)果同步到A客戶端. 至此,完成整個協(xié)同編輯過程.

圖5 B用戶鎖定設(shè)備及對應(yīng)設(shè)備列表

圖6 A、B用戶分別編輯設(shè)備

圖7 數(shù)據(jù)同步
電網(wǎng)GIS多用戶協(xié)同編輯是當(dāng)前電網(wǎng)GIS應(yīng)用中的現(xiàn)實需求,本文提出的基于鎖定機(jī)制的電網(wǎng)GIS多用戶協(xié)同編輯實現(xiàn)了電網(wǎng)GIS多用戶之間的協(xié)同工作,并在協(xié)同編輯流程、客戶端數(shù)據(jù)一致性等方面進(jìn)行了優(yōu)化和完善. 具體優(yōu)點如下:
(1) 基于鎖定機(jī)制的協(xié)同編輯流程滿足不同任務(wù)之間以及同一任務(wù)不同用戶之間的協(xié)同工作;
(2) 通過鎖定機(jī)制規(guī)避了設(shè)備編輯沖突,避免了復(fù)雜的沖突合并操作;
(3) 基于消息隊列和發(fā)布訂閱方式的數(shù)據(jù)同步實現(xiàn)了不同客戶端的數(shù)據(jù)一致性和實時性.
本文通過鎖定機(jī)制規(guī)避了設(shè)備編輯沖突,但是針對用戶鎖定設(shè)備過多,任務(wù)版本內(nèi)數(shù)據(jù)鎖定時間過長,以及誤操作鎖定了其他用戶責(zé)任范圍數(shù)據(jù)導(dǎo)致其他用戶無法鎖定的情況,本文未做詳細(xì)討論. 今后作者也將進(jìn)一步分析研究用戶鎖定范圍權(quán)限及鎖定時間權(quán)限等問題.
1 史興華. 電網(wǎng)GIS及其應(yīng)用. 北京:中國電力出版社,2010.
2 林峰,郭寶,錢蔚. 面向公共電網(wǎng)GIS平臺的電網(wǎng)地理圖形應(yīng)用架構(gòu). 電力系統(tǒng)自動化,2011,35(24):63-67.
3 馮丹,譚術(shù),王果. GIS技術(shù)在配網(wǎng)管理中的應(yīng)用. 四川電力技術(shù),2003,26(4):55-57.
4 弓帥. 電力GIS平臺空間數(shù)據(jù)管理系統(tǒng)[碩士學(xué)位論文].北京:華北電力大學(xué)(北京),2011.
5 李寧. 供電企業(yè)配電AM/FM/GIS系統(tǒng)常見問題探討. 電力系統(tǒng)及其自動化學(xué)報,2002,14(2):53-55.
6 沈陳華. 城鄉(xiāng)一體化地籍管理信息系統(tǒng)數(shù)據(jù)組織研究. 遙感信息,2006,(4):67-69.
7 邵志舉. 網(wǎng)格地理信息數(shù)據(jù)庫研究和應(yīng)用仿真. 計算機(jī)仿真,2008,25(11):124-128. [doi:10.3969/j.issn.1006-9348.2008.11.035]
8 劉英,張曙光. 基于多維粒度樹的GIS空間數(shù)據(jù)并發(fā)控制.計算機(jī)工程,2006,32(7):55-57.
9 曹剛. 電網(wǎng)線路管理地理信息系統(tǒng)的設(shè)計與實現(xiàn)[碩士學(xué)位論文]. 成都:電子科技大學(xué),2012.
10 劉會俠,龔健雅,劉華,等. 一種新的基于空間數(shù)據(jù)庫的空間數(shù)據(jù)編輯處理方法. 測繪信息與工程,2005,30(5):29-30.
11 陳波,周順平,萬波,等. GIS中長事務(wù)模型. 地球科學(xué)-中國地質(zhì)大學(xué)學(xué)報,2006,31(5):605-608.
12 周馳,郭寶,王沈亮,等. 生產(chǎn)管理系統(tǒng)與電網(wǎng)GIS平臺集成應(yīng)用分析. 電力信息化,2011,9(2):102-106.
13 朱鳴,竇萬峰. 協(xié)同圖形編輯系統(tǒng)中改進(jìn)的多版本技術(shù). 小型微型計算機(jī)系統(tǒng),2007,28(7):1318-1321.
14 吳娟. 地理要素的并發(fā)編輯研究[碩士學(xué)位論文]. 南京:南京師范大學(xué),2008.
15 韓小妹. 實時協(xié)同GIS中并發(fā)控制模型研究[碩士學(xué)位論文]. 徐州:中國礦業(yè)大學(xué),2015.
16 李偉,劉仁義,劉南. 基于任務(wù)劃分和多版本技術(shù)的GIS空間數(shù)據(jù)協(xié)同處理研究. 浙江大學(xué)學(xué)報(理學(xué)版),2005,32(4):475-480.