一、 什么是图数据库
图数据库用图来存储数据,是最接近高性能的一种用于存储数据的数据结构方式之一。
图形数据库是以图形结构的形式存储数据的数据库。 它以节点,关系和属性的形式存储应用程序的数据。 正如RDBMS以表的“行,列”的形式存储数据,GDBMS以“图形”的形式存储数据。
1.1 一个图由无数的节点和关系组成
最简单的图是单节点的,一个记录,记录了一些属性。一个节点可以从单属性开始,成长为成千上亿,虽然会有一点点麻烦。从某种意义上讲,将数据用关系连接起来分布到不同节点上才是有意义的。
1.2 热门图形数据库
Neo4j是一个流行的图数据库。 其他图形数据库是Oracle NoSQL数据库,OrientDB,HypherGraphDB,GraphBase,InfiniteGraph,AllegroGraph。
1.3 图形
图形是一组节点和连接这些节点的关系。 节点和关系包含表示数据的属性。 属性是用于表示数据的键值对。
我们将在后面的章节中讨论“什么是节点,什么是关系和什么是属性”。
二、Neo4j简介
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。
Neo4j 是目前最流行的图形数据库,支持完整的事务,在属性图中,图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置属性,顶点也称作节点,边也称作关系,每个节点和关系都可以由一个或多个属性。
Neo4j创建的图是用顶点和边构建一个有向图,其查询语言cypher已经成为事实上的标准。
它包括如下几个显著特点:
- 完整的ACID支持
- 高可用性
- 轻易扩展到上亿级别的节点和关系
- 通过遍历工具高速检索数据
Neo4j是:
- 一个开源
- 无Schema
- 没有SQL
- 图形数据库
图形数据库也称为图形数据库管理系统或GDBMS。
三、图数据库模型
3.1 节点
构成一张图的基本元素是节点和关系。在Neo4j中,节点和关系都可以包含属性。
下面让我们认识一个最简单的节点,他只有一个属性,属性名是name,属性值是Marko:
3.2 关系
节点之间的关系是图数据库很重要的一部分。通过关系可以找到很多关联的数据,比如节点集合,关系集合以及他们的属性集合。
一个关系连接两个节点,必须有一个开始节点和结束节点。
因为关系总是直接相连的,所以对于一个节点来说,与他关联的关系看起来有输入/输出两个方向,这个特性对于我们遍历图非常有帮助:
关系在任一方向都会被遍历访问。这意味着我们并不需要在不同方向都新增关系。而关系总是会有一个方向,所以当这个方向对你的应用没有意义时你可以忽略方向。特别注意一个节点可以有一个关系是指向自己的:
为了将来增强遍历图中所有的关系,我们需要为关系设置类型。注意 关键字 type 在这可能会被误解,你其实可以把他简单的理解为一个标签而已。
例1:有两种关系的最简单的社会化网络图
3.3. 属性
节点和关系都可以设置自己的属性。属性是由Key-Value键值对组成。
例2:包含两个属性的节点
例3:包含属性的关系
这里Emil->Johan的关系,包含了属性“since:2001”,Emil->Ian的关系,包含了属性”rating:5”
3.4 路径
路径由至少一个节点,通过各种关系连接组成,经常是作为一个查询或者遍历的结果。
最短的路径是0长度的像下面这样:
长度为1的路径如下: