第二章 图数据库概念
这一章是对图数据库模型的介绍。
2.1、Neo4j 图数据库
图数据库将数据存储在图表里,是一种最通用的数据结构,能够快速的获取并优雅的展现各种种类的数据。Neo4j 图数据库是基于 property graph model 这个项目的,有兴趣的同学可以参考下链接奉上:https://github.com/opencypher/openCypher/blob/master/docs/property-graph-model.adoc。
想要了解图数据库的专业术语可以参考附录B——术语部分
下面是一个示例图,我们将在下面的章节中逐步介绍:
2.1.1、节点
Neo4j 中的 node(节点),properties(属性)和lables(标签) 也在项目 property graph model 中有具体描述,有兴趣的同学可以参考下,链接奉上:https://github.com/opencypher/openCypher/blob/master/docs/property-graph-model.adoc#pgmdefinitions-node。
Nodes 经常被用来表示实体,但依赖关系也一样可以表示实体。
最简单的图只有一个节点,以下面的图为例,由一个节点和一个title 属性组成。
让我们再加两个节点,并在之前例子的节点上增加一个属性。
2.1.2. Relationships (关系)
Neo4j 中的 relationhip(关系),关系类型和properties(属性)和也在项目 property graph model 中有具体描述,有兴趣的同学可以参考下,链接奉上:https://github.com/opencypher/openCypher/blob/master/docs/property-graph-model.adoc#pgmdefinitions-relationship
节点之间的关系是图数据库很重要的一部分,通过关系可以找到很多关联的数据,关系两端连接着两个节点,确保有一个有效的来源节点和一个目标节点。
关系将节点组织成任意结构,允许一个图组成一个list、一个tree结构、一个map 或者复合实体,任何一个都可以组合成更复杂、更丰富的互连结构。
一旦我们添加关系,我们的示例图就更有意义了:
上图的例子使用 ACTED_IN 和 DIRECTED 作为关系类型。在 ACTED_IN 关系上的 roles 属性是拥有一个值的数组。
下图是一个 ACTED_IN 的关系,两端来源节点 Tom Hanks 和目标节点 Forrest Gump。
我们可以看出,Tom Hanks 节点有一个输出的关系,Forrest Gump 节点有个输入的关系。
关系在任一方向都会被遍历访问。这意味着我们并不需要在不同方向都新增关系。
而关系总是会有一个方向,所以当这个方向对你的应用没有意义时你可以忽略方向。
特别注意一个节点可以有一个关系是指向自己的:
让我们看看在我们的示例中,简单地跟踪一个节点的关系可以发现什么:
表格1:使用关系类型和方向
2.1.3. Properties (属性)
Properties 是由Key-Value键值对组成,键名是字符串。支持的属性值的类型有:
• Numeric values 数值型
• String values 字符串
• Boolean values 布尔型
• Lists of any of the above values 以上所有类型的List
null不是一个合法的属性值。 Nulls能代替模仿一个不存在的Key。
后面还有蛮多,但是不知道为什么贴出来无法保存,发不出来。
备注:此章是个人学习之余翻译,若存在翻译用词不当或者翻译错误的地方,大家可以在公众号回复,我会一一修改。