快速初步了解Neo4j与使用

Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注.

image.png

你可以把Neo看作是一个高性能的图引擎,该引擎具有成熟和健壮的数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。 [1]

Neo是一个网络——面向网络数据库——也就是说,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络上而不是表中。网络(从数学角度叫做图)是一个灵活的数据结构,可以应用更加敏捷和快速的开发模式。

1.下载Neo4j桌面版,这里需要先注册然后下载:

https://neo4j.com/download/

需要先注册:

image.png

2.下载后点击安装,这里你可以自己指定安装的目录,Next安装完成后如下:

image.png

我们可以依照图中创建一个project,然后点击start,这个时候我们进入一个Browser,这个我这里建立的是一个本地的模式,所以可以在本地进行操作,我们进入下一个页面:

image.png

进入这个页面后,我们可以在最顶上写代码语句

3.代码语句相关语法

我们将首先查看允许我们创建数据的子句。

要添加数据,我们只使用我们已知的模式。通过提供模式,我们可以指定我们想要成为图形的一部分的图形结构,标签和属性。

显然,最简单的条款被称为CREATE。它将继续直接创建您指定的模式。

对于我们到目前为止看到的模式,这可能如下所示:

CREATE (:Movie { title:"The Matrix",released:1997 })

如果我们执行此语句,Cypher将返回更改的数量,在这种情况下,添加1个节点,1个标签和2个属性。

+-------------------+
| No data returned. |
+-------------------+
Nodes created: 1
Properties set: 2
Labels added: 1

当我们开始使用空数据库时,我们现在拥有一个包含单个节点的数据库:

如果我们还想要返回创建的数据,我们可以添加一个RETURN子句,它引用我们分配给模式元素的变量。

CREATE (p:Person { name:"Keanu Reeves", born:1964 })
RETURN p

这是返回的内容:

+----------------------------------------+
| p                                      |
+----------------------------------------+
| Node[1]{name:"Keanu Reeves",born:1964} |
+----------------------------------------+
1 row
Nodes created: 1
Properties set: 2
Labels added: 1

如果我们想要创建多个元素,我们可以用逗号分隔元素或使用多个CREATE语句。

我们当然也可以创建更复杂的结构,例如ACTED_IN与角色信息的关系,或者DIRECTED导演的关系。

CREATE (a:Person { name:"Tom Hanks",born:1956 })-[r:ACTED_IN { roles: ["Forrest"]}]->(m:Movie { title:"Forrest Gump",released:1994 })
CREATE (d:Person { name:"Robert Zemeckis", born:1951 })-[:DIRECTED]->(m)
RETURN a,d,r,m

这是我们刚刚更新的图表的一部分:

在大多数情况下,我们希望将新数据连接到现有结构。这要求我们知道如何在图表数据中找到现有模式,我们将在下面介绍。

2.2.2.2。匹配模式

匹配模式是MATCH语句的任务。我们传递了迄今为止用过的相同类型的模式MATCH来描述我们正在寻找的东西。它类似于查询示例,只是我们的示例还包括结构。

一个MATCH声明将搜索我们指定,并返回模式每个成功的模式匹配一行

为了找到我们到目前为止创建的数据,我们可以开始查找标有Movie标签的所有节点。

MATCH (m:Movie)
RETURN m

这是结果:

这应该显示矩阵阿甘正传

我们也可以找一个特定的人,比如基努·里维斯

MATCH (p:Person { name:"Keanu Reeves" })
RETURN p

此查询返回匹配节点:

请注意,我们仅提供足够的信息来查找节点,而不是所有属性都是必需的。在大多数情况下,您可以使用SSN,ISBN,电子邮件,登录,地理位置或产品代码等关键属性进行查找。

我们还可以找到更多有趣的连接,例如Tom Hanks所扮演的电影片名以及他扮演的角色。

MATCH (p:Person { name:"Tom Hanks" })-[r:ACTED_IN]->(m:Movie)
RETURN m.title, r.roles
+------------------------------+
| m.title        | r.roles     |
+------------------------------+
| "Forrest Gump" | ["Forrest"] |
+------------------------------+
1 row

在这种情况下,我们只返回了我们感兴趣的节点和关系的属性。您可以通过点表示法访问它们identifer.property

当然,这只列出了他在Forrest Gump中作为Forrest的角色,因为这是我们添加的所有数据。

现在我们知道足够的新节点连接到现有的和可能结合起来MATCH,并CREATE以结构连接到图表。

2.2.2.3。附加结构

要使用新信息扩展图形,我们首先匹配现有连接点,然后使用关系将新创建的节点附加到它们。添加Cloud Atlas作为Tom Hanks的新电影可以像这样实现:

MATCH (p:Person { name:"Tom Hanks" })
CREATE (m:Movie { title:"Cloud Atlas",released:2012 })
CREATE (p)-[r:ACTED_IN { roles: ['Zachry']}]->(m)
RETURN p,r,m

这是结构在数据库中的样子:

[图片上传失败...(image-4da2a5-1533823118502)]

重要的是要记住,我们可以将变量分配给节点和关系,并在以后使用它们,无论它们是创建还是匹配。

可以在单个CREATE子句中附加节点和关系。为了便于阅读,它有助于将它们分开。

组合的一个棘手的方面MATCH,并CREATE为我们得到每个匹配的模式一行。这会导致后续CREATE语句对每行执行一次。在许多情况下,这就是你想要的。如果不是这样,请在CREATE语句之前移动语句MATCH,或者用后面讨论的方法更改查询的基数,或者使用下一个子句的get或create语义:MERGE

2.2.2.4。完成模式

每当我们从外部系统获取数据或者不确定图中是否已存在某些信息时,我们希望能够表达可重复(幂等)的更新操作。在Cypher中MERGE有这个功能。它的作用类似于MATCH or 的组合CREATE,它在创建数据之前首先检查数据是否存在。随着MERGE你定义图案被发现或创建的。通常,与MATCH您一样,您只想在核心模式中包含要查找的键属性。 MERGE允许您提供要设置的其他属性ON CREATE

如果我们不知道我们的图表是否已经包含Cloud Atlas,我们可以再次合并它。

MERGE (m:Movie { title:"Cloud Atlas" })
ON CREATE SET m.released = 2012
RETURN m
+--------------------------------------------+
| m                                          |
+--------------------------------------------+
| Node[5]{title:"Cloud Atlas",released:2012} |
+--------------------------------------------+
1 row

我们在任何两种情况下都得到结果:图表中已有的数据(可能多于一行)或新创建的单个Movie节点。

其中MERGE没有任何先前分配的变量的子句匹配完整模式或创建完整模式。它永远不会在模式中产生匹配和创建的部分混合。要实现部分匹配/创建,请确保为不应受影响的部分使用已定义的变量。

因此,最重要的MERGE是确保您不能创建重复的信息或结构,但它需要首先检查现有匹配的成本。特别是在大型图形上,扫描大量标记节点以获得特定属性可能是昂贵的。您可以通过创建支持索引或约束来减轻其中的一些,我们将在稍后讨论。但它仍然不是免费的,所以每当你一定不会创建重复数据使用CREATEMERGE

MERGE也可以断言关系只创建一次。要使其工作,您必须从先前的模式匹配中传入两个节点。
MATCH (m:Movie { title:"Cloud Atlas" })
MATCH (p:Person { name:"Tom Hanks" })
MERGE (p)-[r:ACTED_IN]->(m)
ON CREATE SET r.roles =['Zachry']
RETURN p,r,m

如果关系的方向是任意的,您可以不用箭头。 MERGE然后将检查任一方向的关系,如果未找到匹配关系,则创建新的定向关系。

如果您选择仅从前一个子句传入一个节点,则MERGE提供一个有趣的功能。然后,它将仅在给定模式的所提供节点的直接邻域内匹配,并且如果未找到则创建它。这对于创建例如树结构非常方便。

CREATE (y:Year { year:2014 })
MERGE (y)<-[:IN_YEAR]-(m10:Month { month:10 })
MERGE (y)<-[:IN_YEAR]-(m11:Month { month:11 })
RETURN y,m10,m11

这是创建的图形结构:

这里没有全局搜索两个Month节点; 它们仅在2014 Year节点的上下文中搜索。

这里我们可以参考如下的文档查看:

https://neo4j.com/docs/developer-manual/3.4/get-started/cypher/patterns-in-practice/

4.这里我们先建立一个Demo

比如我们平时看电影,张三可以用电影票看电影,李四也可以,他们都去看了同一个电影<葫芦娃>,相应的语句如下:

CREATE (a:Person { name:"张三",born:1956 })-[r:电影票 { roles: ["电影票"]}]->(m:Movie { title:"葫芦娃",released:1994 })
CREATE (d:Person { name:"李四", born:1951 })-[:也看]->(m)
RETURN a,d,r,m

我们建立之后的效果如下:

image.png

再比如一2014年的10月11月和12月之间的关系:

CREATE (y:Year { year:2014 })
MERGE (y)<-[:IN_YEAR]-(m10:Month { month:10 })
MERGE (y)<-[:IN_YEAR]-(m11:Month { month:11 })
MERGE (y)<-[:IN_YEAR]-(m12:month{month:12})
RETURN y,m10,m11,m12
image.png

我们可以看到neo4j中将几个有关联的对象进行了联系,并从箭头方向表示相应的关系,此时我们已经通过neo4j建了一个表的数据了.

快速初步了解Neo4j与使用相关推荐

  1. 一文带你快速初步了解云计算与大数据

    目录

  2. 图数据库-1-【Neo4j】的安装及使用

    使用neo4j存储树形无限级菜单 参考快速初步了解Neo4j与使用 参考neo4j python_Neo4j安装+Python操作Neo4j 参考Neo4j入门操作 参考图数据库neo4j通过py2n ...

  3. neo4j 查询同一节点的两个上级_手把手教你快速入门知识图谱 - Neo4J教程

    前言 今天,我们来聊一聊知识图谱中的Neo4J.首先,什么是知识图谱?先摘一段百度百科: 知识图谱(Knowledge Graph),在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程 ...

  4. 不了解喜欢的明星有什么关系?教你用Neo4j 快速构建明星关系图谱,让你比他自己还了解

    前言 本文将带你用 neo4j 快速实现一个明星关系图谱,因为拖延的缘故,正好赶上又一年的4月1日,于是将文中的几个例子顺势改成了"哥哥"张国荣.正所谓"巧妇难为无米之炊 ...

  5. 用 Neo4j 快速构建明星关系图谱,你一定感兴趣

    今天做一下你们感兴趣的事情,带你们用 neo4j 构建明星关系图谱,这次爬取一下娱乐圈专业的娱乐综合门户网站下载"明星"页的"更多明星"里所有9141条数据. ...

  6. 一文教你用 Neo4j 快速构建明星关系图谱

    更多有趣项目及代码见于:DesertsX/gulius-projects 前言 本文将带你用 neo4j 快速实现一个明星关系图谱,因为拖延的缘故,正好赶上又一年的4月1日,于是将文中的几个例子顺势改 ...

  7. 图数据库Neo4j简介

    图数据库Neo4j简介 转自: 图形数据库Neo4J简介 - loveis715 - 博客园 https://www.cnblogs.com/loveis715/p/5277051.html 最近我在 ...

  8. 数据库史上最大投资!Neo4j获3.25亿美元F轮融资

    整理 | Carol 出品 | CSDN(ID:CSDNnews) 近日,知名NOSQL图形数据库 Neo4j 宣布将获得 3.25 亿美元的投资.该轮投资由 Eurazeo 领投,GV(前身为 Go ...

  9. mysql三国人物库_一文带你使用neo4j生成三国人物社交关系图

    简介 最近给孩子买了三国演义,可是三国人物关系太复杂,就想着把三国人物关系做成一张图,这样方便看,整好neo4j图数据库非常适合社交关系的处理,下面就一起来看看,如何使用neo4j生成三国人物社交关系 ...

最新文章

  1. 单片机I/O口推挽输出与开漏输出的区别
  2. raid5和raid6对比
  3. SringBoot+Redis整合
  4. 趣谈设计模式 | 命令模式(Command):将命令封装为对象
  5. garageband 淡出_为什么史蒂夫·乔布斯(Steve Jobs)的GarageBand展示了有史以来最好的现场产品演示...
  6. git 忽略文件提交的几种姿势
  7. jconsole是否可以在生产环境使用_jconsole使用
  8. 1042. 字符统计(20)-PAT乙级真题
  9. 宽屏系统上播放幻灯片的设想
  10. 快手did did_gt edid的注册过程
  11. PLM项目目标及阶段
  12. edge浏览器被恶意插件劫持,不能删除由组织安装的扩展,提示您的浏览器由您的组织管理
  13. C 语言do with,Nonverbal (非语言的) communication has to do with gestures, movements andcloseness of two...
  14. 5款伊思儷超媒體繁体游戏 简体中文补丁
  15. win10 uwp 应用转后台清理内存
  16. vue调用本地摄像头实现拍照
  17. Vue之Hello World!
  18. Android程序员的十大转型之路
  19. 教学|3DsMAX怎么样制作环境贴图,3D建模步骤教程
  20. [九] ASP.NET CoreMVC 中的布局视图

热门文章

  1. java获取服务器上指定文件,java 读取服务器上文件
  2. css 实现垂直居中的五种方法
  3. java计算图片md5_java 计算 文件 md5
  4. 扫地机器人湿地_roborock 石头扫地机器人 30次使用评测
  5. 【UDS】ISO14229之0x27服务
  6. java执行aapt_第一章:在安卓上运行aapt
  7. 鉴源实验室丨汽车电子电气架构演进和域控制器发展方向
  8. 成都拓嘉辰丰:如何利用拼多多客服提升店铺转化
  9. java c s项目_tms java C/S项目开发,内容丰富,质量 谢谢下载使用! Develop 238万源代码下载- www.pudn.com...
  10. css2.0圆角,CSS圆角效果-CSS3常用属性集合