在院校、部队教学和训练中, 常常需要对武器、装备的相关信息进行查询、比较, 例如下列典型应用场景:
(1)查询. XXX步战车的火控系统采用什么方式? (2)比较. XXX步战车和XXX步战车的动力部分有什么差别? (3)关联. 我军和XXX步战车相同底盘的装甲车辆有哪些? XXX式步兵战车的衍生型号有哪些? XXX火炮都用在哪些装甲车辆上?
这类应用场景带有突出的“联想”、“关联”特征. 过去的数据表格中, 常常以武器装备分类为基础, 按照树的结构进行组织. 在使用时, “按图索骥”, 可以找到装备, 但是装备之间的比较需要在几个不同的表之间进行, 非常麻烦. 在工作、学习中, “联想式”、“关联式”查询检索更加符合教学、认知规律, 基于这些考虑, 我们需要一个以“联想式”、“关联式”查询检索为主要特征的数据库.
1 图数据库概述 1.1 图数据库基本概念图数据库是一种利用图结构存储和查询数据的数据库系统, 其理论基础是图论. 图的基本要素是节点和边, 对应图数据库三大基本要素是节点、关系和属性.
节点可以代表实体且包含任意多的属性(键值对), 利用在节点上添加标签可以在语义上更直接的表达领域对象; 关系连接相应的节点, 可以表达实体或者领域对象之间相应的变化和关系[1].
一般的数据库系统主要涉及四种操作, 即增、查、改、删(CRUD), 图的查找和搜索可以通过图的遍历和相关图论算法完成[2].
1.2 图数据库和关系数据库的比较传统上, 我们进行数据处理, 一般采取关系数据库的方式. 这类数据库, 简单易用, 技术成熟. 适用于格式化的数据结构, 每个元组的字段组成一致, 如成绩单、花名册.
关系数据库的基本理念是面向实体建模, 然后通过关联表记录实体间的关联关系. 关系数据库和我们需求之间的差距主要是:
(1)不容易处理非结构化、半结构化数据. 比如: 飞机、坦克、火炮的相关信息, 很难或根本不能提出一个共同的“模式”, 建立一个结构一致的数据表来表示这些信息.
(2)难以体现出实体之间的联系. 由于应用场景设计的原因, 关系表查询涉及到数据表之间的操作, 查询成本比较高.
图数据库的创建和维护简单, 每个节点对应于关系数据库中的一个记录, 节点和边的属性则相当于记录中的字段, 属性内容和个数可以动态变化, 节点之间的边也可以自由删减并且不会影响已有数据结构的逻辑, 这对于关系数据库来说是非常困难的.
2 数据建模 2.1 数据的组织和分类武器装备是武装力量用于实施和保障战斗行动的武器、武器系统以及与之配套的其他军事技术装备的统称.
现代武器装备按其主要特征有多种分类方法, 如按毁伤作用的性质, 可分为大规模杀伤破坏武器和常规武器; 按所要解决的战斗任务的范围, 可分为战略武器和战术武器; 还可以按照机动能力等进行其他分类.
对于这个项目, 装备分类按照装备管理部门的目录进行. 目前主要考虑装甲装备和军械装备, 因此顶层节点如图1所示. 装备的组织习惯上是自上至下的树状结构, 为了解决“跨分支”的节点之间的对应问题, 必须设计各种各样的关系.
2.2 关系的设计
关系描述的是节点之间的“联系”. 在图2中, 装甲装备下面的二级分类有坦克、装甲车、装甲保障车辆, 它们之间的关系是“进一步分类”, 如图3所示.
三级分类再往下, 就到了具体型号, 这时的关系为“具体型号”. 这种表示方法类似“树”, 但是树中节点的关系只是扩展, 这里的关系则要复杂得多.
具体装备之后, 再向下一层的关系是“具有能力”, 比如, 步战车具有四种能力, 分别是防护能力、机动能力、火力能力、信息能力.
能力再向下的关系为“具体部件”, 具体部件是最末层的节点. 这样设计便于解决类似以下的问题: 哪两种装甲车辆的火炮都是XXX炮? 最末层的节点具有更进一步的属性信息.
在武器装备的设计制造中, 常常遵循模块化设计原则, 例如某型炮塔同时用于两类坦克, 这样两性装备就有可能指向同一末端节点.
2.3 图数据库可以解决的任务场景分析图数据库因为其无模式特点, 使得它更能适应领域变化. 在目前这个课题中, 图数据库系统基本的服务场景主要包括:
(1) 提供武器装备型号的检索查询服务. 数据管理主要用于实现对系统所需的基础数据的管理与维护, 包括添加、修改、删除和查询, 考虑到应用的对象和场景, 本系统为用户提供的接口主要是查询. 比如“XXX步战车的火控系统采用什么方式?”这种模式的查询. 这种方式可以理解成字典式的查询, 通过目录树进行, 比较直接, 也比较简单.
(2) 提供“联想式”、“关联式”的查询检索服务. 人的思维活动不是线性的, 往往带有跳跃性的特征. 比如在教学中, 常常会提出“我军和XXX步战车相同底盘的装甲车辆有哪些?”、“XXX式步兵战车的衍生型号有哪些?”、“XXX火炮都用在哪些装甲车辆上?”这类问题, 这类问题正是“图”技术的擅长. 本系统用图数据库来建设数据库, 通过设计导向式的检索查询, 大大地改善了用户的体验.
(3) 进行基于属性的比较服务. 比较是装备教学中的另一个重要特征, 通过比较可以使人对事物的认识更加深入. 比如“XXX步战车和XXX步战车的动力部分有什么差别?”这一类问题. 本系统的解决方案是利用表格的模式, 将两种对象的共同属性并列显示, 以实现比较.
3 系统的实现过程本项目利用Eclipse RCP(Rich Client Platform)来实现人机界面[3], RCP是一个重用框架的开发环境, 可以利用RCP框架开发应用程序. 在技术实现上, 重点解决3个问题, (1) 图数据库的创建; (2) 节点属性的展示; (3)图的呈现.
3.1 图数据库的创建本项目依托Neo4J创建数据库. Neo4J是图数据库的一个重要代表, Neo4J有两种运行方式, 一是以服务的方式, 对外提供REST接口; 另外是嵌入式模式, 将数据作为本地文件访问.
类似于SQL, 图数据的创建和访问, 使用Cypher语句. 分别创建节点, 创建关系, 创建节点的属性. 在执行查询时, Neo4J为Cypher语句提供了Java的调用接口.
3.2 节点属性的处理武器装备由于型号不一, 构造各异, 因此属性的描述上存在较大的差别. 例如, XXX式步兵战车, 分为6类数据, 分别是一般数据、使用数据、运动速度、通行性能、武器弹药、通信设备(图4).
而其他装备, 比如飞机, 显然需要有另外的一些属性来描述. 武器装备的性能参数由于种类之间差异太大, 很难用统一的模式, 或者说“数据项”来描述, 用键值对进行描述是一种更简便的方法. JSON文件就是专门描述键值对的文件格式.
下面是描述XXX步战车的机动能力的JSON文件, 键与值之间用“:”隔开, 键值对之间用“{}”隔开. 与此类似, 其他性能也都用单独的JSON文件来表示[4].
{
{"一般数据":[
{"战斗全重":"XXX吨"},
{"乘员":"XXX人"},
{"载员":"XXX人"},
…
]}
{"燃油数据":[
{"行驶100公里燃料消耗量":[
{"公路":"XXX升"},
{"土路":"XXX升"},
…
]},
{"运动速度":[
{"挂快速档时":[
{"一档":"XXX千米/时"},
{"二档":"XXX千米/时"},
…
]}
}
在图数据库中的最下一级节点, 也就是叶节点, 具有进一步的信息, 可以和一个JSON文件进行关联. 属性信息的展示, 也就是要将JSON文件递归地读出来, 用表格再展示出来. 为了更方便地读信息, 这个表格设计成可以折叠的. 这些是编程的技巧问题, 不再赘述, 具体显示界面见图5.
3.3 关系的呈现
图的展示是本课题的另一重点问题. 前文已经介绍, 图是由节点(Node)和边(Edge)组成的, 又称为点边图. 节点表示实体, 边表示的是实体间的联系. 为了将点边图表示出来, 有很多种方案. 比如, Eclipse的Zest库, JavaFX库, Draw2D库, 还可以使用js框架d3. JavaFX支持WebView控件, 通过WebView可以浏览d3.js生成的点边图. 通过js技术, 还可以实现节点的扩展、收缩, 右键菜单等操作.
本项目使用力导向图进行展示. 力导向图布局是d3.js一种布局的方式, 节点可以扩展或者收缩, 边上的文字标识表示关系的名称, 箭头表示关系方向.
力导向图的几个特征: 节点之间的相互作用力的存在, 所以节点不能重合, 然后节点拖拽的过程中会影响到其他的节点; 拖拽的过程中节点之间的线段长度不变, 会弹回去. 可以将nodes, links的节点数据转换成可以绘制的坐标点数据, 然后通过svg展现出来[5]. 这种方式, 形象直观、交互性好, 比较符合项目“联想式”查询的设计目标, 如图6.
4 结论
本项目基于图数库, 通过Eclipse RCP技术构建了一个武器装备数据库的应用, 区别于传统的分类检索, 这个系统更加注重关系检索. 这种模式满足了教员、学员在军事研究中对以“联想式”、“关联式”查询检索为主要特征的信息需求, 提高了检索效率, 反响良好.s
本课题的实践证明, 图数据库用于表现实体间的各种关系, 建库便捷, 语法简单, 查询开销极小, 具有非常大的推广价值.
[1] |
Robinson I, Webber J, Eifrem E. 图数据库. 刘璐, 梁越, 译. 北京: 人民邮电出版社, 2015. 2.
|
[2] |
阿列克萨·武科蒂奇, 尼基·瓦特, 塔里克·阿贝卓布, 等. Neo4J实战. 张秉森, 孔倩, 张晨策, 译. 北京: 机械工业出版社, 2016. 5.
|
[3] |
陆阳. Eclipse RCP与Spring OSGI技术详解与最佳实践. 北京: 机械工业出版社, 2013. 1.
|
[4] |
Bassett L. JSON必知必会. 魏嘉汛, 译. 北京: 人民邮电出版社, 2016. 1.
|
[5] |
Zhu NQ. D3.js数据可视化实战手册. 杨锐, 刘夏, 王超, 等译. 北京: 人民邮电出版社, 2014. 1.
|