NEO4J 图数据库哪里和哪里 从哪里开始

2020-05-09 16:55:27 浏览数 (1)

上期已经安装了图数据库,本期就该讨论到底这个图数据库里面的一些基本的概念和如何操作。最近听到一句话,年轻不年轻,不是看年龄,而是看你对新鲜事物的热情,即使你20岁,谈起新事物也是一脸的不屑,只能说明身体和灵魂分了家。闲话不谈 回归正题。

节点和节点之间可以存在多种关系,单向,双向

上图是一个人际关系图,其中的每个人的关系是凌乱的,一个人对另外的几个人之间的角色也是不同的,这里NEO4J 通过 lable 来定位一个节点(方块位置)在整体中的扮演的角色,例如这张图中“某公司的客户”,就是定义这群人在这个图中的角色,都是某公司的客户。用这样的概念可以将这些人,进行一个一致性的分类。

理解NEO4J 中的关键的几个属性:

1 节点:下图中每个方块可以看做一个节点

2 属性:每个节点有多个属性,以 KEY VALUE 的形式来进行描述

3 关系: 节点和节点之间的关系,也是通过key value的方式来存储,同时节点和节点的关系不唯一,可以双向

4 标签:标签就是这组节点的共性,例如都是某公司的职员,或者摇身一变都是一个城市的市民 ,标签是标记每个节点之间的相同点

个人浅薄的理解

1 节点,可以理解为传统数据的行的概念

2 关系:就是表和表之间 join 的概念 (这也是比传统数据库高明的地方,其实还是空间换了时间),关系本身也是带有方向和属性的,这也是传统数据库本身做不到的地方

3 属性:理解为一个MONGODB 里面的document,一个节点会有多种属性

4 标签:理解为mongodb里面的collection 或者 传统数据库中的表,但一个节点可以属于多个表,这个又超越了传统数据库的理解的理念。

图数据库是什么个人总结一下,一个通过key value来存储数据,并且在在查询前就建立了JOIN关系的,数据字段属于多个表的 “weirdo” 出现了。

实际上在安装完neo4j 本身他就拥有自己的exmaple 的指导

在输入 :play movie graph 后,你可以看到上图从如何创建,一个实例的图,找寻数据,查询数据等等这些操作

点击箭头,可以将要执行的sample movie 库,在执行框中执行,执行后结果如下。

下面贴部分代码,并辅以解释,加速学习进度

1 建立节点和属性 CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'}) CREATE (Keanu:Person {name:'Keanu Reeves', born:1964}) CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967}) 上面两句话创建了三个节点,

1 TheMatrix

2 Keanu

3 Carrie

这三个节点具有两个lable 也就是这三个节点目前属于两个表

1 Movie

2 Person

而这三个节点, {} 中的信息是代表这个节点的属性,也就是这个节点的内部信息,相当于字段以key value 形式表达,或直接理解为 mongodb的部分知识

所以建立节点需要几个信息,1 节点本身,2 节点属于哪个lable 3 节点本身的属性信息, 下面就开始创建相关的关系,也就是节点和节点之间爱你的关系

CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix), (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix), (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix), (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix), (LillyW)-[:DIRECTED]->(TheMatrix), (LanaW)-[:DIRECTED]->(TheMatrix), (JoelS)-[:PRODUCED]->(TheMatrix)

首先上面这句话的意思是(翻译成人类能看懂的文字)

1 keanu 作为一个演员在TheMatrix电影里面扮演了 Neo这个角色,同时

Carrie在TheMatrix 这个电影里面扮演了Trinity 这个角色,Laurence 在TheMatrix 电影里面扮演Morpheus角色,Hugo在TheMatrix 扮演Agent Smith 角色,LillyW LanaW Joels 导演了TheMatrix 这部电影。

通过这一个语句,将六个人与这部电影的关系描述清楚。

在能读懂一些简单的创建节点和关系的语句后,我们来一边创建创建节点,一边查询节点,加快理解的速度

CREATE (TomH:Person {name:'Tom Hanks', born:1956})

创建一个节点 TomH ,然后查询这个节点通过节点的属性

如果不理解,这里通过传统的数据库来翻译一下

select tom from Person where name = 'Tom Hanks';

CREATE (CloudAtlas:Movie {title:'Cloud Atlas', released:2012, tagline:'Everything is connected'})

创建一个MOVIE的节点,叫CloudAtlas ,并且相关的电影的title, released, tagline 等字段的内容

查询 tilte 等于 Cloud Atlas 返回节点本身

select CloudAtlas from Movie WHERE title = 'Cloud Atlas'

下面这张图的意思是 查找tom hanks 到底演过几部电影

当然写到这里我也是纳闷了两天 tom 和 tomHanksMovies 我根本就没有在任何地方输入过这些信息到NEO4J中,到底他们是怎么展示的这些信息,在经过琢磨后,照猫画虎的写出了下面查询Keanu 到底演过什么电影的查询语句。同样 K,Kmovies 我都没有输入过,到底是怎么回事???

See you next time

0 人点赞