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