你的位置:首页 > 软件开发 > 数据库 > Neo4j图数据库应用开发之一:Neo4j Java 工具包

Neo4j图数据库应用开发之一:Neo4j Java 工具包

发布时间:2015-12-07 17:01:17
1 应用开发概述 基于数据传输效率以及接口自定义等特殊性需求,我们暂时放弃使用Neo4j服务器版本,而是在Neo4j嵌入式版本的基础上进行一些封装性的开发。封装的重点,是解决Neo4j嵌入式版本EmbeddedGraphDatabase中不能同时 ...

1 应用开发概述

      基于数据传输效率以及接口自定义等特殊性需求,我们暂时放弃使用Neo4j服务器版本,而是在Neo4j嵌入式版本的基础上进行一些封装性的开发。封装的重点,是解决Neo4j嵌入式版本EmbeddedGraphDatabase中不能同时创建多个实例指向同一个数据库的问题。如果开发人员使用Neo4j嵌入式版本作为数据库,要想实现多个程序共享一个数据库,这将是一个不可回避的问题。本手册给出的解决方案是“构建一个中间服务层,提供各种接口方法,指向同一个数据库实例;其他客户端程序通过中间服务层与Neo4j嵌入式数据库进行通信”。因为我们已经从Neo4j官方声明中得知:Neo4j嵌入式实例可以在多个线程**享。

      系统框架如下图所示:

Neo4j图数据库应用开发之一:Neo4j Java 工具包

  • Neo4j Java 工具包

      Neo4j Java 工具包是对Neo4j嵌入式版本Java API的二次封装,根据业务类型划分为Node(Relationship)、Index、Path和Cypher等四种工具集。

      之所以称其为Server端,是因为其中包含了对RMI Server的管理。此管理工具的主要功能包括图数据库信息管理(包括新建、删除、统计图数据库等)、图数据库数据管理(包括Node数据管理、Relationship数据管理等)、数据导入导出(包括Neo4j与oraclemysql和excel等之间的数据转换)、RMI Server监控管理等。

管理工具Server端只能部署在Neo4j数据库服务器上,并且只能部署一套程序,否则将违背Neo4j图数据库单例的原则。

  • RMI Service(服务)

      RMI Server(服务),是在Neo4j Java 工具包的基础上,设计的一套接口服务,分为Server端和Client端。Server端用于接口方法的实现和监控管理,Client端用于接口方法的定义和分发(供其他外部系统使用)。总体设计思路,是将Neo4j中的关键对象(Node、Relationship、Path、Direction等)进行可序列化的封装,通过远程调用服务返回给客户端使用。

  • 管理工具Client端

      管理工具Client端,是基于RMI Client设计的Neo4j数据管理工具,主要功能包括图数据库信息查看功能、图数据库数据管理功能、数据导入导出功能等。管理工具Client端可以部署多套。

 

2 Neo4j Java 工具包

      以上所有功能(工具包、RMI Service以及管理工具)都包含在两个Java项目中,项目结构如下图所示:

Neo4j图数据库应用开发之一:Neo4j Java 工具包

      hnepri-neo4j-common为工具包项目,包括Neo4j Java 工具包、RMI Server端和管理工具Server端;hnepri-neo4j-client为客户端项目,包括RMI Client端和管理工具Client端。

      下面主要介绍Neo4j Java 工具包的几个封装关键点,其中,下图为各个工具类之间的关联效果图。

 Neo4j图数据库应用开发之一:Neo4j Java 工具包

2.1 Node操作工具类(GraphNodeUtil)

      Node操作工具类的主要功能包括Node节点和Relationship关系的创建、编辑、删除、查询,以及Label和Property的管理等。对于其中的部分接口方法,根据实际情况和需要则进行了事务处理。相关接口方法截图如下所示:

Neo4j图数据库应用开发之一:Neo4j Java 工具包

Neo4j图数据库应用开发之一:Neo4j Java 工具包

Neo4j图数据库应用开发之一:Neo4j Java 工具包

 

2.2 Index操作工具类(GraphIndexUtil)

      Index操作工具类的主要功能包括Node和Relationship相关索引信息的创建、编辑、删除、查询,以及基于索引查询Node节点和Relationship关系等。对于其中的部分接口方法,根据实际情况和需要则进行了事务处理。相关接口方法截图如下所示:

Neo4j图数据库应用开发之一:Neo4j Java 工具包

 

2.3 Path操作工具类(GraphPathUtil)

      Path操作工具类的主要功能包括针对Path的检索操作,包括路径深度遍历、两点之间路径寻址等接口方法。对于其中的部分接口方法,根据实际情况和需要则进行了事务处理。相关接口方法截图如下所示:

Neo4j图数据库应用开发之一:Neo4j Java 工具包

 

2.4 Cypher操作工具类(GraphCypherUtil)

      Cypher操作工具类是对Cypher查询语言的封装,主要包括针对Node、Relationship和Path的自定义查询操作。另外,也包括了多种方式的分页查询。对于其中的部分接口方法,根据实际情况和需要则进行了事务处理。

       其中,最基本的接口方法是executeQuery方法,执行Cypher查询语句,将查询结果以Properties的形式存在在List中,然后再由其他接口方法显式地转换为Node、Relationship、Path或者其他基本类型使用。

 

 1    /** 2    * 执行Cypher查询语句,将检索结果封装进Properties列表中。 3    * @param query cypher查询语句 4    * @param params cypher查询语句参数集合 5    * @return 6   */ 7   public List<Properties> executeQuery(String query, Map<String,Object> params) { 8     GraphTimerModel timer = GraphTimerModel.create(); 9     List<Properties> propertiesList = new ArrayList<Properties>();10     if(StringUtils.isBlank(query)) {11       return propertiesList;12     }13     ExecutionResult result = null;14     if(params == null || params.size() == 0) {15       result = this.getExecutionEngine().execute(query);16     } else {17       result = this.getExecutionEngine().execute(query, params);18     }19     LogInfoUtil.printLog(query);20     21     for (Map<String, Object> row : result ) {22       Properties properties = new Properties();23       for ( Entry<String, Object> column : row.entrySet()){24         properties.put(column.getKey(), column.getValue());25       }26       propertiesList.add(properties);27     }28     timer.initEndTime();29     timer.printTimeInfo();30     return propertiesList;31   }32   举例如下所示:33   String query = "START n=node(*) WHERE n.name=’tom’ RETURN n AS NODE_ENTRY";34   List<Properties> list = this.executeQuery(query);35   for(Properties properties : list) {36     nodeList.add((Node)properties.get("NODE_ENTRY"));37   }

原标题:Neo4j图数据库应用开发之一:Neo4j Java 工具包

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。