基于图数据库的防空指控软件帮助信息的存储
2019-05-05李安琪孙玉洁张聪姗
李安琪,张 勇,孙玉洁,张聪姗
(北方自动控制技术研究所, 太原 030000)
随着武器装备信息化的发展,防空指控系统软件的功能越来越多,规模越来越大,结构越来越复杂,导致用户掌握其使用方法的难度日益增加,所以可用、好用的操作帮助就显得越来越重要。由于防空指控系统各个插件之间的联系和交互较多,本质上来讲,帮助信息不是以模块为单位相互独立的,各个模块的帮助信息之间存在复杂的关系,所以指控软件的帮助信息是一种带“关系”的数据[1]。
目前,防空指控系统的数据通常采用关系型数据库(RDS)进行存储,关系型数据库技术成熟,为军用防空指控系统的数据存储和查询提供了便利,但是关系型数据库在存贮带“关系”的数据时,日益暴露出很多问题。关系型数据库在建立对象之间的多重关系时会产生复杂的Join语句,而且关系型数据库在查询到三级以上关系节点时,查询时间就会明显增加,随着关系层次的递增,查询效率会明显降低。所以从2013年起,关系型数据库开始逐渐弱化,图数据库的应用变得日益广泛。由于防空指控软件帮助信息的“关系”特性,考虑使用图数据库来进行存储这类带有复杂关系的信息的存储[2]。
1 图数据库概述
图数据库以图理论为基础,采用【节点】、【关系】、【属性】来表达数据之间的关系和数据的其他属性信息,图数据库结构如图1所示,每一个节点、每一条关系都有可以附有属性,属性是可变的。
图1 图数据库
图形数据库数据采用“遍历”作为检索的一个基本操作,是图形模型中所特有的。图遍历是局域化的,遍历查询数据时仅仅用到所必需的数据,不受总数据集大小的影响,随着遍历深度的变化,当返回的节点数保持不变时,查询性能仅有轻微的降低。关系数据库的Join操作计算笛卡儿积并丢弃不相关的结果,随着数据集的增大,将按指数变化影响其性能。然而图数据库遍历只访问与遍历相关的节点,所以能够保持期待的性能。要遍历访问的节点越多,遍历就会越慢,但是这种变慢是线性的,而且仍然不受总图形大小的影响[6-7]。
Neo4j是图数据库中应用较为成熟、技术较为领先的一种。Neo4j专门为数据关系而设计,具有模型维护容易、查询简单、占用资源小、性能高等优点。单机版的Neo4j支持存储10亿条关系,对一般企业来说足够使用;网络版Neo4j支持分布式数据存储。Neo4j支持CSV文件导入,也支持导出CSV格式文件。Neo4j的数据迁移方法比较简单,只需要把data文件夹拷贝到新的环境即可,数据迁移受版本影响小。所以在防空指控软件中,对于涉及存在复杂关系的数据可以考虑通过图数据库进行存储,对于一般的传统数据依旧采用关系型数据库。
2 防空指控帮助信息分类
从用户学习的角度考虑,将防空指控帮助信息的大致分为以下3类,如图2所示。
图2 防空指控软件帮助信息分类
在用户尝试使用一个新的指控软件的时候,总是希望先有一个简要有效的流程来快速入门,解决如何用起来的问题。快速的流程首先需要简洁明了,对操作的提示要尽可能结合界面,让用户一目了然。而业务的流程在需求提出之时就是相对确定的,细节或许会有调整,但整体思路大致是不变的,所以即使界面日后有所调整,主题流程性的帮助仍是可用的。
随着对软件的熟悉,用户可能会对软件操作的细节产生兴趣,会希望知道更多隐含内容,比如是否有隐含的快捷操作或隐藏的小功能,以此来解决软件还能为用户提供哪些功能的问题。这个时候帮助信息就需要提供类似用户手册一样详细但力求简洁的内容,这就需要对用户手册或提供的文本文档内容进行有效的抽取,只反馈给用户关键有用的信息。由于长时间地翻阅和组织散落的用户手册信息对用户来说无疑是额外增加的工作,往往由于这项工作过分地费时费力,导致很多用户不愿意去阅读用户手册,用户手册的使用率毫无疑问会降低,也很难起到预期帮助用户学习的作用。
由于指控软件插件之间的交互频繁、使用环境配置的不同等各种原因造成的软件报错崩溃,用户希望可以自己先进行排查和解决,所以常见故障的排查、报错内容的查看、问题的定位信息也是用户需要的。随着用户使用时间的增长,这些信息是需要更新的,考虑到用户使用软件产品的地域局限性,常见问题的解决方法信息可交给用户进行维护,用户可以根据经验更具经验添加问题的解决方法,互相分享,与开发人员一起丰富故障解决方法的问题库,提高自学习的效率
3 防空指控帮助信息在Neo4j中的存储
为实现防空指控帮助信息在图数据库Neo4j中的存储,配置如下环境:Windows10操作系统,JDK1.8.0,Neo4j3.3.5单机版嵌入式安装,火狐浏览器,IDEA2018.1.2。由于防空指控软件操作较多,短期无法全部覆盖,本文以部分操作为例进行演示验证。
3.1 防空指控帮助信息节点划分
将防空指控软件中包含的具体操作关键名称按照合成、防空、操作、文书、常见问题等类型进行划分,即划分为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)
⋮
3.2 防空指控信息数据写入
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效果图
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可视化流程
4 实验
本文从某指控软件的实际使用操作入手,通过对某指控软件的操作和相关文档的阅读,完成了对战前操作流程和细节的梳理,对这些操作进行了节点、关系和属性的划分,由这些划分好的信息组成提供给用户的帮助信息,并将这些信息组织入库,最后通过D3.js框架将查询到的结果对用户进行可视化展示,如查询“空情与空中态势”(image属性为随机图片),查询结果如图5所示。
图5 “空情与空中态势”查询结果
可以看出:传统的帮助信息存入关系型数据库或直接是一个文档的形式,帮助信息按照章节进行组织,采用大量的、文字性的描述,操作和操作之间的联系不紧密,而且由于不同的配置项的帮助文档是由不同的开发人员编写的,帮助文档之间是相对独立的,用户在使用的时候常常需要在不同的文档之间跳转查询。而本文从操作的流程和细节入手,采用图的方式组织这些信息,注重操作间的关联性,查询返回的结果也是图的形式,节点的表示进行了颜色区分,符合人的记忆规则,添加的image属性将展示结果结合了具体的操作场景,使用户更容易找到操作的位置,图数据库高效的查询效率也是不容忽视的优点。
5 结论
1) 用图数据存储防空指控系统的帮助系统不仅可以表示各个帮助信息之间的关系,而且在可视化方面的效果也更加友好。
2) Neo4j对“关系”展现方面表现优越,不仅可以用来展现防空指控软件的帮助信息,更可以扩展到指控软件知识图谱的构建,并进一步用来描述交通网络、人物社交关系、任务划分关系等,图数据库,特别是图数据库与关系型数据库的结合使用在军事领域的应用还有待进一步扩展。
3) 通过用图数据库的方式对包含大量、多重关系的信息进行存储,也可以发现现有知识体系中存在的问题,比如孤立的节点或与其他节点联系弱的节点都需要继续进行研究。
Neo4j本身自带Browser提供的查询展示结果比较理想,但如何直接采用这一结果还需要继续探索;对于Neo4j本身的安全性来讲,Neo4j默认处于一种安全的温室环境下,而对于军事领域的安全标准而言,这样的安全性远远不够,在使用Neo4j的时候安全性需要进一步考虑。