Neo4j图库概念和基础语句

Neo4j 使用属性图数据库模型。

图数据结构由可以通过关系连接的节点(离散对象)组成。

示例 1. 图结构的概念。

具有三个节点(圆圈)和三个关系(箭头)的图形。

 

Neo4j 属性图数据库模型包括:

  • 节点描述域的实体(离散对象)。

  • 节点可以有零个或多个标签来定义(分类)它们是什么类型的节点。

  • 关系描述了源节点目标节点之间的连接。

  • 关系总是有一个方向(一个方向)。

  • 关系必须有一个类型(一种类型)来定义(分类)它们是什么类型的关系。

  • 节点和关系可以具有进一步描述它们的属性(键值对)。

在数学中,图论是对图的研究。

在图论中:

  • 节点也称为顶点或点。

  • 关系也称为边、链接或线。

1. 示例图

下面显示的示例图,介绍了属性图的基本概念:

示例 2. 示例图。
 

要创建示例图,请使用 Cypher 子句CREATE

<span style="color:#2d3748"><span style="background-color:#ffffff"><code class="language-cypher"><span style="color:#718096">CREATE</span> (:<span style="color:#3182ce">Person</span>:Actor {name: <span style="color:#2f855a">'Tom Hanks'</span>, born: <span style="color:#3182ce">1956</span>})-[:<span style="color:#3182ce">ACTED_IN</span> {roles: [<span style="color:#2f855a">'Forrest'</span>]}]->(:<span style="color:#3182ce">Movie</span> {title: <span style="color:#2f855a">'Forrest Gump'</span>})<-[:<span style="color:#3182ce">DIRECTED</span>]-(:<span style="color:#3182ce">Person</span> {name: <span style="color:#2f855a">'Robert Zemeckis'</span>, born: <span style="color:#3182ce">1951</span>})</code></span></span>

2.节点

节点用于表示域的实体(离散对象)。

最简单的图是没有关系的单个节点。考虑下图,由单个节点组成。

示例 4. 节点。

节点标签为:

  • Person

  • Actor

属性是:

  • name: Tom Hanks

  • born: 1956

可以使用 Cypher 使用以下查询创建节点:

<span style="color:#2d3748"><span style="background-color:#ffffff"><code class="language-cypher"><span style="color:#718096">CREATE</span> (:<span style="color:#3182ce">Person</span>:Actor {name: <span style="color:#2f855a">'Tom Hanks'</span>, born: <span style="color:#3182ce">1956</span>})</code></span></span>

3.节点标签

标签通过将节点分组(分类)为集合来塑造域,其中具有特定标签的所有节点都属于同一集合。

例如,所有代表用户的节点都可以用 label 标记User。有了这些,您可以要求 Neo4j 仅在您的用户节点上执行操作,例如查找具有给定名称的所有用户。

由于标签可以在运行时添加和删除,它们也可以用于标记节点的临时状态。Suspended标签可以用来表示被暂停的银行账户,标签Seasonal可以表示当前时令蔬菜。

一个节点可以有零到多个标签。

在示例图中,节点标签 、PersonActor用于Movie描述(分类)节点。可以添加更多的标签来表达数据的不同维度。

下图显示了多个标签的使用。

示例 5. 多个标签。

4. 关系

关系描述了源节点目标节点之间的连接是如何相关的。节点可能与自身有关系。

关系:

  • 连接源节点目标节点

  • 有一个方向(一个方向)。

  • 必须有一个类型(一种类型)来定义(分类)它是什么类型的关系。

  • 可以具有进一步描述关系的属性(键值对)。

关系将节点组织成结构,允许图形类似于列表、树、地图或复合实体——其中任何一个都可以组合成更复杂、更丰富的互连结构。

示例 6. 关系。

关系类型:ACTED_IN

属性是:

  • roles: ['Forrest']

  • performance: 5

roles属性有一个数组值,其中包含一个项目 ( 'Forrest')。

可以使用 Cypher 使用以下查询创建关系:

<span style="color:#2d3748"><span style="background-color:#ffffff"><code class="language-cypher"><span style="color:#718096">CREATE</span> ()-[:<span style="color:#3182ce">ACTED_IN</span> {roles: [<span style="color:#2f855a">'Forrest'</span>], performance: <span style="color:#3182ce">5</span>}]->()</code></span></span>

您必须创建或引用源节点目标节点才能创建关系。

关系总是有方向的。但是,在没有用处的地方可以忽略方向。这意味着不需要添加相反方向的重复关系,除非需要正确描述数据模型。

一个节点可以和它自己有关系。表达Tom Hanks KNOWS他自己将被表达为:

示例 7. 与单个节点的关系。

5. 关系类型

关系必须只有一种关系类型。

下面是一个ACTED_IN关系,Tom Hanks节点作为源节点Forrest Gump作为目标节点

示例 8. 关系类型。
 

观察该Tom Hanks节点具有传出关系,而该Forrest Gump节点具有传入关系。

6. 属性

属性是用于在节点和关系上存储数据的键值对。

属性的值部分:

  • 可以保存不同的数据类型,例如numberstringboolean.

  • 可以保存包含例如字符串、数字或布尔值的同构列表(数组)。

示例 9. 数字
<span style="color:#2d3748"><span style="background-color:#ffffff"><code class="language-cypher"><span style="color:#718096">CREATE</span> (:<span style="color:#3182ce">Example</span> {a: <span style="color:#3182ce">1</span>, b: <span style="color:#3182ce">3.14</span>})</code></span></span>
  • 该属性具有值为a的类型。integer1

  • 该属性具有值为b的类型。float3.14

示例 10. 字符串和布尔值
<span style="color:#2d3748"><span style="background-color:#ffffff"><code class="language-cypher"><span style="color:#718096">CREATE</span> (:<span style="color:#3182ce">Example</span> {c: <span style="color:#2f855a">'This is an example string'</span>, d: <span style="color:#3182ce">true</span>, e: <span style="color:#3182ce">false</span>})</code></span></span>
  • 该属性具有值为c的类型。string'This is an example string'

  • 该属性具有值为d的类型。booleantrue

  • 该属性具有值为e的类型。booleanfalse

示例 11. 列表
<span style="color:#2d3748"><span style="background-color:#ffffff"><code class="language-cypher"><span style="color:#718096">CREATE</span> (:<span style="color:#3182ce">Example</span> {f: [<span style="color:#3182ce">1</span>, <span style="color:#3182ce">2</span>, <span style="color:#3182ce">3</span>], g: [<span style="color:#3182ce">2.71</span>, <span style="color:#3182ce">3.14</span>], h: [<span style="color:#2f855a">'abc'</span>, <span style="color:#2f855a">'example'</span>], i: [<span style="color:#3182ce">true</span>, <span style="color:#3182ce">true</span>, <span style="color:#3182ce">false</span>]})</code></span></span>
  • 该属性f包含一个值为 的数组[1, 2, 3]

  • 该属性g包含一个值为 的数组[2.71, 3.14]

  • 该属性h包含一个值为 的数组['abc', 'example']

  • 该属性i包含一个值为 的数组[true, true, false]

有关可用数据类型的详细说明,请参阅Cypher 手册 → 值和类型

7.遍历和路径

遍历是您如何查询图表以找到问题的答案,例如:“我的朋友喜欢哪些我还没有拥有的音乐?”或“如果电源出现故障,哪些 Web 服务会受到影响? ”。

遍历图是指按照一定的规则遵循关系来访问节点。在大多数情况下,仅访问图的一个子集。

示例 12. 路径匹配。

为了根据小型示例数据库找出汤姆汉克斯演过哪些电影,遍历将从Tom Hanks节点开始,遵循ACTED_IN与节点连接的任何关系,并最终Forrest Gump得到结果(见虚线):

 

遍历结果可以作为长度为的路径返回1

 

最短可能路径的长度为零。它包含一个节点并且没有任何关系。

示例 13. 长度为零的路径。

仅包含单个节点的路径的长度为0

 

示例 14. 长度为 1 的路径。

包含一个关系的路径的长度为1

 

8. 架构

Neo4j 中的模式是指索引和约束。

Neo4j 通常被描述为schema optional,这意味着不需要创建索引和约束。您可以创建数据——节点、关系和属性——而无需预先定义模式。可以在需要时引入索引和约束,以获得性能或建模优势。

9. 索引

索引用于提高性能。要查看如何使用索引的示例,请参阅使用索引。有关如何在 Cypher 中使用索引的详细说明,请参阅Cypher 手册 → 索引

10. 约束

约束用于确保数据符合域的规则。要查看如何使用约束的示例,请参阅使用约束。有关如何在 Cypher 中使用约束的详细说明,请参阅Cypher 手册 → 约束

11. 命名约定

节点标签、关系类型和属性(关键部分)区分大小写,例如,表示该属性name与该属性不同Name

建议使用以下命名约定:

表 1. 命名约定
图实体推荐款式例子

节点标签

驼峰式,以大写字符开头

:VehicleOwner而不是:vehice_owner

关系类型

大写,使用下划线分隔单词

:OWNS_VEHICLE而不是:ownsVehicle

财产

小写驼峰式,以小写字符开头

firstName而不是first_name

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值