Neo4J 1(二)|学习笔记

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 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 写不出这样的东西,而用图数据库非常容易描述它。这是一个非常具体的例子,告诉他的优势在哪里。

相关文章
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
610 214
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
850 61
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1272 157
|
5天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
241 138
|
7天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
526 109