neo4j入门并使用案例说明

news2024/11/28 8:27:38

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.coloradmin.cn/o/1802629.html

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

相关文章

STM32项目分享:智能台灯系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…

大模型学习之菜鸟的进阶道路---工程迭代

我们的大模型学习开始了新篇章,这一章还是比较基础的调用api,有些朋友建议直接搞构造大模型,很显然这是很不科学的,我们先从基础学习,大模型本来就是很晦涩难懂的东西,并且知识体系十分庞大,所以…

Progressive Feature Fusion Framework Based on Graph Convolutional Network

以Resnet50作为主干网络,然后使用GCN逐层聚合多级特征,逐级聚合这种模型架构早已不新鲜,这篇文章使用GCN的方式对特征进行聚合,没有代码。这篇文章没有过多的介绍如何构造的节点特征和邻接矩阵,我觉得对于图卷积来说&a…

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(三)

概述 在上一篇 Swift 序列(Sequence)排序面面俱到 - 从过去到现在(二) 博文中,我们介绍了如何构建一个自定义类型中“多属性”排序的通用实现。 而在本课中我们将再接再厉介绍 iOS 15+ 中新的排序机制,并简要剖析就地排序(In-place sorting)对运行性能有着怎样的显著影…

数据挖掘--数据预处理

数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性:基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析:基本概念和方法 数据清理 缺失值 如果数据集含有分类属性…

阿里云(域名解析) certbot 证书配置

1、安装 certbot ubuntu 系统: sudo apt install certbot 2、申请certbot 域名证书,如申请二级域名aa.example.com 的ssl证书,同时需要让 bb.aa.example.com 也可以使用此证书 1、命令:sudo certbot certonly -d “域名” -d “…

聪明人社交的基本顺序:千万别搞反了,越早明白越好

聪明人社交的基本顺序:千万别搞反了,越早明白越好 国学文化 德鲁克博雅管理 2024-03-27 17:00 作者:方小格 来源:国学文化(gxwh001) 导语 比一个好的圈子更重要的,是自己优质的能力。 唐诗宋…

c++编译器在什么情况下会提供类的默认构造函数等,与析构函数

我们都知道,在 c 里,编写的简单类,若没有自己编写构造析构函数与 copy 构造函数 与 赋值运算符函数,那么编译器会提供这些函数,并实现简单的语义,比如成员赋值。看 源码时,出现了下图类似的情形…

《C++避坑神器·二十七》VS中release打断点方法,#undef作用

1、release打断点方式 2、#undef作用 #undef指令用于”取消“已定义的#define指令 案例:

小主机折腾记24

好久不更新,最近折腾的事如下 1.10块钱自提买了个半高机箱,15086140,把之前拆机的H61m-A/M32AA/DP_MB与200w航嘉电源装了进去,额外买了半高pcie转接了个m2位,江波龙64g安装了win10专业版,最后卖了176块钱&a…

连山露【诗词】

连山露 雾隐黄山路,十步一松树。 树上惊松鼠,松子衔木屋。 松子青嫩芽,尖尖头探出。 卷挂白露珠,装映黄山雾。

UML实战-BUG管理系统

概述 根据 UML建模的过程来进行一个完整系统的设计–Bug 管理系统。下面是一个标注 UML 设计过程的参考。 需求分析:用例图。系统分析:分析业务规则–状态图。系统分析:分析业务流程–活动图。系统设计:设计静态结构–类图和包图。系统设计:Action类被调用关系–序列图。…

检测五个数是否一样的算法

目录 算法算法的输出与打印效果输出输入1输入2 打印打印1打印2 算法的流程图总结 算法 int main() {int arr[5] { 0 };int i 0;int ia 0;for (i 0; i < 5; i) { scanf("%d", &arr[i]); }for (i 1; i < 5; i) {if (arr[0] ! arr[i]) {ia 1;break;} }…

Linux-常用命令-常用设置

1.帮助类命令 1.man命令-获得帮助信息 man [命令或配置文件]例&#xff1a;查看ls命令的帮助信息 man ls输入 ZZ 退出帮助2.服务管理类命令 1.centos7语法 1.1 临时开关服务命令 开启服务&#xff1a; systemctl start 服务名 关闭服务&#xff1a; systemctl stop 服务…

Javaweb---HTTPS

题记 为了保护数据的隐私性我们引入了HTTPS 加密的方式都有那些呢? 1.对称加密: 加密和解密使用的密钥是同一个密钥 2.非对称加密:有两个密钥(一对),分为公钥和私钥(公钥是公开的,私钥是要藏好的) HTTPS的工作过程(旨在对body和header进行加密) 1.对称加密 上述引出的…

两张图片进行分析

两张图片进行分析&#xff0c;可以拖动左边图片进行放大、缩小查看图片差异 底图 <template><div class"box_container"><section><div class"" v-for"item in imgData.imgDataVal" :key"item.id"><img :s…

Kafka监控系统efak的安装

下载地址Kafka Eaglehttp://download.kafka-eagle.org/下载地址连接不稳定&#xff0c;可以多次尝试直到成功连接下载 1.解压安装包并重命名 tar -zxvf kafka-eagle-bin-3.0.1.tar.gz 查看到解压后包含一个安装包&#xff0c;再解压 tar -zxvf efak-web-3.0.1-bin.tar.gz 移…

小程序简单版录音机

先来看看效果 结构 先来看看页面结构 <!-- wxml --><view class"wx-container"><view id"title">录音机</view><view id"time">{{hours}}:{{minute}}:{{second}}</view><view class"btngroup"…

【JavaSE】面向对象---多态

前言 本篇以Java初学者视角写下&#xff0c;难免有不足&#xff0c;或者术语不严谨之处。如有错误&#xff0c;欢迎评论区指正。本篇说明多态相关的知识。若本文无法解决您的问题&#xff0c;可以去最下方的参考文献出&#xff0c;找出想要的答案。 多态概念 多态&#xff08…

【Ardiuno】实验使用ESP32连接Wifi(图文)

ESP32最为精华和有特色的地方当然是wifi连接&#xff0c;这里我们就写程序实验一下适使用ESP32主板连接wifi&#xff0c;为了简化实验我们这里只做了连接部分&#xff0c;其他实验在后续再继续。 由于本实验只要在串口监视器中查看结果状态即可&#xff0c;因此电路板上无需连…