李安琪,張 勇,孫玉潔,張聰姍
(北方自動控制技術研究所, 太原 030000)
隨著武器裝備信息化的發展,防空指控系統軟件的功能越來越多,規模越來越大,結構越來越復雜,導致用戶掌握其使用方法的難度日益增加,所以可用、好用的操作幫助就顯得越來越重要。由于防空指控系統各個插件之間的聯系和交互較多,本質上來講,幫助信息不是以模塊為單位相互獨立的,各個模塊的幫助信息之間存在復雜的關系,所以指控軟件的幫助信息是一種帶“關系”的數據[1]。
目前,防空指控系統的數據通常采用關系型數據庫(RDS)進行存儲,關系型數據庫技術成熟,為軍用防空指控系統的數據存儲和查詢提供了便利,但是關系型數據庫在存貯帶“關系”的數據時,日益暴露出很多問題。關系型數據庫在建立對象之間的多重關系時會產生復雜的Join語句,而且關系型數據庫在查詢到三級以上關系節點時,查詢時間就會明顯增加,隨著關系層次的遞增,查詢效率會明顯降低。所以從2013年起,關系型數據庫開始逐漸弱化,圖數據庫的應用變得日益廣泛。由于防空指控軟件幫助信息的“關系”特性,考慮使用圖數據庫來進行存儲這類帶有復雜關系的信息的存儲[2]。
圖數據庫以圖理論為基礎,采用【節點】、【關系】、【屬性】來表達數據之間的關系和數據的其他屬性信息,圖數據庫結構如圖1所示,每一個節點、每一條關系都有可以附有屬性,屬性是可變的。

圖1 圖數據庫
圖形數據庫數據采用“遍歷”作為檢索的一個基本操作,是圖形模型中所特有的。圖遍歷是局域化的,遍歷查詢數據時僅僅用到所必需的數據,不受總數據集大小的影響,隨著遍歷深度的變化,當返回的節點數保持不變時,查詢性能僅有輕微的降低。關系數據庫的Join操作計算笛卡兒積并丟棄不相關的結果,隨著數據集的增大,將按指數變化影響其性能。然而圖數據庫遍歷只訪問與遍歷相關的節點,所以能夠保持期待的性能。要遍歷訪問的節點越多,遍歷就會越慢,但是這種變慢是線性的,而且仍然不受總圖形大小的影響[6-7]。
Neo4j是圖數據庫中應用較為成熟、技術較為領先的一種。Neo4j專門為數據關系而設計,具有模型維護容易、查詢簡單、占用資源小、性能高等優點。單機版的Neo4j支持存儲10億條關系,對一般企業來說足夠使用;網絡版Neo4j支持分布式數據存儲。Neo4j支持CSV文件導入,也支持導出CSV格式文件。Neo4j的數據遷移方法比較簡單,只需要把data文件夾拷貝到新的環境即可,數據遷移受版本影響小。所以在防空指控軟件中,對于涉及存在復雜關系的數據可以考慮通過圖數據庫進行存儲,對于一般的傳統數據依舊采用關系型數據庫。
從用戶學習的角度考慮,將防空指控幫助信息的大致分為以下3類,如圖2所示。
圖2 防空指控軟件幫助信息分類
在用戶嘗試使用一個新的指控軟件的時候,總是希望先有一個簡要有效的流程來快速入門,解決如何用起來的問題。快速的流程首先需要簡潔明了,對操作的提示要盡可能結合界面,讓用戶一目了然。而業務的流程在需求提出之時就是相對確定的,細節或許會有調整,但整體思路大致是不變的,所以即使界面日后有所調整,主題流程性的幫助仍是可用的。
隨著對軟件的熟悉,用戶可能會對軟件操作的細節產生興趣,會希望知道更多隱含內容,比如是否有隱含的快捷操作或隱藏的小功能,以此來解決軟件還能為用戶提供哪些功能的問題。這個時候幫助信息就需要提供類似用戶手冊一樣詳細但力求簡潔的內容,這就需要對用戶手冊或提供的文本文檔內容進行有效的抽取,只反饋給用戶關鍵有用的信息。由于長時間地翻閱和組織散落的用戶手冊信息對用戶來說無疑是額外增加的工作,往往由于這項工作過分地費時費力,導致很多用戶不愿意去閱讀用戶手冊,用戶手冊的使用率毫無疑問會降低,也很難起到預期幫助用戶學習的作用。
由于指控軟件插件之間的交互頻繁、使用環境配置的不同等各種原因造成的軟件報錯崩潰,用戶希望可以自己先進行排查和解決,所以常見故障的排查、報錯內容的查看、問題的定位信息也是用戶需要的。隨著用戶使用時間的增長,這些信息是需要更新的,考慮到用戶使用軟件產品的地域局限性,常見問題的解決方法信息可交給用戶進行維護,用戶可以根據經驗更具經驗添加問題的解決方法,互相分享,與開發人員一起豐富故障解決方法的問題庫,提高自學習的效率
為實現防空指控幫助信息在圖數據庫Neo4j中的存儲,配置如下環境:Windows10操作系統,JDK1.8.0,Neo4j3.3.5單機版嵌入式安裝,火狐瀏覽器,IDEA2018.1.2。由于防空指控軟件操作較多,短期無法全部覆蓋,本文以部分操作為例進行演示驗證。
將防空指控軟件中包含的具體操作關鍵名稱按照合成、防空、操作、文書、常見問題等類型進行劃分,即劃分為HC、FK、OP、WS、CJ等類型的Lable,如表1所示。
不同類型的Label,顏色不同。Neo4j提供七種顏色、五種尺寸的不同選擇,由思維導圖的相關經驗可知,節點顏色、大小、形態的區分有助于提高用戶對信息的記憶。在創建結點的同時寫入節點相關屬性,如節點的細節詳情、操作的含義等,酌情附上image屬性,image屬性可以在節點可視化的時候,為節點添加防空某信息系統使用時具體出現的界面情景圖片,或者為操作性質的節點直接以用戶熟悉的圖形顯示,避免了文字闡述的繁瑣,簡化可視化界面。這樣用戶可以很輕松的找到操作的位置和方法,更加直觀、有效地起到幫助用戶學習的作用。

表1 類型和Label
所有的節點通過有向的Relation進行連接,Relation的方向可以是單向或雙向的,從而數據庫中的數據之間可以形成一張有向圖。通過不同Property進行Relation類型的區分,Node和Relation都是可以不斷擴展的,每發現新的一條Relation都可以進行添加,Neo4j支持一條連續語句寫入多重關系,數據庫更新方便。所有的Node和Relation的屬性和返回給用戶的信息都統一采用中文表示,增加可讀性[3]。
對于常用的操作,考慮將相近或者頻繁使用的操作整整合成一個新的、通用的節點來進行統一表示,以此來簡化節點的類型,避免大量類似節點重復出現,使“網”的關系和走向更加清晰,簡化界面。
圖數據庫中每個節點自帶的ID都是唯一的,這個ID是系統定義的,無法修改,且對用戶來說是不可見的,所以在寫入數據的時候需要約定節點一個可見的、可修改的屬性(Title屬性)作為區分節點的唯一屬性[4]。由于數據庫本身對節點唯一性的識別是通過系統自帶ID來判斷的,每新建一個節點,系統都會給它分配一個新的系統ID,所以相同Label下、相同Title的節點可以是兩個節點,因此在數據庫組織的時候要注意Title屬性字符的唯一性;同時在寫入數據庫的時候盡量避免不同Label下相同Title節點的出現,其實就算有這樣的情況出現也不會對用戶的可讀性產生太大的影響,因為不同Label節點的顏色是進行區分的,對用戶來說,顏色的不同直觀反映了節點類型的不同。為了提高檢索速度,可以選擇根據檢索要求,選擇一個屬性作為索引,本文采用Title屬性組織索引。
下面是建立索引的部分Cypher:
CREATE INDEX ON:HC(Title)
CREATE INDEX ON:FK(Title)
CREATE INDEX ON:WS(Title)
?
Neo4j數據庫采用Cypher語言進行寫入、查詢、修改等一系列對數據庫的操作。Cypher是已測試的、處理圖數據庫效率最高的查詢語言,具有較高的可讀性和可維護性,能夠被高效地開發使用,而且Cypher語言沒有JOIN語句,在查詢節點關系時不需要進行復雜的多重JOIN,Cypher語言在寫入屬性的時候也不需要聲明屬性類型,可以進行自動類型匹配,語法靈活簡單[5]。
按不同類型的label寫入節點的部分Cypher如下:
CREATE (作戰信息系統:HC{title:“作戰信息系統”})
CREATE (導入計劃:OP{title:“導入計劃”}),(編輯計劃:OP{title:“編輯計劃”}),(導出計劃:OP{title:“導出計劃”}),(發送計劃:OP{title:“發送計劃”})……
給節點創建關系的部分Cypher如下:
CREATE (防空兵力部署)-[:下一步]->(切換地圖標繪),(通信裝備)-[:操作1]->(選中軍標右鍵),(通信裝備)-[:操作2]->(通信情況分析) ……
部分防空指控幫助信息寫入Neo4j效果圖如圖3。

圖3 部分防空指控幫助信息寫入Neo4j效果圖
要將圖數據庫查詢結果結合用戶界面返回給用戶,需要采用可視化框架對查詢結果進行可視化展現。Neo4j自帶的Browser采用D3.js框架來進行可視化,因此本文也選擇了D3.js框架。
由于Java不支持調用Rest接口的命令語法,所以不方便直接通過Rest接口訪問數據庫[7]。如果要將數據庫查詢的結果和用戶界面層結合進行可視化,要先通過Java API執行Cypher查詢語句,再把查詢結果拼接成JSON格式,產生JSON文件,使用插件對JSON文件進行解析,再由D3.js使用這些解析的信息進行網頁形式的可視化[8],D3.js可視化流程如圖4所示。
下面是對JSON格式的說明:
{“nodes”:[{title:“防空計劃”,label:“FK”,id:1},{name:“導入計劃”,label:“OP”,id:2},{name:“刪除計劃”,label:“HC”,id:3}],
“links”:[{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指的是節點的系統ID,link中source和target后面的值指的是nodes里的ID值,links即為節點間的關系,它表示從source(x)到target(y)的關系是type(string)[9]。
JSON標準格式里需要的值都是從寫入的數據庫中讀取的,需要注意的是,在格式轉換的時候JSON對符號的區分和要求。

圖4 D3.js可視化流程
本文從某指控軟件的實際使用操作入手,通過對某指控軟件的操作和相關文檔的閱讀,完成了對戰前操作流程和細節的梳理,對這些操作進行了節點、關系和屬性的劃分,由這些劃分好的信息組成提供給用戶的幫助信息,并將這些信息組織入庫,最后通過D3.js框架將查詢到的結果對用戶進行可視化展示,如查詢“空情與空中態勢”(image屬性為隨機圖片),查詢結果如圖5所示。

圖5 “空情與空中態勢”查詢結果
可以看出:傳統的幫助信息存入關系型數據庫或直接是一個文檔的形式,幫助信息按照章節進行組織,采用大量的、文字性的描述,操作和操作之間的聯系不緊密,而且由于不同的配置項的幫助文檔是由不同的開發人員編寫的,幫助文檔之間是相對獨立的,用戶在使用的時候常常需要在不同的文檔之間跳轉查詢。而本文從操作的流程和細節入手,采用圖的方式組織這些信息,注重操作間的關聯性,查詢返回的結果也是圖的形式,節點的表示進行了顏色區分,符合人的記憶規則,添加的image屬性將展示結果結合了具體的操作場景,使用戶更容易找到操作的位置,圖數據庫高效的查詢效率也是不容忽視的優點。
1) 用圖數據存儲防空指控系統的幫助系統不僅可以表示各個幫助信息之間的關系,而且在可視化方面的效果也更加友好。
2) Neo4j對“關系”展現方面表現優越,不僅可以用來展現防空指控軟件的幫助信息,更可以擴展到指控軟件知識圖譜的構建,并進一步用來描述交通網絡、人物社交關系、任務劃分關系等,圖數據庫,特別是圖數據庫與關系型數據庫的結合使用在軍事領域的應用還有待進一步擴展。
3) 通過用圖數據庫的方式對包含大量、多重關系的信息進行存儲,也可以發現現有知識體系中存在的問題,比如孤立的節點或與其他節點聯系弱的節點都需要繼續進行研究。
Neo4j本身自帶Browser提供的查詢展示結果比較理想,但如何直接采用這一結果還需要繼續探索;對于Neo4j本身的安全性來講,Neo4j默認處于一種安全的溫室環境下,而對于軍事領域的安全標準而言,這樣的安全性遠遠不夠,在使用Neo4j的時候安全性需要進一步考慮。