Neo4J 1(三)|学习笔记

简介: 快速学习 Neo4J 1(三)

开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Neo4J 1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/75/detail/15850


Neo4J 1(三)

 

内容介绍:

一、Neo4J and RockDB

二、What is a Graph?

三、Graph Database

四、Options for Storing Connected Date

五、Data Modeling with Graphs

六、Building a Graph Database Application

七、总结

 

六、Building a Graph Database Application

1、明白它的优势之后,剩下的要去使用它。

· Describe the Model in Terms of th e Application's Needs

· Here's an example of a user story for r a book review web application:

- AS Areader who likes a book,I WANT to know which books other readers who like the same book have liked, so THAT I can find other books to read.

要去设计图数据库,看到哪一些是节点,节点之间应该有怎样的关系?在下图的节点中,

image.png

在这样四个节点构成的关系中可以看到,可以问 Alice 喜欢什么样的书?对于叫 Alice 的人,他喜欢 Dune 这本书,有多少跟 Alice 一样喜欢这本书的人?看看那些人,他们喜欢什么书?就可以把这些书推荐给Alice。

- since Alice likes Dune, find books that others who like Dune have enjoyed:

MATCH(:Reader {name:'Alice'})-[:LIKES]->(:Book {title:'Dune'})

<-[:LIKES]-(:Reader)-[:LIKES]->(bool ks:Book)

RETURN books.title

Reader 是 Alice,他喜欢的书是 Dune,想给 Alice推荐其他的书的想法是同样喜欢这本书的人,还喜欢看什么书,把这个书推荐给 Alice。就是所谓的协同过滤,有相同的爱好的话,一定会喜欢我喜欢的其他东西。Alice 喜欢这本书,这本书还有其他的人喜欢关系就返过来了,他们喜欢的书有哪些?把这些书的名字返回。在图数据库中是怎样描述这个模型的,是按照需求来描述查询的语句。

2、在图数据库中有实体的东西是节点,节点和节点之间的关系用 vn 来描述,描述两个节点之间存在一定关系,关系的方向一般都是有向的,它的方向再进一步澄清有没有关系的语义,到底是人喜欢书还是书喜欢人,方向要搞清楚。这些关系不止一个,可以有多个,但是如果方向是双向对等的,也可以用无向边来表示,就不用两个有向的关系来表示了。节点的属性就是一些实体的属性,比如人要有名字等等;关系的属性就是进一步支出和其他关系的差异,有权重来表示这个关系比其他关系更轻一些或更重要一些,这是在设计时候的依据。

Nodes for Things, Relationships for Structure

- Use nodes to represent entities that is,the things in our domain that are of interest to us, and which can be labeled and grouped.

- Use relationships both to express the connections between entities and to establish semantic context for each entity,thereby structuring the domain.

-Use relationship direction to further clarify relationship semantics. Many relationships are asymmetrical, which is why relationships in a property graph are always directed. For bidirectional relationships we should make our queries ignore direction, rather than using two relationships.

- Use node properties to represententity attributes, plus any necessary entity metadata,such as timestamps,version numbers,etc.

- Use relationship properties to express the strength,weight,or quality of a relationship,plusany necessary relationship metadata, such as timestamps, version numbers, etc 

3、下面是一些例子,怎样去建模?

Model Facts as Nodes

Employment

- The Figure shows how the fact of lan being employed by Neo Technology in the role of engineer can be repre sented in the graph.

image.png

一些事实把它建模成节点,比如说在雇佣关系里面,Neo 这个公司雇佣了 lan 这个人,给了他一个工程师的角色,这三者之间是通过一个叫 job 的对象产生关系,就表达了 lan 这个人是在中间那个时间雇佣的,他的雇主是 Neo,他受雇的角色是工程师,有了这样一个描述之后,就写出了下面的语句。

CREATE(:Person{name:'lan'})-[:EMPLOY MENT]->

(employment:Job

{start_date:'2011-01-05'})-[:EMPLOYER] ->(:Company {name:'Neo'}),

(employment)-[:ROLE]->(:Role {name:'er ngineer'})

创建一个人,这个人的名字叫 lan,有一个雇佣关系,得到了雇佣类型的 job,时间是 2011-01-05,job 的雇主关系是 Neo,给他的角色是工程师,这是描述上图的结构。

4、下面是一个类似的,就不再仔细讲解了。

image.png

真正的 Neo4J 在跑的时候,可以在一个集群里跑,前面加一个负载均衡器。也可以做一个叫 Embedded,启用服务器的时候,可以把它嵌入跑,这是一个具体的运行方式。

image.png


七、总结

为什么搜索起来比较快,这要进到数据库里面看,看他的存储机制是怎样的?本节课讲的例子可以跑,前提是必须安装 neo4j,装好 neo4j 之后启动项目才能跑起来。跑起来之后,如果能看到库里面的内容,有三个人之间的关系,会画一张图,例子跑出来的样子如下图。

image.png

下个课程会讲大数据相关的内容,大数据相关的内容会用到 jupyter notebook,提前安装。他是基于 python,先装python,再装 jupyter notebook,这样这些东西才能跑起来。

item 存到 order 里是有一个缺陷的,这个缺陷实际上是 item 会有冗余,比如说两个order,他们俩的东西是一个,item 可能就会有冗余,刚才图的设计就是希望减少 item 的冗余,如果碰到 item 会被若干个 order 引用的话只有一个。

相关文章
|
SQL NoSQL 算法
Neo4j极简教程
图数据库是NoSQL类数据库的一大典型代表,在国内图数据库属于新兴事物,其优异的复杂关系解决方案引起了国内众多大型互联网公司及IT开发者的关注,而Neo4j是目前图形化数据库中最为出色、最为成熟的产品。
736 0
Neo4j极简教程
|
机器学习/深度学习 SQL 数据库
NEO4J的入门和一些简单的操作
> 持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,[点击查看活动详情](https://juejin.cn/post/7147654075599978532 "https://juejin.cn/post/7147654075599978532") # 引言 今天我们继续学习NEO4J. # 创建 创建语句我们一般会使用create指令 我们首先在控制台上输入`neo4j.bat console`启动neo4j 然后打开你的浏览器,然后在浏览器地址栏中输入 `http://localhost:7687 - Neo4j Browser](http:
|
存储 NoSQL 关系型数据库
Neo4J 1(一)|学习笔记
快速学习 Neo4J 1(一)
237 0
Neo4J 1(一)|学习笔记
|
SQL 存储 NoSQL
Neo4J 1(二)|学习笔记
快速学习 Neo4J 1(二)
155 0
Neo4J 1(二)|学习笔记
|
存储 缓存 NoSQL
Neo4J 2|学习笔记
快速学习 Neo4J 2
362 0
Neo4J 2|学习笔记
|
编解码 开发者
数字音频基础(上)| 学习笔记
快速学习数字音频基础(上),介绍了数字音频基础(上)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(上)| 学习笔记
|
存储 开发者
数字音频基础(中)| 学习笔记
快速学习数字音频基础(中),介绍了数字音频基础(中)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(中)| 学习笔记
|
存储 人工智能 算法
数字音频基础(下)| 学习笔记
快速学习数字音频基础(下),介绍了数字音频基础(下)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(下)| 学习笔记
|
SQL 开发框架 Java
OR-Mapping 设计改进(ORMapping 简介)| 学习笔记
简介:快速学习 OR-Mapping 设计改进(ORMapping 简介)
246 0
OR-Mapping 设计改进(ORMapping 简介)| 学习笔记
|
存储 SQL NoSQL
Neo4j 学习笔记(一) 初遇篇
Neo4j 学习笔记(一) 初遇篇
Neo4j 学习笔记(一) 初遇篇