Neo4j 是什么?首先让我们看看 Neo4j 自己是怎么介绍自己的。下面是 Neo4j 官网 (www.neo4j.org) 首页上的一段话。
The World's Leading Graph Database
Neo4j is an open-source, high-performance, enterprise-grade NOSQL graph database.
就像Neo4j自己介绍的:Neo4j是世界领先的图数据库。这里提到图数据库,图数据库和我们常见的关系型数据库有什么不同呢?其实感觉二者就没有什么相同之处,完全不同的两种数据组织方式。下面我们就介绍下graph database的一些基本概念,大家可以自己感觉一下。
基本概念
Graph中最基本的组成是Node和Relationship。为了更加直观,我们看一下下面这张图,这是一个简单的社交网络。
1.Node(节点)
Node在Graph中通常表现为Entity,比如图中的”Joe”,“Bill”等几个人所对应的数据单元均称为“Node”。
与关系型数据库不同,在Graph base中Node无类型的概念。所有Node对于Graph database来说是没有任何差别的。比如上图中Joe-OWNS->房产,在现实中我们知道“房产”和“人“是两个截然不同的类型,但是对Graph dababase来说这两个节点是没有类型差别的,都是Graph Database的一个Node而已。
另外一个与关系型数据库不同的是,Node无Schema的概念。比如同样对于“人”的Node,有的Node具有属性“Addr”,有的则有属性“Age”,等等。也就是说每个Node的属性可以各不相同,没有schema的约束。
2. Relationship(关系)
Node之间的通过Relationship来关联。在上图中的“KNOWS”和“OWNS”均为“Relationship”。
与Node相同,Relationship也没有类型的概念。
但是Relationship有一个“Type”的说法,这点最容易引起误会。既然是说没有类型和schema概念,怎么这个地方又冒出来一个Type,这不是欺负人不认识英文吗?
说relationship没有类型是说在graph database中不像关系型数据库中的表,有Person表,House表的分类,每种表都自己特定的schema结构。在Graph database中所有的relationship的处理上都是一样,没有任何差别。但是每个relationship又有type,而这个type更“像”是一个属性的含义。比如Joe和bill之间的relationship的type是“KNOWS”,Joe与自己的那套房产的relationship的type是“OWNS”。
Relationship的另一个重要特性就是Direction:incoming和outgoing。分别对应图上的展示就是一个是进的方向,一个是出的方向。
如下图,体会其中relationship的Type和direction这两个特性。
3. Property(属性)
Node与Relationship均可以具有Property。比如图中Joe对应的节点就具有两个属性“name”、“Addr”。同样的relationship也同样可以具有 property,比如KNOWS关系附加了property “age=3”来表示“认识对方多少年”。
4. Traversal(遍历)
Joe与Derrick之间的人际关系,我们既可以选择Joe-[:KNOWS]->Bill-[:KNOWS]->Derrick,也可以选择Joe-[:KNOWS]->Sara-[:KNOWS]->Bill-[:KNOWS]->Derrick,而我们这个在图中游走的这个过程就称之为”Traversal”。通常情况下都不会需要遍历整图,需要的只是一个Sub-Graph,获取这个sub-graph的过程就需要Traversal来完成。
5. Path(路径)
Path是由一个或者多个Node、relationship组成的,Path通常作为query和traversal的结果返回。像刚才我们得到的Joe到Derrick的关系路线都是“path”,我们现在把两个path分别命名为path1和path2.
Path有Length的概念,length表示了路径中包含的relationship的数量。Path1的length为2,path2的length为3.
关于Graph database的基本概念就讲这些。