编辑推荐: |
本文主要Neo4j的概念和安装,同时包括介绍了Git和Maven两个工具,Neo4j
Spatial项目以及空间数据(矢量)的存储。
本文来自csdn,由火龙果软件Anna编辑、推荐。
|
|
Neo4J简介与安装
1.简介
“Neo4j是一个高性能的,非关系的,具有完全事务特性的,鲁棒的图数据库。”
neo4j在处理复杂的网络数据时候,具有很好的性能表现[1],适用于社交网络,动态网络等场景。它基于java语言实现,有两个分发版本,社区版(community
version)以GPLv3的许可在Github上开源;企业版,同时遵循AGPLv3和商业许可,它在社区版基础上增加了包括高可用性(High
Availability),全天侯支持等特性。Neo4j的开发非常活跃,围绕它有非常多的项目,包括
REST API 绑定(各种语言实现列表),空间数据库支持(源码地址)等。
由于neo4j版本升级频繁,为了及时获取新的软件特性,我们使用Git来管理,更新代码。Git是一个基于C语言实现的分布式版本控制系统与源码管理系统,与svn不同的是,它并没有中心服务器这个概念,而是每一份的本地版本都会包含源码的完整历史记录[2,3]。Git的文件主要处于三种状态:staged,modified,committed。它的操作主要包括:pull,fetch,push,commit等。这样的机制导致Git状态和操作如图一所示:
图1 Git 数据流简单结构图
更多的关于Git的教程请查阅参考文献[3,4]。
Maven是一个由Apache软件基金会开源java项目构建,依赖管理,项目信息管理的工具[6]。基于项目对象模型(POM)的概念,Maven根据中心信息可以管理项目的构建,汇报和文档工作。它能够自动化构建过程,从清理,编译,测试到生成报告,再到打包和部署。Maven抽象了项目完整的构建生命周期模型,同时标准化了构建过程,促进项目团队标准化,还提供了一致的操作接口[7]。Maven项目核心是POM.xml,它定义了项目的基本信息,用于描述项目如何构建,申明项目依赖等。样例POM代码如下所示:
这个项目的POM最重要的是第一段groupId,artifactId ,version三个元素,它们定义了一个项目的基本坐标。groupId定义项目的归属组织,artifactId定义了当前项目在归属中的唯一ID
,vesrion就是项目的版本号。Maven主要的命令包括mvn clean complie test
package install 等。更多Maven的内容请查阅参考文献[7]。
2.安装
2.1 Git 安装
Git的安装非常简单,大多数的Linux发行版本的源中都打包好。以Ubuntu
为例(仅测试Oneiric,Precise),只需要输入如下命令即可安装。
Window和MacOS版本可以在github上下载,并按照上面指南安装。
2.2 Maven 安装
同样的Ubuntu(我最爱系统)下,安装Maven3非常简单,输入如下命令:
2.3 Neo4j 安装
安装好以上两者后,我们直接从github的源码,并用maven来安装neo4j,命令如下:
mkdir neo4j
cd ./neo4j
git clone https://github.com/neo4j/community.git
mvn clean install |
如此,neo4j即安装成功。如果需要build不同的版本可以遵照参考文献5Readme的指示来实现。
Neo4J空间数据存储
1.Neo4j Spatial 简介
1.1Neo4j Spatial概念
Neo4j Spatial项目是图数据库Neo4j的一个插件,它通过将空间数据映射到图模型(graph
model),它将对象和关系当作顶点和边存储在图模型中。因而使得Neo4j具有空间数据的导入,存储,查询等功能[8]。Neo4j
Spatial支持的地理要素遵循OpenGIS的规范[9],包括点(point),线段(line-string),面(polygon),多点(multipoint),多线段(multi-linestring)等简单要素。Neo4j
Spatial使用R树作为空间索引,主要是集成了Lucene 的索引库,支持的空间查询包括覆盖(cover),被覆盖(cover
by),包含(contian),相交(intersect)等。一般而言,R树会将叶子结点(COUNT,LEVEL,<OIi,MBRi>)上几何要素分组并用它们的数据矩形来表示,相比PostGIS所使用的优化过GisT[13]索引要低效,会使Neo4j在范围查询上效率有所不及PostGIS,但它对适合图模型的数据(如网络数据)操作效率非常高[14]。综上所述,Neo4j在符合图数据模型的分析中如邻近搜索,路径分析等这些特定类型的应用有非常大的优势。
1.2 Neo4j Spatial特性
Neo4j Spatial的部分核心特性包括
支持Esri Shapefile格式,OSM(OpenStreetMap)格式(只支持.osm格式)(补充:Open
Street Map目前逐步适用PBF替代OSM)
支持所有通用的几何要素
在空间查询的时候支持拓扑操作
允许任何图数据都实现空间操作功能
能够将单一图层或者数据集拆分成多个子图层
2.Neo4j Spatial安装
2.1 EGit安装
EGit是Eclipse团队提供的Git插件,它基于JGit(Git的java实现版本)实现的,允许在Eclipse中实现Git的各种命令[15]。它的安装和其他插件一样,在eclipse中选择Help->Install
New Software,加入Update site
会如图1所示:
图1 安装EGit
安装成功的话,需要重启Eclipse。File ->New -> Other,会看到Git的字样。
2.2 M2eclipse安装
M2eclipse是Maven的Eclipse插件,项目的目标是提供为Eclipse
提供一流的Maven支持,使它能够更方便地编辑POM文件,构建项目等[16]。同样可以通过Update
Site 安装:。如图2所示:
图2 安装M2Eclipse
安装成功的话,需要重启Eclipse。File ->New
-> Other,会看到Maven的字样。
2.3Neo4j Spatial安装
Neo4j Spatial源码可以在Github下载,我们通过以上安装的两个插件,来构建和安装我们的Neo4j
Spatial项目。首先在eclipse中File中导入Git项目,
File -> Import -> Git -> Project from Git.如果本地已经存在Git库,可以选择Local.我们远程下载Spatial,选择URI,如图3所示。
图3 选择远程库
输入Neo4j Spatial URI,然后Next,如图-4所示:
图4 输入URI
EGit会自动Fetch回所有的源码,我们可以按照自己需要选择特定版本,然后Next。如图5所示:
图5 选择源码版本
然后可以一直Next,直至选择导入的项目类型,选择Import as general projcet.如图6
所示:
图6 导入项目
再Next然后点finish 完成neo4j spatial 的导出。此时,还需要将该项目转化成Maven
Project ,选中项目,右键:Configure ->Convert to Maven Project.最后我们得到了一个git管理下的maven项目。使用如下命令来安装Neo4j
Spatial。
在eclipse操作是 Run as ->5. Maven Build
->输入构建目标。 如图7所示:
图7 构建Neo4j Spatial 项目
M2eclipse会自动构建工程。如果安装失败的话,可以使用如下命令跳过单元测试
mvn clean install
-DskipTests |
最后eclipse的console会报出build success。
3.Neo4j Spatial 空间数据读取
3.1地理图层与编码
Spatial 库中首先需要定义图层中几何要素,可供查询的索引,同时图层是否可编辑 ,其次是确定几何编码接口。Spatial类库提供的默认图层是标准图层,使用WKBGeometryEncoder,将所有的要素以字节数组的形式来存储。地理数据中实体的属性会当作图数据模型中顶点的属性来存储。OSMLayer
是支持Open Street Map格式的特殊图层,neo4j使用单个完全图[17]来存储该图层。同时
OMSLayer继承动态图层,允许包含任意个子图层。
3.2导入shapefile
导入shapefile大概过程是1.生存Neo4j数据库(调用已有)
2.实例化,并调用ShapefileImporter 3.关闭数据库 实例代码如下所示:
3.3导入OSM
导入OSM的过程和导入shapefile差异不大,旧版Neo4j Spatial 提供了批量读入的接口BatchInserter,可以加快大文件的导入。具体JavaDoc请参阅打包后的文档。
|