Neo4J 1(二)|学习笔记

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 快速学习 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

七、总结

 

五、Data Modeling with Graphs

1、查询的时候提供了一种叫 Cypher 的东西,Cypher 就是图数据库的查询语句,比如说在下图中

image.png

如果要用 Cypher 描述这张图的信息容量是这样描述的,有一个叫 emil 的人,他有一个键值对是 name:‘Emil’,有一个 KNOWS 关系关联的对象是另外一个 person,名字叫 jim,这个关系的方向用小于号和减号来描述的,里面的键值对是 name:‘Jim’,name:jim 还有一个 KNOWS,是减号加一个大于号,后面还是一个 person,名字是 lan,里面的键值对是 name:‘lan’,它又 KNOWS emil,又有一个 KNOWS 关系,emil 在前面定义过,直接引用,就把上面这张图描述出来了。

(emil:Person {name:'Emil'})<-[:KNOWS]-(jim:Person {name:'Jim'})-[:KNOWS->(lian:Person {name:'lan'})->[:KNOWS]

->(emil)

2、以纯文本的方式描述这张图,描述好这张图之后,下面就可以对它进行操作(query)。

image.png

深蓝色的表示关键字,要搜一个人,在这里面用a来表示,他的名字是 jim。a这个人认识b,b又认识c,或者a直接认识c,要找这种关系,然后把符合条件的b和c都拿出来,就是说他要找直接认识的人或者通过一个中间人能够认识的人。lan 这个人就符合第二个条件,他直接认识a;emil 这个人符合第一个条件,是通过 lan 认识a。这个查询条件跟 SQL 不一样,这是他自己提供的叫做 Cypher 查询工具语言,Cypher 尽量和 SQL 绑定,有 WHERE 表示条件,CREAT 表示要创建节点,MERCE 要把图里面某些节点和关系和其它的节点和关系合并等等。

Querying Graphs: Cypher

The other clauses we can use in a Cypher query include:

-WHERE

·Provides criteria for filtering pattern matching results.

- CREATE and CREATE UNIQUE

·Create nodes and relationships.

- MERGE

·Ensures that the supplied pattern exists in the graph, either by reusing existing nodes and relationships that match the supplied predicatesor by creating new nodes and relationships. -DELETE

·Removes nodes,relationships and properties

- SET

·Sets property values

- FOREACH

·Performs an updating action for each element in a list

- UNION

·Merges results from two or more queries.

-WITH

·Chains subsequent query parts and forwards results from one to the next. Similar to piping commands in Unix.

- START

·Specifies one or more explicit starting points-nodes or relationships-in the graph.

3、下图是机房里实体的 er 图,描述机房的构成。

image.png

机房有很多数据库服务器(一主两从),上面是运行的一些应用,这些应用会访问到不同的数据库上,比如 APP 1 和 APP 2 可能会修改数据库,所以连到主;APP 3 只是读的,所以连到从上。从的需要跟主的做同步,三个应用再分别运行到五个虚拟机上,其中 APP 1和APP 3有两个虚拟机,APP 2有一个,这五个虚拟机部署在三个物理机上,其中有三台在一个物理机上,另外两个分别在一台物理机上运行;这三台服务器在两个机架上,这两个机架上各有一个负载均衡器;User 3在访问APP 3,这是一个数据中心的结构。在这个结构下用关系型数据库建模,

image.png

机架对着负载均衡器,机架上可以有零个或多个 server,每个 server 上会有一个或多个虚拟机,虚拟机上可以跑一个或多个应用,应用有 user,会访问数据库,数据库里面会有一个副本。 

4、er 图建出来之后得到的关系型数据库的表如图,

image.png

这里面关系非常多,在做复杂操作的时候,会包含章余操作,有的甚至会是大量的章余操作,所以它的效率不一定高。如果用图数据库存储,只要把节点都抽象出来,再把关系都抽象出来,然后把节点和边分别存储。

image.png

节点有 Database 类、App 类、Server 类、VM 类、Rack 类等等,原封不动的按刚才的样子进行部署描述,产生的这样结构。可以写出一些搜索条件,比如说 user.name 等于 user 3,并且 asset 的状态是 down,也就是想知道user 3这个人在访问 asset 的状态因为某种原因宕机的机器是什么。

- In our graph we can find the faulty equipment with the following query:

·MATCH (user:User)-[*1..5]-(asset:Asset)

WHERE username = 'User 3'AND asset.status = 'down' RETURN DISTINCT asset

把数据库、APP、虚拟机等等除了 user 之外的东西叫做 Asset,他们都是asset 的一个子类。不管是应用还是虚拟机,还是物理机,它们都有正在运行或者是 down 的状态。对于 user 3这个人,他用到了 APP 3,APP 3用到了server 3,这个数据库 server 要跟主的 server 做同步。往下它用到了虚拟机,这个虚拟机在物理机上,物理机在机架上,机架上没有出路,就到此为止。他会在三条路里面去搜索所有的涉及到的 asset 。下面是一些其他的搜索语句,

- This allows us to match paths such as:

(user)-[:USER_OF]->(app)

(user)-[:USER_OF]->(app)-[:USES]->(database)

(user)-[:USER_OF]->(app)-[:USES]->(database)-[:SLAVE_OF]->(another-database)

(user)-[:USER_OF]->(app)-[:RUNS_ON]->(vm)

(user)-[:USER_OF]->(app)-[:RUNS_ON]->(vm)-[:HOSTED_BY]->(server)

(user)-[:USER_OF]->(app)-[:RUNS_ON]->(vm)-[:HOSTED_BY]->(server)-[:IN]->(rack)

(user)-[:USER_OF]->(app)N:RUNS_ON]->(vm)-[:HOSTED_BY]->(server)-[:IN]->(rack)<-[:IN]-(load-balanEer)

5、通配符  (user:User)-[*1..5]-(asset:Asset),user 和 asset 最多到五层关系关系起来的 asset,要检查一下到底是哪个 down。一层关系直接到APP,两层关系到数据库,三层关系到主从备份,两层关系的还有虚拟机,三层关系到 server,server 再到 rack,rack 再到 load balance。他的意思是通过user,通过五层的关系连接能够产生关联的 asset 哪些属于down。他是五层关系,不需要出度,需要入度,所以他可以一直到机架。可以通过这样一条简单的语句去搜索跟 User 3相关系的所有的 asset 的状态,到底是符合 up 还是 down。如果用关系型数据库,不能通过一条语句去实现,关系型数据库表都有很多。

image.png

首先要从 user 去找跟他有关系的,其次,他有好几层去算,他的关系还需要自己记录,用关系型数据库实现刚才的逻辑,SQL语句肯定是非常复杂的。他通过通配符暗含的是一串,用一条 SQL 写不出这样的东西,而用图数据库非常容易描述它。这是一个非常具体的例子,告诉他的优势在哪里。

相关文章
|
算法 索引
带你读《图解算法小抄》十五、搜索(3)
带你读《图解算法小抄》十五、搜索(3)
|
算法
带你读《图解算法小抄》十五、搜索(4)
带你读《图解算法小抄》十五、搜索(4)
|
算法
带你读《图解算法小抄》十五、搜索(2)
带你读《图解算法小抄》十五、搜索(2)
|
算法
带你读《图解算法小抄》十五、搜索(1)
带你读《图解算法小抄》十五、搜索(1)
带你读《图解算法小抄》十五、搜索(1)
|
存储 NoSQL 关系型数据库
Neo4J 1(一)|学习笔记
快速学习 Neo4J 1(一)
245 0
Neo4J 1(一)|学习笔记
|
存储 NoSQL 搜索推荐
Neo4J 1(三)|学习笔记
快速学习 Neo4J 1(三)
168 0
Neo4J 1(三)|学习笔记
|
SQL JSON 搜索推荐
认识 PostgreSQL 中与众不同的索引(一)|学习笔记
快速学习认识 PostgreSQL 中与众不同的索引(一)
286 0
认识 PostgreSQL 中与众不同的索引(一)|学习笔记
|
搜索推荐 算法 关系型数据库
认识 PostgreSQL 中与众不同的索引(二)|学习笔记
快速学习认识 PostgreSQL 中与众不同的索引(二)
168 0
认识 PostgreSQL 中与众不同的索引(二)|学习笔记
|
编解码 开发者
数字音频基础(上)| 学习笔记
快速学习数字音频基础(上),介绍了数字音频基础(上)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(上)| 学习笔记
|
存储 人工智能 算法
数字音频基础(下)| 学习笔记
快速学习数字音频基础(下),介绍了数字音频基础(下)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(下)| 学习笔记

热门文章

最新文章

下一篇
开通oss服务