neo4j入门并使用案例说明

1、neo4j是什么

Neo4j是一个高性能的NoSQL图形数据库,它将结构化数据存储在网络(在数学角度称为图)上,而不是传统的表中。Neo4j是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎。它因其高性能、轻量级、易嵌入和完全支持事务等特性而受到关注。

Neo4j使用Cypher查询语言,这是一种易于理解和使用的查询语言,支持ACID事务,保证了数据的一致性和可靠性。Neo4j支持高效的图数据查询和存储,能够快速处理复杂的关系数据,并且具有强大的可扩展性,可以处理数十亿节点/关系/属性的图,并扩展到多台机器并行运行。

2、neo4j可以用来做什么

Neo4j的应用场景非常广泛,包括社交网络分析、知识图谱、推荐系统、面向对象数据库、欺诈检测等。例如,在社交网络分析中,Neo4j可以存储和查询用户和关系,用于推荐系统、好友推荐等应用。在知识图谱领域,Neo4j可以存储和查询概念、关系和属性,用于智能问答系统、信息检索等应用。

3、为什么选择neo4j

先说说我的需求场景。系统的库、表特别多,为了统一管理,实现了元数据管理模块。但是接踵而来的需求是业务希望能够直观的看到库、表、字段分别是从哪里来的,作用在哪里。其实就是想要一份数据血缘。从而更好的了解数据、管理数据。

为什么不存在关系型数据库中。因为关系型数据库更关注数据的ALTP。对于关系的存储不是不可以,而是不适合。

  1. 原生图形数据库:Neo4j是一个原生图形数据库,这意味着它是为图形数据结构和查询而设计的。图形数据模型能够自然地表示实体及其之间的关系,非常适合用于社交网络、推荐系统、供应链管理等需要处理复杂关系的领域。

  2. 高效的查询性能:Neo4j使用图遍历算法进行查询,这使得它在处理复杂关系查询时非常高效。相比传统的关系型数据库,Neo4j在查询涉及多个实体和关系时能够提供更快的响应速度。

  3. 灵活的数据模型:Neo4j的数据模型非常灵活,可以方便地表示各种复杂的关系和属性。它支持节点和边的添加、删除和修改,使得数据的存储和更新变得简单直观。

  4. 可扩展性:Neo4j具有良好的可扩展性,可以处理大规模图形数据。它支持集群部署和分片,能够将数据分布到多个节点上,提高系统的吞吐量和可靠性。

  5. 强大的社区支持:Neo4j拥有一个活跃的社区,提供了大量的学习资源和工具,帮助用户更好地使用Neo4j。此外,Neo4j还提供了丰富的API和驱动,方便与其他系统和应用集成。

  6. 易于使用:Neo4j提供了直观的图形界面(Neo4j Browser)和友好的查询语言(Cypher),使得用户可以轻松地查看、查询和操作图形数据。

其中最看重的是使用是否方便,社区支持是否够强大。其实说白了就是团队其他成员(特别是小白,不了解的同学)能否快速上手解决实际问题。如果出现问题网上是否能快速的找到解决方案(你遇到的百分之八十都是别人遇到过的)。所以基于上述选择了neo4j作为数据血缘的实现方案。

4、neo4j的使用

安装

主要分为社区版和企业版。我们使用社区版就完全够用,因为他所支持的数据量级就公司目前很长一段时间而言是完全够用的。所以也没必要上企业版(留下了没钱的眼泪)。

安装使用linux和mac很方便,windows本人没有尝试过,可以在网上找找方案。

linux和mac的安装网上也有很多的文章,此处就不再详述。

我是使用docker进行安装的,就两步,pull、run。当然前提是已经安装了docker

使用

neo4j作为数据库,可以参考关系型数据库的使用方式。建表、设置关系、查询。如果想深入了解下更多的语法,可以百度搜到很多Cypher语法。不是本文的重点。

案例

前面说了很多,都是一些概念,其实大家更多的是想快速的上手使用。所以这里用一个简单的案例说明一下如何使用neo4j实现关系构建和查询。

有三个节点。学校、教师、学生。不同的教师可以就职不同的学校。教师可以给学生们进行指定学科的授课。学生可以参加其他学校老师组织的线下补习班。

最终想要查询到某一个教师就职与那个学校;某一个教师所教授了那些学生;某一个教师是否有开设补习班,他的补习班有那些学生。如果想的话,还可以构建学生与学校的关系。查询出来这些学生属于那些学校的。怎么样,如果使用关系型数据库搞这个关系,是不是头都大了!话不多说,让我们开始吧。

构建学校节点:

create(school:School{id:1,name:'第一中学'});
create(school:School{id:2,name:'第二中学'})

构建教师节点:

create(teacher:Teacher{id:1,name:'杨老师',subject:'数学'});
create(teacher:Teacher{id:2,name:'高老师',subject:'语文'});create(teacher:Teacher{id:3,name:'刘老师',subject:'数学'});
create(teacher:Teacher{id:4,name:'金老师',subject:'语文'})

构建学生节点:

create(student:Student{id:1,name:'张三'});
create(student:Student{id:2,name:'李四'});
create(student:Student{id:3,name:'王五'});create(student:Student{id:4,name:'赵六'});
create(student:Student{id:5,name:'侯七'});
create(student:Student{id:6,name:'周八'})

构建学校-教师关系

match(teacher:Teacher),(school:School) where teacher.id = 1 and school.id = 1 create(teacher)-[:work]->(school);
match(teacher:Teacher),(school:School) where teacher.id = 2 and school.id = 1 create(teacher)-[:work]->(school);
match(teacher:Teacher),(school:School) where teacher.id = 3 and school.id = 2 create(teacher)-[:work]->(school);
match(teacher:Teacher),(school:School) where teacher.id = 4 and school.id = 2 create(teacher)-[:work]->(school);

构建教师-学生关系

match(teacher:Teacher),(student:Student) where (student.id = 1 or student.id = 2) and teacher.id = 1 create(teacher)-[:教授数学]->(student);
match(teacher:Teacher),(student:Student) where student.id = 3 and teacher.id = 2 create(teacher)-[:教授语文]->(student);match(teacher:Teacher),(student:Student) where student.id = 4 and teacher.id = 3 create(teacher)-[:教授数学]->(student);
match(teacher:Teacher),(student:Student) where (student.id = 5 or student.id = 6) and teacher.id = 4 create(teacher)-[:教授语文]->(student)

构建学生课外补习教师关系

match(teacher:Teacher),(student:Student) where student.id = 1 and teacher.id = 3 create(student)-[:数学课外补习]->(teacher)

使用查询语句查询关系图

match(school:School),(teacher:Teacher),(student:Student) return school,teacher,student

指定教师,学校、学生的关系,查询某一个教师的关系图谱

match (school:School),(teacher:Teacher),(student:Student) where teacher.id =3 and (teacher)-[:work]->(school) and ((student)-[:`数学课外补习`]->(teacher) or (teacher)-[:`教授数学`]->(student))  return school,teacher,student

结合这个简单的案例,将自己的关系数据进行设计。然后写入neo4j。组成关系图谱。后续使用这个数据进行关系查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型时代的具身智能系列专题(九)

NYU Lerrel Pinto团队 Lerrel Pinto是NYU Courant的计算机科学助理教授,也是用机器人和人工智能实验室(CILVR小组)的一员。在加州大学伯克利分校读博士后,在CMU机器人研究所读博士,在印度理工学院古瓦哈蒂读本科。研究目标是让机器人在我们生…

Linux 35.5 + JetPack v5.1.3@FUEL编译安装

Linux 35.5 JetPack v5.1.3FUEL编译安装 1. 源由2. 编译&安装Step 1:依赖库安装Step 2:建立工程Step 3:编译工程Step 4:安装工程 3. 问题汇总3.1 fuel_planner/exploration_manager - dw3.2 fuel_planner/plan_env - OpenCV库…

找不到d3dx9_43.dll怎么修复?这个几种修复方法轻松解决

在计算机使用过程中,我们常常会遇到一些错误提示,其中之一就是“d3dx943.dll丢失”。这个问题通常会导致某些游戏或应用程序无法正常运行。为了解决这个问题,我总结出了以下五种解决方法,希望能对遇到类似问题的朋友们有所帮助。 …

QNX 7.0.0开发总结

1 QNX编译 1.1 基本概念 QNX可以直接使用Linux Makefile编译库和二进制,在Makefile文件中指定CCaarch64-unknown-nto-qnx7.0.0-g,或者CCx86_64-pc-nto-qnx7.0.0-g,保存退出后,运行source /qnx_sdk_path/qnxsdp-env.sh,…

前端canvas绘图,利用canvas在图片上面绘制标记以及给canvas添加点击事件。

前端canvas绘图&#xff0c;利用canvas在图片上面绘制标记以及给canvas添加点击事件。 需要实现的效果如下图: 首先需要一个承载的核心画布 <canvas id"canvas" width"800" height"600"></canvas>全部代码&#xff1a; <!DOCT…

LabVIEW减压阀和温控阀综合测试系统

在使用LabVIEW开发阀门测试软件时&#xff0c;特别是针对减压阀和温控阀&#xff0c;测试内容和注意事项包括以下方面&#xff1a; 测试内容 压力测试&#xff1a; 入口压力&#xff1a;测量阀门在不同入口压力下的表现。 出口压力&#xff1a;确保减压阀能够将出口压力控制在…

systemctlm-cosim-demo项目分析

概述 systemctlm-cosim-demo项目是Xilinx的systemc库的demo工程。 环境安装 qemu安装 cd xilinx_proj/Downloads git clone https://github.com/Xilinx/qemu.git cd qemu git checkout 74d70f8008# Configure and build # zynq7000 # ./configure --target-list"arm-s…

【乐吾乐3D可视化组态编辑器】用开关控制巡检车和路灯

一、运动设备开关控制 3D组态编辑器地址&#xff1a;3D可视化组态 - 乐吾乐Le5le 1.在场景中新建模拟运动设备及控制面板&#xff1a;启动/停止 2.单击巡检车设备新建模拟动画 3.设置模拟动画属性 4.单击启动面板&#xff0c;新建交互事件 5.设置交互触发类型&#xff0c;新建…

PS系统教程11

HUD拾色器 作用&#xff1a;它可以帮助使用者更加高效地选择和使用颜色&#xff0c;从而提高工作效率和设计质量。 先确定色相值改变饱和度改变亮度使用HUD拾色器选中画笔工具画笔模式-正常shiftAlt右键 色相轮 上下移动从黑到白亮度变化左右移动从浅到深饱和度的变化选中颜…

数据分析必备:一步步教你如何用Pandas做数据分析(17)

1、Pandas 连接 Pandas 连接的操作实例 Pandas具有与SQL等关系数据库非常相似的功能齐全的高性能内存中连接操作。 Pandas提供单个功能merge作为DataFrame对象之间所有标准数据库联接操作的入口点 pd.merge(left, right, howinner, onNone, left_onNone, right_onNone,left_i…

新手必看!现货伦敦金新手容易犯的两个错

对很多刚进入现货伦敦金市场的朋友来说&#xff0c;炒伦敦金是十分令人兴奋的&#xff0c;但兴奋归兴奋&#xff0c;我们还是要注意&#xff0c;由于现货伦敦金投资者过分的热情&#xff0c;很容易让自己跌入一些陷阱&#xff0c;犯下一些错误&#xff0c;下面我们就来介绍两个…

智能楼宇安防3D数据可视化平台满足日益增长的安防需求

在当今社会&#xff0c;安全是每个人和企业最为关心的问题。为满足日益增长的安防需求&#xff0c;3D可视化公司深圳华锐视点隆重推出安防平台3D可视化管理系统&#xff0c;以先进的三维技术为您的安全保驾护航。 安防平台3D可视化管理系统通过创新的三维可视化技术&#xff0c…

纷享销客BI智能分析平台技术架构介绍

纷享销客BI智能分析平台致力于降低用户上手门槛&#xff0c;无缝继承纷享销客PaaS平台的对象关系模型和权限体系&#xff0c;让使用纷享CRM的营销人员、销售人员、服务人员等各类角色人员都能够将分析场景与业务场景相融合&#xff0c;将数据思维融合到自己的日常工作、团队工作…

SpringCloud-面试篇(二十三)

&#xff08;1&#xff09;SpringCloud常见组件有那些 有无数微服务需要相互调用&#xff1a;可以用远程调用组件OpenFeign组件&#xff0c;也可以用Dobble 这么多微服务相互调用怎么管理&#xff1a;就用到注册中心组件Nacos&#xff0c;Eureka 所有的服务去找注册中心做注…

TCP协议与UDP协议区别

举个列子&#xff1a; 三次握手&#xff1a;为了解决网络信道不可靠的问题&#xff1b;防止客户端向服务端发送两次数据&#xff0c;客户端一直处于接收的状态。 四次挥手是一样的。当客户端提出关闭请求&#xff0c;服务端处于关闭等待状态&#xff0c;此时客户端可以发送数据…

PMP考试难吗?考试通过率有多少?

我们通常以考试的通过率来评判一个考试的难易程度。通常通过率达到60%以上&#xff0c;这个考试就不太难&#xff1b;达到80% &#xff0c;这个考试就是不难的。 PMP考试难吗&#xff1f; 不少想要考PMP的小伙伴都会有这样的疑惑&#xff0c;首先以PMP的含金量来说&#xff0…

产品推荐 | 基于Lattice USB3-GbE VIP IO技术赋能视频接口开发板

1、产品概述 支持视频接口平台 (VIP) – 为莱迪思VIP提供USB 3.0 和千兆以太网网络互连 灵活的快速原型设计和开发– 两个标准的高速连接器实现嵌入式视觉原型系统的简便快速硬件配置 可靠、经验证的即时使用设计– 莱迪思演示设计通过USB 3.0和工业千兆以太网接口实现快速视…

Linux C语言: 数据类型

一、 为什么要引入数据类型 • 计算机中每个字节都有一个地址&#xff08;类似门牌号&#xff09; • CPU通过 地址 来访问这个字节的空间 0x20001103 1 0 0 1 0 0 1 1 0x20001102 1 1 1 0 1 1 1 0 0x20001101 1 1 1 1 0 1 0 1 0x20001100 0 …

accelerate 笔记:梯度同步的时间效率

1 介绍 PyTorch 的分布式模块通过在系统中所有GPU之间进行来回通信来操作。 这种通信需要时间&#xff0c;并且确保所有进程了解彼此的状态在使用ddp模块时会在特定的触发点发生 这些触发点被添加到PyTorch模型中&#xff0c;特别是它们的 forward() 和 backward() 方法中当通…

2024-06-05 Android app jni里面c语言函数申请的局部变量数组过大会导致程序崩溃的问题分析

一、下面是一个app jni里面一个函数&#xff0c;函数里面定义一个数组&#xff0c;实际运行的时候发现数组过大的时候会导致app崩溃。 JNIEXPORT jint JNICALL JNI_FUNCTION(native_1getcapture_1data)(JNIEnv *env, jobject obj,jbyteArray des_data,jbyteArray src_data,jin…