当前位置: 首页 > news >正文

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。组成关系图谱。后续使用这个数据进行关系查询。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 系统思考—心智模式
  • 嵌入式仪器模块:波形发生器模块(嵌入式)
  • IT学习笔记--Flink
  • 记一次postgresql拼接函数string_agg() 和row_number() 使用
  • 区间预测 | Matlab实现LSTM-ABKDE长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测
  • LeetCode110. 平衡二叉树
  • 国标GB/T 28181详解:校时流程详细说明
  • java asm使用切面
  • Next.js Tailwind CSS UI组件
  • Python基础——字符串
  • DeepSpeed入门
  • 度小满金融大模型的应用创新
  • AIGC作答《2024年高考作文|新课标I卷》能拿多少分?
  • 测试基础11:测试用例设计方法-等价类划分
  • 定个小目标之刷LeetCode热题(14)
  • 【node学习】协程
  • 2018一半小结一波
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • js操作时间(持续更新)
  • leetcode-27. Remove Element
  • Odoo domain写法及运用
  • Vue.js源码(2):初探List Rendering
  • 如何在 Tornado 中实现 Middleware
  • 实现简单的正则表达式引擎
  • 无服务器化是企业 IT 架构的未来吗?
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • elasticsearch-head插件安装
  • 关于Android全面屏虚拟导航栏的适配总结
  • 交换综合实验一
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • (6)设计一个TimeMap
  • (8)STL算法之替换
  • (c语言+数据结构链表)项目:贪吃蛇
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (利用IDEA+Maven)定制属于自己的jar包
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .net 调用海康SDK以及常见的坑解释
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • :“Failed to access IIS metabase”解决方法
  • @media screen 针对不同移动设备
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ Socket学习 ] 第一章:网络基础知识
  • [.NET]桃源网络硬盘 v7.4
  • []我的函数库
  • [000-01-011].第2节:持久层方案的对比
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [BZOJ] 2044: 三维导弹拦截
  • [C++]高精度 bign (重载运算符版本)
  • [C++数据结构](22)哈希表与unordered_set,unordered_map实现
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [CSS]文字旁边的竖线以及布局知识