欢迎来到天天文库
浏览记录
ID:31362678
大小:113.00 KB
页数:8页
时间:2019-01-09
《图形数据库neo4j的内嵌式应用研究》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、图形数据库Neo4j的内嵌式应用研究 摘 要:图形数据库支持C/S结构与内嵌式部署2种方式,而内嵌式部署因使用简单方便而广受关注。以教育领域中论文作者合作关系图谱为例对图形数据库的嵌入式应用进行研究,提供一种快速、动态的学术合作关系存储方法。研究表明图形数据在数据库创建、查询、更新等方面表现出很高的易用性,特别特别适合处理大量复杂、动态、互连接、低结构化的数据,是一种解决社交网络、信息可视化等领域海量关联数据存储的有效方法。 关键词:图形数据库; 人物关系图谱; 关联数据; Neo4j 中图分类号:TN91934文献标识码:A文章编号:1004 图状模型是对层次模型的进一步发展,其
2、本质是将数据组织为图的形式,对数据库系统的各种增、删、改、查操作变成对图的遍历与搜索。作为NoSQL数据库的一种,图数据库很长时间多局限于学术与实验室,随着Web 2.0的发展,数据间的关联与数据变得同等重要。在社交网络Facebook、电子商务、资源检索等领域[1]存在大量的关联数据,急切需要一种能够处理复杂关联的存储技术,图形数据库才逐渐从实验室走出,因为采用图形数据来存储和计算这些海量的数据更加有效。这极大地推动了图形数据库的快速发展。 现在比较成熟的图像数据库包括 Twitter 的FlockDB,以及开源项目中的Neo4j 和Infogrid等。8 Neo4j是基于Java的图
3、形数据库[2],它遵循着属性图形数据模型。相对于关系数据模型来说,Neo4j重点解决了拥有大量连接的传统RDBMS在查询时出现的性能衰退问题。通过围绕图形进行数据建模,Neo4j会以相同的速度遍历结点与边,其遍历速度与构成图形的数据量没有任何关系。此外,Neo4j还提供了非常快的图形算法、推荐系统和OLAP风格的分析,而这一切在目前的RDBMS系统中都是无法实现的。Neo4j是一个高性能、高可抗靠性、可扩展的、完全兼容ACID的图数据库。它完全由Java语言实现,能够部署到多种系统上。在Neo4j中,数据以一种针对图网络进行过优化的格式保存在磁盘上。Neo4j的内核是一种极快的图引擎,具有
4、数据库产品期望的所有特性,如恢复、两阶段提交、符合XA等。下面我们将针对图形数据库Neo4j的实际应用进行阐述,并与关系数据库进行比较。 1 Neo4j的应用模式 Neo4j支持2种应用模式[3],分别是内嵌模式和服务器模式。内嵌模式将数据库文件内嵌到应用程序中,作为程序的一个单独数据库,供应用程序内部自行调用。服务器模式将Neo4j作为单独的服务器进行部署,利用REST风格的方式进行调用,服务器模式时,系统由2部分组成: (1) 客户端通过RMI方式发送命令到服务器; (2) 服务器接收并处理这些命令,返回执行后的结果。在这种应用模式下,Neo4j通过Cypher查询语言来进行图
5、的搜索与查询操作。Cypher是一个描述性的图查询语言,允许不必编写图形结构的遍历代码就可实现对图的存储和效率查询。Cypher不同于Java或脚本语言,而更类似于关系数据库中的SQL语言。8 在内嵌应用程序的应用模式下,应用程序直接使用Neo4j数据库,开发者可以通过JavaAPI直接与图模型交互,这个API提供了非常灵活的数据结构。通俗的说就是通过直接编码的方式与Neo4j图数据库交互。接下来我们将主要阐述内嵌应用模式。 2 Neo4j内嵌模式数据库创建 下面通过一个简单的例子来展示Neo4j的基本功能。图1的这个小型图是文献作者合作关系与论文引用关系图谱,共有四种关系类型,分别
6、是WRITE,WRITE_BY,COAUTHOR,CITE和CITE_BY。 图1 论文作者合作关系与论文引用创建图形数据库的步骤如下(Java表示): Step 1:使用枚举来表示结点间的关系类型: enum Relationships implements RelationshipType { COAUTHOR,WRITE,CITE } Step 2:调用内嵌模式创建接口,在DB_PATH路径下建立一个新的图数据库,该路径人为指定,如果数据库已经存在则直接打开,否则新建数据库。 graphDb = new EmbeddedGraphDatabase(DB_PATH); St
7、ep 3:创建图,存储作者、论文及其内在关联,对图的所有修改均放在事务中,从而保证数据的完整性。 public void createGraph() { Transaction tx = graphDb.beginTx(); try {8 Node Miche = graphDb.createNode(); Miche.setProperty("name", "Miche"); Node Robert = gr
此文档下载收益归作者所有