首页 > 编程笔记 > MySQL笔记 阅读:1

Neo4j是什么,Neo4j数据库简介(新手必看)

1852 年,刚从伦敦大学学院毕业的 Francis Gutherie 发现了四色问题。四色问题在一个世纪后被 Kenneth Appel 和 Wolfgang Haken 解决,这被认为是图论真正的诞生。

在计算机领域中,图(Graph)是一种数据结构,由顶点(Vertex)、边(Edge)和属性(Property)组成,其中,顶点也称节点(Node),边也称关系。顶点和边可以设置属性,每个节点和关系可以有一个或多个属性。

Neo4j 是一种图数据库,Cypher 是一种图数据库操作语言。Neo4j 和 Cypher 的命名有一个有趣的来历,Neo 是电影《黑客帝国》中的主角,Cypher 是《黑客帝国》中投靠了机器世界的人类叛徒,而在图数据库 Neo4j 中,Cypher 是 Neo4j 的操作语句,两者互相赋能。

Neo4j 是一个高性能的 NoSQL 图数据库。Neo4j 又是一个嵌入式的、基于磁盘的、具备完全的事务特性的 Java 持久化引擎,可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。

Neo4j分为社区版和企业版,Neo4j 图数据库的查询语言是 Cypher,该语言可以操作和查询属性图。

Neo4j的结构

在图数据库中,表达数据的方式称为图数据模型,该数据模型对存储效率和查询效率的影响较大。目前使用的图数据模型有两种,分别是属性图和资源描述框架。

使用 Neo4j 创建的图是基于属性图这种数据模型的。属性图是有向图,由顶点、边、标签、关系类型和属性组成。在属性图中的所有节点是独立存在的,可以设置标签。拥有相同标签的节点属于一个分组,也就是一个集合。属性图中的关系通过关系类型来分组,类型相同的关系属于同一个集合。节点可以有 0 个、1 个或多个标签,但是关系必须设置关系类型,并且只能设置一个关系类型。关系是有向的,关系的两端分别是起始节点和结束节点,通过有向的箭头来标识方向。节点之间的双向关系通过两个方向相反的关系来标识。在属性图中,节点和关系是重要的实体,每个实体都有唯一标识 ID(Identity)。

1) 节点

构成一张图的基本元素是节点和关系。在 Neo4j 中,节点和关系都可以包含属性,如下图所示。


图 1 Neo4j节点和关系

节点经常被用来表示一些实体。下面介绍一个简单的节点,该节点只有一个属性,属性名是 name(姓名),属性值是 Marko,如下图所示:


图 2 节点示例

2) 关系

节点之间的关系是图数据库很重要的一部分。通过关系可以找到很多关联的数据,如节点集合、关系集合,以及它们的属性集合。

关系示例如下图所示:


图 3 关系示例

一个关系连接两个节点,因此关系必须包含起始节点和结束节点,如下图所示。


图 4 关系


因为关系总是直接相连的,所以对于一个节点来说,与它关联的关系有输入和输出两个方向,如下图所示。这个特性对于遍历图非常有帮助。

 


图 5 关系的输入和输出

需要特别注意的是,一个节点可以有一个关系是指向自己的,如下图所示。


图 6 节点

为了便于在将来增强遍历图中所有的关系,需要为关系设置类型(type)。注意,关键字 type 在这里可能会被误解,读者可以把它简单地理解为一个标签。


图 7 社会化网络图

上图展示的是一个有两种关系的社会化网络图。从图 7 中可以看出 Maja、Alice、Oscar 和 William 这 4 个人之间的关系:Alice 是服从(Follow)Oscar 管理的,Oscar 与 Maja 之间是互相 Follow 的平等关系,Oscar 则阻碍(Block)了 William 的发展。


图 8 Linux文件系统

上图展示的是一个简单的 Linux 文件系统,图中表示根目录“/”下有一个子目录 A,而 A 下有目录文件 B 和目录文件 C;B 是文件 D 的符号链接,即可指向 D,而 C 包含 D。从图 8 中可以顺着关系得到根目录下的所有文件信息。

3) 属性

节点和关系都可以设置自己的属性。在下图所示的属性组成关系图中,一个属性包含键和值两部分,表示属性是由键和值组成的,其中,键指向字符串,表示键是字符串类型;值的类型可以是多样的,如字符串、整型、布尔型等,也可以是 int[] 这种类型。


图 9 属性组成关系图

4) 路径

路径由至少一个节点通过多个关系连接组成,经常作为查询或者遍历的结果,如下图所示:


图 10 路径

下图中展示的是一个单独节点,它的路径长度为 0:


图 11 单独节点

下图展示的是长度为 1 的路径:


图 12 长度为 1 的路径

5) 遍历

遍历一张图就是按照一定的规则,跟随节点之间的关系,访问关联的节点集合。常见的情况是只有一部分子图被访问到,因为用户知道自己关注哪一部分节点或者关系。

Neo4j 提供了遍历的 API,可以让用户指定遍历规则。一种简单的遍历规则是宽度优先或深度优先。

Neo4j的优点

Neo4j 包括如下几个显著特点:

1) 完整的ACID支持

适当的 ACID 操作是保证数据一致性的基础。Neo4j 保证了事务中多个操作同时发生时数据的一致性。无论是采用嵌入模式还是多服务器集群,Neo4j 都支持这一特性。

2) 高可用性和高可扩展性

可靠的图形存储可以非常轻松地被集成到任何一个应用中。随着应用在运营中不断被开发或完善,它的性能问题肯定会逐步凸显出来。无论应用如何变化,Neo4j 只会受到计算机硬件性能的影响,不会受业务本身的约束。

一台部署了 Neo4j 的服务器可以承载亿级的节点和关系。当然,当单节点服务器无法承载数据需求时,可以部署分布式集群。

3) 通过遍历工具高速检索数据

图数据库最大的优势是可以存储关系复杂的数据。Neo4j 提供的遍历工具可以非常高效地进行数据检索,每秒可以达到亿级的检索量。

相关文章