李安琪,張 勇,孫玉潔,張聰姍
(北方自動控制技術研究所, 太原 030000)
隨著武器裝備信息化的發(fā)展,防空指控系統(tǒng)軟件的功能越來越多,規(guī)模越來越大,結構越來越復雜,導致用戶掌握其使用方法的難度日益增加,所以可用、好用的操作幫助就顯得越來越重要。由于防空指控系統(tǒng)各個插件之間的聯(lián)系和交互較多,本質(zhì)上來講,幫助信息不是以模塊為單位相互獨立的,各個模塊的幫助信息之間存在復雜的關系,所以指控軟件的幫助信息是一種帶“關系”的數(shù)據(jù)[1]。
目前,防空指控系統(tǒng)的數(shù)據(jù)通常采用關系型數(shù)據(jù)庫(RDS)進行存儲,關系型數(shù)據(jù)庫技術成熟,為軍用防空指控系統(tǒng)的數(shù)據(jù)存儲和查詢提供了便利,但是關系型數(shù)據(jù)庫在存貯帶“關系”的數(shù)據(jù)時,日益暴露出很多問題。關系型數(shù)據(jù)庫在建立對象之間的多重關系時會產(chǎn)生復雜的Join語句,而且關系型數(shù)據(jù)庫在查詢到三級以上關系節(jié)點時,查詢時間就會明顯增加,隨著關系層次的遞增,查詢效率會明顯降低。所以從2013年起,關系型數(shù)據(jù)庫開始逐漸弱化,圖數(shù)據(jù)庫的應用變得日益廣泛。由于防空指控軟件幫助信息的“關系”特性,考慮使用圖數(shù)據(jù)庫來進行存儲這類帶有復雜關系的信息的存儲[2]。
圖數(shù)據(jù)庫以圖理論為基礎,采用【節(jié)點】、【關系】、【屬性】來表達數(shù)據(jù)之間的關系和數(shù)據(jù)的其他屬性信息,圖數(shù)據(jù)庫結構如圖1所示,每一個節(jié)點、每一條關系都有可以附有屬性,屬性是可變的。
圖1 圖數(shù)據(jù)庫
圖形數(shù)據(jù)庫數(shù)據(jù)采用“遍歷”作為檢索的一個基本操作,是圖形模型中所特有的。圖遍歷是局域化的,遍歷查詢數(shù)據(jù)時僅僅用到所必需的數(shù)據(jù),不受總數(shù)據(jù)集大小的影響,隨著遍歷深度的變化,當返回的節(jié)點數(shù)保持不變時,查詢性能僅有輕微的降低。關系數(shù)據(jù)庫的Join操作計算笛卡兒積并丟棄不相關的結果,隨著數(shù)據(jù)集的增大,將按指數(shù)變化影響其性能。然而圖數(shù)據(jù)庫遍歷只訪問與遍歷相關的節(jié)點,所以能夠保持期待的性能。要遍歷訪問的節(jié)點越多,遍歷就會越慢,但是這種變慢是線性的,而且仍然不受總圖形大小的影響[6-7]。
Neo4j是圖數(shù)據(jù)庫中應用較為成熟、技術較為領先的一種。Neo4j專門為數(shù)據(jù)關系而設計,具有模型維護容易、查詢簡單、占用資源小、性能高等優(yōu)點。單機版的Neo4j支持存儲10億條關系,對一般企業(yè)來說足夠使用;網(wǎng)絡版Neo4j支持分布式數(shù)據(jù)存儲。Neo4j支持CSV文件導入,也支持導出CSV格式文件。Neo4j的數(shù)據(jù)遷移方法比較簡單,只需要把data文件夾拷貝到新的環(huán)境即可,數(shù)據(jù)遷移受版本影響小。所以在防空指控軟件中,對于涉及存在復雜關系的數(shù)據(jù)可以考慮通過圖數(shù)據(jù)庫進行存儲,對于一般的傳統(tǒng)數(shù)據(jù)依舊采用關系型數(shù)據(jù)庫。
從用戶學習的角度考慮,將防空指控幫助信息的大致分為以下3類,如圖2所示。
圖2 防空指控軟件幫助信息分類
在用戶嘗試使用一個新的指控軟件的時候,總是希望先有一個簡要有效的流程來快速入門,解決如何用起來的問題??焖俚牧鞒淌紫刃枰啙嵜髁?,對操作的提示要盡可能結合界面,讓用戶一目了然。而業(yè)務的流程在需求提出之時就是相對確定的,細節(jié)或許會有調(diào)整,但整體思路大致是不變的,所以即使界面日后有所調(diào)整,主題流程性的幫助仍是可用的。
隨著對軟件的熟悉,用戶可能會對軟件操作的細節(jié)產(chǎn)生興趣,會希望知道更多隱含內(nèi)容,比如是否有隱含的快捷操作或隱藏的小功能,以此來解決軟件還能為用戶提供哪些功能的問題。這個時候幫助信息就需要提供類似用戶手冊一樣詳細但力求簡潔的內(nèi)容,這就需要對用戶手冊或提供的文本文檔內(nèi)容進行有效的抽取,只反饋給用戶關鍵有用的信息。由于長時間地翻閱和組織散落的用戶手冊信息對用戶來說無疑是額外增加的工作,往往由于這項工作過分地費時費力,導致很多用戶不愿意去閱讀用戶手冊,用戶手冊的使用率毫無疑問會降低,也很難起到預期幫助用戶學習的作用。
由于指控軟件插件之間的交互頻繁、使用環(huán)境配置的不同等各種原因造成的軟件報錯崩潰,用戶希望可以自己先進行排查和解決,所以常見故障的排查、報錯內(nèi)容的查看、問題的定位信息也是用戶需要的。隨著用戶使用時間的增長,這些信息是需要更新的,考慮到用戶使用軟件產(chǎn)品的地域局限性,常見問題的解決方法信息可交給用戶進行維護,用戶可以根據(jù)經(jīng)驗更具經(jīng)驗添加問題的解決方法,互相分享,與開發(fā)人員一起豐富故障解決方法的問題庫,提高自學習的效率
為實現(xiàn)防空指控幫助信息在圖數(shù)據(jù)庫Neo4j中的存儲,配置如下環(huán)境:Windows10操作系統(tǒng),JDK1.8.0,Neo4j3.3.5單機版嵌入式安裝,火狐瀏覽器,IDEA2018.1.2。由于防空指控軟件操作較多,短期無法全部覆蓋,本文以部分操作為例進行演示驗證。
將防空指控軟件中包含的具體操作關鍵名稱按照合成、防空、操作、文書、常見問題等類型進行劃分,即劃分為HC、FK、OP、WS、CJ等類型的Lable,如表1所示。
不同類型的Label,顏色不同。Neo4j提供七種顏色、五種尺寸的不同選擇,由思維導圖的相關經(jīng)驗可知,節(jié)點顏色、大小、形態(tài)的區(qū)分有助于提高用戶對信息的記憶。在創(chuàng)建結點的同時寫入節(jié)點相關屬性,如節(jié)點的細節(jié)詳情、操作的含義等,酌情附上image屬性,image屬性可以在節(jié)點可視化的時候,為節(jié)點添加防空某信息系統(tǒng)使用時具體出現(xiàn)的界面情景圖片,或者為操作性質(zhì)的節(jié)點直接以用戶熟悉的圖形顯示,避免了文字闡述的繁瑣,簡化可視化界面。這樣用戶可以很輕松的找到操作的位置和方法,更加直觀、有效地起到幫助用戶學習的作用。
表1 類型和Label
所有的節(jié)點通過有向的Relation進行連接,Relation的方向可以是單向或雙向的,從而數(shù)據(jù)庫中的數(shù)據(jù)之間可以形成一張有向圖。通過不同Property進行Relation類型的區(qū)分,Node和Relation都是可以不斷擴展的,每發(fā)現(xiàn)新的一條Relation都可以進行添加,Neo4j支持一條連續(xù)語句寫入多重關系,數(shù)據(jù)庫更新方便。所有的Node和Relation的屬性和返回給用戶的信息都統(tǒng)一采用中文表示,增加可讀性[3]。
對于常用的操作,考慮將相近或者頻繁使用的操作整整合成一個新的、通用的節(jié)點來進行統(tǒng)一表示,以此來簡化節(jié)點的類型,避免大量類似節(jié)點重復出現(xiàn),使“網(wǎng)”的關系和走向更加清晰,簡化界面。
圖數(shù)據(jù)庫中每個節(jié)點自帶的ID都是唯一的,這個ID是系統(tǒng)定義的,無法修改,且對用戶來說是不可見的,所以在寫入數(shù)據(jù)的時候需要約定節(jié)點一個可見的、可修改的屬性(Title屬性)作為區(qū)分節(jié)點的唯一屬性[4]。由于數(shù)據(jù)庫本身對節(jié)點唯一性的識別是通過系統(tǒng)自帶ID來判斷的,每新建一個節(jié)點,系統(tǒng)都會給它分配一個新的系統(tǒng)ID,所以相同Label下、相同Title的節(jié)點可以是兩個節(jié)點,因此在數(shù)據(jù)庫組織的時候要注意Title屬性字符的唯一性;同時在寫入數(shù)據(jù)庫的時候盡量避免不同Label下相同Title節(jié)點的出現(xiàn),其實就算有這樣的情況出現(xiàn)也不會對用戶的可讀性產(chǎn)生太大的影響,因為不同Label節(jié)點的顏色是進行區(qū)分的,對用戶來說,顏色的不同直觀反映了節(jié)點類型的不同。為了提高檢索速度,可以選擇根據(jù)檢索要求,選擇一個屬性作為索引,本文采用Title屬性組織索引。
下面是建立索引的部分Cypher:
CREATE INDEX ON:HC(Title)
CREATE INDEX ON:FK(Title)
CREATE INDEX ON:WS(Title)
?
Neo4j數(shù)據(jù)庫采用Cypher語言進行寫入、查詢、修改等一系列對數(shù)據(jù)庫的操作。Cypher是已測試的、處理圖數(shù)據(jù)庫效率最高的查詢語言,具有較高的可讀性和可維護性,能夠被高效地開發(fā)使用,而且Cypher語言沒有JOIN語句,在查詢節(jié)點關系時不需要進行復雜的多重JOIN,Cypher語言在寫入屬性的時候也不需要聲明屬性類型,可以進行自動類型匹配,語法靈活簡單[5]。
按不同類型的label寫入節(jié)點的部分Cypher如下:
CREATE (作戰(zhàn)信息系統(tǒng):HC{title:“作戰(zhàn)信息系統(tǒng)”})
CREATE (導入計劃:OP{title:“導入計劃”}),(編輯計劃:OP{title:“編輯計劃”}),(導出計劃:OP{title:“導出計劃”}),(發(fā)送計劃:OP{title:“發(fā)送計劃”})……
給節(jié)點創(chuàng)建關系的部分Cypher如下:
CREATE (防空兵力部署)-[:下一步]->(切換地圖標繪),(通信裝備)-[:操作1]->(選中軍標右鍵),(通信裝備)-[:操作2]->(通信情況分析) ……
部分防空指控幫助信息寫入Neo4j效果圖如圖3。
圖3 部分防空指控幫助信息寫入Neo4j效果圖
要將圖數(shù)據(jù)庫查詢結果結合用戶界面返回給用戶,需要采用可視化框架對查詢結果進行可視化展現(xiàn)。Neo4j自帶的Browser采用D3.js框架來進行可視化,因此本文也選擇了D3.js框架。
由于Java不支持調(diào)用Rest接口的命令語法,所以不方便直接通過Rest接口訪問數(shù)據(jù)庫[7]。如果要將數(shù)據(jù)庫查詢的結果和用戶界面層結合進行可視化,要先通過Java API執(zhí)行Cypher查詢語句,再把查詢結果拼接成JSON格式,產(chǎn)生JSON文件,使用插件對JSON文件進行解析,再由D3.js使用這些解析的信息進行網(wǎng)頁形式的可視化[8],D3.js可視化流程如圖4所示。
下面是對JSON格式的說明:
{“nodes”:[{title:“防空計劃”,label:“FK”,id:1},{name:“導入計劃”,label:“OP”,id:2},{name:“刪除計劃”,label:“HC”,id:3}],
“l(fā)inks”:[{source:1,target:2,type:“操作1”,},{source:1,target:3,type:“操作2”}]…
JSON格式分為nodes和links兩部分,nodes需要name、label和id,links則需要source、target和type。node中的ID指的是節(jié)點的系統(tǒng)ID,link中source和target后面的值指的是nodes里的ID值,links即為節(jié)點間的關系,它表示從source(x)到target(y)的關系是type(string)[9]。
JSON標準格式里需要的值都是從寫入的數(shù)據(jù)庫中讀取的,需要注意的是,在格式轉換的時候JSON對符號的區(qū)分和要求。
圖4 D3.js可視化流程
本文從某指控軟件的實際使用操作入手,通過對某指控軟件的操作和相關文檔的閱讀,完成了對戰(zhàn)前操作流程和細節(jié)的梳理,對這些操作進行了節(jié)點、關系和屬性的劃分,由這些劃分好的信息組成提供給用戶的幫助信息,并將這些信息組織入庫,最后通過D3.js框架將查詢到的結果對用戶進行可視化展示,如查詢“空情與空中態(tài)勢”(image屬性為隨機圖片),查詢結果如圖5所示。
圖5 “空情與空中態(tài)勢”查詢結果
可以看出:傳統(tǒng)的幫助信息存入關系型數(shù)據(jù)庫或直接是一個文檔的形式,幫助信息按照章節(jié)進行組織,采用大量的、文字性的描述,操作和操作之間的聯(lián)系不緊密,而且由于不同的配置項的幫助文檔是由不同的開發(fā)人員編寫的,幫助文檔之間是相對獨立的,用戶在使用的時候常常需要在不同的文檔之間跳轉查詢。而本文從操作的流程和細節(jié)入手,采用圖的方式組織這些信息,注重操作間的關聯(lián)性,查詢返回的結果也是圖的形式,節(jié)點的表示進行了顏色區(qū)分,符合人的記憶規(guī)則,添加的image屬性將展示結果結合了具體的操作場景,使用戶更容易找到操作的位置,圖數(shù)據(jù)庫高效的查詢效率也是不容忽視的優(yōu)點。
1) 用圖數(shù)據(jù)存儲防空指控系統(tǒng)的幫助系統(tǒng)不僅可以表示各個幫助信息之間的關系,而且在可視化方面的效果也更加友好。
2) Neo4j對“關系”展現(xiàn)方面表現(xiàn)優(yōu)越,不僅可以用來展現(xiàn)防空指控軟件的幫助信息,更可以擴展到指控軟件知識圖譜的構建,并進一步用來描述交通網(wǎng)絡、人物社交關系、任務劃分關系等,圖數(shù)據(jù)庫,特別是圖數(shù)據(jù)庫與關系型數(shù)據(jù)庫的結合使用在軍事領域的應用還有待進一步擴展。
3) 通過用圖數(shù)據(jù)庫的方式對包含大量、多重關系的信息進行存儲,也可以發(fā)現(xiàn)現(xiàn)有知識體系中存在的問題,比如孤立的節(jié)點或與其他節(jié)點聯(lián)系弱的節(jié)點都需要繼續(xù)進行研究。
Neo4j本身自帶Browser提供的查詢展示結果比較理想,但如何直接采用這一結果還需要繼續(xù)探索;對于Neo4j本身的安全性來講,Neo4j默認處于一種安全的溫室環(huán)境下,而對于軍事領域的安全標準而言,這樣的安全性遠遠不夠,在使用Neo4j的時候安全性需要進一步考慮。