图数据库Neo4J的使用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图数据库Neo4J的使用

吴斌2013.7.5 wubin@ 1,图数据库Neo4J的介绍:

Neo4J是个开源的图数据,很好用,轻便灵活,嵌入式,功能强大,而且相关资料比较齐全。按照Neo4J官方网站公布,该数据库可以支持数十亿的节点数:

massively scalable, up to several billion nodes/relationships/properties

而且支持分布式部署,Master,Slave。

对Neo4J的性能和可用性的介绍:/player/6qUmb/native/autoplay/

Neo4J的CEO有个视频简单介绍Neo4J:/video/56040747

2,安装:

Neo4J的安装使用非常简单。下载一个稳定版本,解压,运行Neo4j.bat(windows版本)即可。下载地址/download,目前比较好用的稳定版本是1.9.1。

然后可以访问WEB管理界面,地址:http://localhost:7474/webadmin

3,Neo4J的使用方式包括:

1)可以写程序,添加,更新,用JAVA,Python,PHP, .NET等语言都可以实现。

2)可以用命令行,添加,更新,查看,Neo4J提供基于WEB的执行界面,提供类SQL语言执行,这些语言包括Cypher,Gremlin等。

如下图:

3)可以基于Neo4J提供的WEB UI界面添加,更新节点和关系,如下:

4) 可以使用附加工具(ETL)导入数据。也可以从关系数据库中导入数据。

/develop/import

4,使用JAVA访问Neo4J:

学习材料:/develop/java

/chunked/stable/tutorials-java-embedded.html

Neo4J中节点,边,都可以任意添加属性,边(关系)的可以自定义,是个枚举值,举例:

firstNode = graphDb.createNode();

firstNode.setProperty( "message", "Hello, [Node A] , " );

secondNode = graphDb.createNode();

secondNode.setProperty( "message", " The Graph DB World! [Node B] " );

relationship = firstNode.createRelationshipTo( secondNode, RelTypes.KNOWS ); relationship.setProperty( "Reason", "Use Neo4j for testing [Edge] , " );

还有一点很重要,Neo4J可以支持自定义节点类,就是说你可以按照你的需要设计Class做节点,也就是说你可以给每个节点增加任意方法,实现任意功能,这个功能的扩展性非常强。而且Neo4J提供嵌入式程序的能力,你可以把它当做一个Lib来使用,可以在保留其他应用开放方式的情况下,提供图数据库的强大能力。

其例子socnet可以在Neo4J的网站上查找。

5,Cypher介绍:

Cypher是Neo4J自己提供的一种高效类SQL语言,用于图数据和关系查询。关系查询采用一种模式匹配的方式,比较直观。

很好的学习材料:/learn/cypher

这个Video讲的很清楚:/video/50389825

创建节点:(每个Node,系统会自动建立一个唯一的id,不可修改。下面的ID是Node的属性。)

create n={name:'Motion',ID:'M001'} return n;

创建关系:

start n=node(14),m=node(20) create m-[r:KNOWS]-n return r;

查询:

按id查询(这里的id是系统自动创建的):

start n=node(20) return m;

查询所有节点:

start n=node(*) return n;

查询属性,关系:

start n=node(9) return n,,n.ID,n.level; //查看指定节点,返回需要的属性

start n=node(*) match (n)-[r:SubClassOf]->m return m,n,,n.ID,r; //查找指定关系

按关系查询多个节点:

start a = node(14) match b-[r]<->a return r,b;

start a = node(0) match c-[:KNOWS]->b-[:KNOWS]->a return a,b,c; //查找两层KNOWS关系的节点

start a = node(21) match b-[*]->a return a,b; //查找所有与a节点有关系的节点

使用Where条件进行查询:(不用建立Index也可以使用)

start n=node(*) where ="Activity" return n;

并且可以使用特定符号:

start n=node(*) where n.ID?="A*" return n;

start n=node(*) where HAS(n.type) return n,,n.ID,n.type; //如果存在属性type,并且以A 开头,就输出节点。

配置文件自动建立索引:

修改conf目录下的neo4j.properties文件内容如下,重启Neo4J,对重启后新建的Node生效。# Enable auto-indexing for nodes, default is false

node_auto_indexing=true

# The node property keys to be auto-indexed, if enabled

node_keys_indexable=name,ID

# Enable auto-indexing for relationships, default is false

相关文档
最新文档