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

七、总结

 

五、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 写不出这样的东西,而用图数据库非常容易描述它。这是一个非常具体的例子,告诉他的优势在哪里。

相关文章
|
存储 数据采集 编译器
STC8系列单片机介绍
STC8系列单片机是中国STC公司生产的一款8位单片机系列产品。作为STC公司的主打产品之一,STC8系列单片机以其高性价比、丰富的外设资源和强大的功能而备受青睐。本文将详细介绍STC8系列单片机的特点、应用领域、开发工具和资源支持等方面。 一、STC8系列单片机的特点 1. 强大的8051内核:STC8系列单片机采用了高性能的8051内核,具有快速的指令执行速度和高效的运算能力。8051内核被广泛应用于嵌入式系统中,具有稳定可靠的特点。 2. 大容量闪存存储器:STC8系列单片机内置大容量的闪存存储器,可存储程序代码和数据。闪存容量从4KB到128KB不等,可以满足不同应用需求。闪存存储
2570 0
|
2月前
|
人工智能 运维 自然语言处理
3 个真实 GEO 成功案例 + 3 步关键词排名秘籍!开发者 / 企业快速落地 GEO,流量 & 转化双提升
本文聚焦 GEO 真实获客案例与实操技巧,通过教培机构、工业设备商、小众茶叶品牌三个实测案例,展现 GEO 落地成效:教培机构靠升学数据咨询量暴增 210%,工业设备商盯准技术痛点让单笔订单翻 5 倍,茶叶品牌借产地溯源实现客单价从 200 元飙至 500 元。核心分享三步零门槛关键词法:列客户痛点、加场景限定、数据筛词,还拆解了不同平台关键词偏好。提醒效果需 1-3 个月积累,内容需真实且持续优化。新手可直接对照案例思路,结合自身行业调整,快速抢占搜索流量,精准获客。
|
机器学习/深度学习 监控 安全
10分钟轻松实现人脸精准识别
本文将具体介绍如何利用云服务部署深度学习模型,快速接入人脸比对服务。
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
482 10
|
前端开发 安全 Java
Java技术深度探索:构建高效稳定的企业级应用
【10月更文挑战第5天】Java技术深度探索:构建高效稳定的企业级应用
239 0
|
人工智能 测试技术 人机交互
深入浅出智能工作流(Agentic Workflow)|技术干货
著名AI学者、斯坦福大学教授吴恩达提出AI Agent的四种设计方式后,Agentic Workflow(智能体工作流)在全球范围内迅速走红,多个行业纷纷实践其应用,并推动了新的Agentic AI探索热潮。吴恩达总结了Agent设计的四种模式:自我反思、工具调用、规划设计及多智能体协作。前两者较普及,后两者则为智能体使用模式从单一大模型向多智能体协同配合完成业务流程的转变奠定了基础。
7341 3
|
Android开发
【通讯录教程】苹果安卓鸿蒙系统通用,如何大批量导入手机号码到手机的通讯录,下面教你方法,只需1分钟搞定几万个号码的导入手机电话本
该文介绍了一种快速批量导入手机通讯录的方法,适用于处理大量手机号的需求,如微商管理、客户资料整理等。在QQ同步助手开始收费后,提供了免费的替代方案。步骤包括:下载批量导入软件(链接提供腾讯云盘和百度网盘地址),清空通讯录(非必需),制作符合格式的通讯录文件,并按操作系统(苹果、安卓或鸿蒙)进行导入。整个过程只需1分钟,简便快捷。
2814 2
|
JavaScript 小程序 Java
选课|基于Springboot的大学生选课系统设计与实现(源码+数据库+文档)
选课|基于Springboot的大学生选课系统设计与实现(源码+数据库+文档)
655 0
SAP SAP几个常见缩写(GI GR ST)
应该有很多小伙伴在和一些老顾问,或者你客户交流的过程中经常听到以下业务方便的缩写,比如:有没有做GR,再这个环节是做ST还是GI等,如果你没了解过的估计听得一头懵。笔者结合了自己的经历今天整理着几个关键的缩写,供大家查询参考。
SAP SAP几个常见缩写(GI GR ST)
|
存储 JavaScript API
【源码&库】Vue3 的响应式核心 reactive 和 effect 实现原理以及源码分析
【源码&库】Vue3 的响应式核心 reactive 和 effect 实现原理以及源码分析
385 0