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.rhkb.cn/news/345471.html

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

相关文章

docker安装rabbitmq详解

目录 1、安装 1-1.查看rabbitmq镜像 1-2.下载Rabbitmq的镜像 1-3.创建并运行rabbitmq容器 1-4.查看启动情况 1-5.启动web客户端 1-6.访问rabbitmq的客户端 2..遇到的问题 解决方法: 1、安装 1-1.查看rabbitmq镜像 docker search rabbitmq 1-2.下载Rabbitmq的镜像 拉…

企业应如何选择安全合规的内外网文件摆渡系统?

网络隔离是一种安全措施,旨在将网络划分为不同的部分,以减少安全风险并保护敏感信息。常见的隔离方式像物理隔离、逻辑隔离、防火墙隔离、虚拟隔离、DMZ区隔离等,将网络隔离成内网和外网。内外网文件摆渡通常指在内部网络(内网&am…

OrangePi Kunpeng Pro深度评测:性能与体验的完美融合

文章目录 一、引言二、硬件开箱与介绍1.硬件清单2.硬件介绍 三、软件介绍四、性能测试1. 功率测试2. cpu测试2.1 单线程cpu测试2.2 多线程cpu测试 五、实际开发体验1. 搭建API服务器2. ONNX推理测试3. 在线推理平台 五、测评总结1. 能与硬件配置2. 系统与软件3. 实际开发体验个…

144、二叉树的前序递归遍历

题解: 递归书写三要素: 1)确定递归函数的参数和返回值。要确定每次递归所要用到的参数以及需要返回的值 2)确定终止条件。操作系统也是用栈的方式实现递归,那么如果不写终止条件或者终止条件写的不对,都…

Maven项目的创建

目录 1、Maven简介配置(1)设置本地仓库(2)修改Maven的jdk版本(3)添加国内镜像源添加到idea中 2、常用命令3、IDEA2023创建Maven项目(1)Maven和Maven Archetype区别(1-1&a…

内存管理--3.用幻灯片讲解C++手动内存管理

用幻灯片讲解C手动内存管理 1.栈内存的基本元素 2.栈内存的聚合对象 3.手动分配内存和释放内存 注意:手动分配内存,指的是在堆内存中。 除非实现自己的数据结构,否则永远不要手动分配内存! 即使这样,您也应该通过std::allocator…

rv1126-rv1109-openssh-密码秘钥等功能修改

1.openssh是允许外部登录的工具 2.真的是很复杂的设备 3.移植分布,怎么得到我们想要的openssh 去网上自己寻找安装包下载; 4.怎么预制进arm主板,把编译出来的openssh放进去 其中除了ssh_config和sshd_config;其他都是秘钥,公钥和私钥; root账户走的秘钥的修改,不改是默认的r…

Web 网页性能优化

Web 网页性能及性能优化 一、Web 性能 Web 性能是 Web 开发的一个重要方面,侧重于网页加载速度以及对用户输入的响应速度 通过优化网站来改善性能,可以在为用户提供更好的体验 网页性能既广泛又非常深入 1. 为什么性能这么重要? 1. 性能…

SpringBoot+Vue体育馆管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 学生管理员 功能截图

SpringBoot: 启动流程和类装载

前面我们学过Spring定制了自己的可执行jar,将真正执行时需要的类和依赖放到BOOT-INF/classes、BOOT-INF/lib来,为了能够识别这些为止的源文件,Spring定制了自己类加载器,本节我们来讲解这个类加载器。本节涉及的内容主要包括: Sp…

网络协议三

数据中心 一、DNS 现在网站的数目非常多,常用的网站就有二三十个,如果全部用 IP 地址进行访问,恐怕很难记住 根 DNS 服务器 :返回顶级域 DNS 服务器的 IP 地址 顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址 …

uni-app uni-swipe-action 滑动操作状态恢复

按照uni-app官方文档的写法 当前同一条滑动确认之后 页面列表刷新 但是滑动的状态还在 入下图所示: 我们需要在滑动确认之后 页面刷新 滑动状态恢复 那么我们就来写一下这部分的逻辑: 首先,配置一下:show"isOpened[item.id]" chan…

数据结构(C):二叉树前中后序和层序详解及代码实现及深度刨析

目录 🌞0.前言 🚈1.二叉树链式结构的代码是实现 🚈2.二叉树的遍历及代码实现和深度刨析代码 🚝2.1前序遍历 ✈️2.1.1前序遍历的理解 ✈️2.1.2前序代码的实现 ✈️2.1.3前序代码的深度解剖 🚝2.2中序遍历 ✈…

CentOs7 JDK21 安装

CentOs7 JDK21 安装 准备工作 先检查系统是否之前已经安装了jdk 。如果已经安装的话需要卸载。 方式一:使用压缩包的方式 下载jdk21的压缩包 https://www.oracle.com/java/technologies/downloads/ 将下载的gz压缩包上传到服务器并解压 # 创建文件夹 (你可以自…

【Python】读取文件夹中所有excel文件拼接成一个excel表格 的方法

我们平常会遇到下载了一些Excel文件放在一个文件夹下,而这些Excel文件的格式都一样,这时候需要批量这些文件合并成一个excel 文件里。 在Python中,我们可以使用pandas库来读取文件夹中的所有Excel文件,并将它们拼接成一个Excel表…

yarn保姆级安装和使用

目录 前言 一、yarn简介 主要特性 使用场景 二、yarn的安装 yarn的下载 配置环境变量 三、yarn的常用命令 四、yarn的常用配置项 五、npm与yarn的区别 前言 本文旨在介绍如何安装和使用Yarn,以及它的一些常见用法。我们将从Yarn的基本概念开始,…

卡尔曼滤波器例子

卡尔曼滤波器 卡尔曼滤波器(Kalman Filter)是一种用于线性系统状态估计的递归算法,可以有效地融合传感器数据和系统模型来估计系统的状态。它在机器人学中广泛应用,尤其是位置和速度等状态的估计。通过卡尔曼滤波器,可以有效地估计机器人在二维平面内的真实位置,并减小测…

【JavaEE】Spring IoCDI详解

一.基本概念 1.Ioc基本概念 Ioc: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器. 什么是控制反转呢? 也就是控制权反转. 什么的控制权发发了反转? 获得依赖对象的过程被反转了也就是说, 当需要某个对象时, 传统开发模式中需要自己通…

商城项目【尚品汇】08异步编排

文章目录 1.线程的创建方式1.1继承Thread类,重写run方法1.2实现Runnable接口,重写run方法。1.3实现Callable接口,重新call方法1.4以上三种总结1.5使用线程池创建线程1.5.1线程池创建线程的方式1.5.2线程池的七大参数含义1.5.3线程池的工作流程…

视觉SLAM十四讲:从理论到实践(Chapter9:后端1)

前言 学习笔记,仅供学习,不做商用,如有侵权,联系我删除即可 一、目标 1.理解后端的概念。 2.理解以EKF为代表的滤波器后端的工作原理。 3.理解非线性优化的后端,明白稀疏性是如何利用的。 4.使用g2o和Ceres实际操作…