neo4j——图数据库初探 - JDream314的专栏 - 博客频道 - CSDN.NET
图数据库neo4j初探(下载地址:http://neo4j.org/ )
本篇将初步介绍一下图数据库neo4j,将分一下几点介绍:什么是neo4j、neo4j作用、neo4j用法简单介绍
1、什么是neo4j
neo4j是一种图数据库,同时它也是一种嵌入式数据库。它对图数据是以节点和边(关系)模式进行存储。每个节点可以包含一系列信息,通过Node类里面的setProperty()方法对节点信息进行存储,Node也可以使用createRelationshipTo()方法实现个节点和其他节点的联系,并且该方法返回的是一个Relationship对象,我们也可以对Relationship设置属性,也就是节点和节点之间的关系属性。什么叫关系属性?例如:person1àperson2,person1和person2的关系可以是朋友也可以是同学还可以是亲人,这里的朋友、同学、亲人就是这里的Relationship的属性。那么关系属性就是描叙两个节点之间的关系类型。这就方便在对节点进行查找的时候对节点进行过滤。如下图:
2、neo4j作用
上面对neo4j进行了简单的介绍,可知neo4j是一种对图数据进行存储,是一种嵌入式数据库。它可以将复杂的图数据以节点和边形式存储。例如:在我们现实社会中人与人之间的关系,这就是一个复杂的图,朋友也可以是多种多样的,怎样描叙这样复杂的图呢?Neo4j提供了比较简单的描叙方式。如图:
就上面的图可以根据neo4j提供的方法获取第一层朋友和第二层朋友: TraversalDescriptiontd = Traversal.description().breadthFirst().relationships(RelTypes.KNOWS, Direction.OUTGOING).filter(Traversal.returnAllButStartNode() ); 上面的代码所执行的是:同个一个事务获取一个事务描叙,然后根据这个事务描叙在一存储的图中过滤出我们想要的节点,这个事务描叙第一个是进行广度优先搜索(breadthFirst),接下类对节点关系进行过滤。Direction是指定关系的方向,RelTypes就是关系的类型。这样就可以获得相应的结果。
3、neo4j用法简单介绍
此处就neo4j的一个例子进行讲解(如图):
上面图是一个部门结构图,这个在我们现实生活中也是比较常见的。如:我们学校,它就是一个由各个部门构成的。如何对这种图进行查找,以获得我们想要的信息呢?
1)、获得各个部门的名:
TraversalDescription td =Traversal.description().breadthFirst().relationships(RoleRels.ROOT, Direction.INCOMING).relationships(RoleRels.PART_OF, Direction.INCOMING).filter(Traversal.returnAllButStartNode());
2)、获得所有的admin
TraversalDescription td =Traversal.description().breadthFirst().relationships(RoleRels.PART_OF, Direction.INCOMING).relationships(RoleRels.MEMBER_OF, Direction.INCOMING).filter(Traversal.returnAllButStartNode() );
3)、更具个人信息获得他所在的所有部门
Node jale = getUserByName( "Jale" );
TraversalDescription td = Traversal.description().depthFirst().relationships(RoleRels.MEMBER_OF, Direction.OUTGOING).relationships(RoleRels.PART_OF, Direction.OUTGOING).filter(Traversal.returnAllButStartNode() );
附录:
neo4j还提供了两种遍历的方式:一种是深度搜索,第二种是广度搜索。也提供了两种搜索算法,一种是A*算法,第二种是dijkstra算法。提高了编程人员的工作效率。同时neo4j也有简历索引的功能,方便了多节点的查找。
谢谢浏览!本篇到此 结束!