【Neo4j系列】Neo4j概念简介及整合SpringBoot

本文将针对Neo4j相关概念进行介绍,同时讲解Neo4j整合SpringBoot的详细步骤。

作者:后端小肥肠

1. 前言

        随着信息时代的不断发展,我们日益面临着大规模数据的管理和分析挑战。图数据库的兴起为解决这一难题提供了新的可能性,而Neo4j正是在这一领域中脱颖而出的先锋之一。

        本文档将引导您深入了解Neo4j图数据库的核心概念,同时演示如何将其与Spring Boot框架相集成,为您的应用程序提供强大的数据管理和查询能力。无论您是新手想要了解图数据库的基础知识,还是经验丰富的开发者寻求在Spring Boot项目中使用Neo4j的最佳实践,本文档都将为您提供有益的信息和实用的指导。

        在阅读本文档时,请确保您具备基本的Java和Spring Boot开发知识,以便更好地理解和应用本文中介绍的概念。我们相信,通过学习Neo4j的核心理念并掌握与Spring Boot的整合,您将能够构建出更为灵活、高效的数据驱动应用程序。

2. Neo4j相关概念介绍

2.1. 什么是Neo4j

        Neo4j是一个开源的NoSQL图形数据库,2003 年开始开发,使用 scala和java 语言,2007年开始发布。

  • 是世界上最先进的图数据库之一,提供原生的图数据存储,检索和处理;

  • 采用属性图模型(Property graph model),极大的完善和丰富图数据模型;

  • 专属查询语言 Cypher,直观,高效;

官网: Neo4j Graph Database & Analytics | Graph Database Management System

Neo4j的特性:

  • SQL就像简单的查询语言Neo4j CQL

  • 它遵循属性图数据模型

  • 它通过使用Apache Lucence支持索引

  • 它支持UNIQUE约束

  • 它包含一个用于执行CQL命令的UI:Neo4j数据浏览器

  • 它支持完整的ACID(原子性,一致性,隔离性和持久性)规则

  • 它采用原生图形库与本地GPE(图形处理引擎)

  • 它支持查询的数据导出到JSON和XLS格式

  • 它提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问

  • 它提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本

  • 它支持两种Java API:Cypher API和Native Java API来开发Java应用程序

Neo4j的优点:

  • 它很容易表示连接的数据

  • 检索/遍历/导航更多的连接数据是非常容易和快速的

  • 它非常容易地表示半结构化数据

  • Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习

  • 使用简单而强大的数据模型

  • 它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有 连接或索引

2.2. Neo4j数据模型

2.2.1. 图论基础

        图是一组节点和连接这些节点的关系,图形以属性的形式将数据存储在节点和关系中,属性是用于表示数据的键值对。在图论中,我们可以表示一个带有圆的节点,节点之间的关系用一个箭头标记表示。 最简单的可能图是单个节点:

        在两个节点之间创建关系:

2.2.2. 属性图模型

Neo4j图数据库遵循属性图模型来存储和管理其数据。

  • 属性图模型规则

  • 表示节点,关系和属性中的数据

  • 节点和关系都包含属性

  • 关系连接节点

  • 属性是键值对

  • 节点用圆圈表示,关系用方向键表示。

  • 关系具有方向:单向和双向。

  • 每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”

  在属性图数据模型中,关系应该是定向的。如果我们尝试创建没有方向的关系,那么它将抛出一个错误 消息。在Neo4j中,关系也应该是有方向性的。如果我们尝试创建没有方向的关系,那么Neo4j会抛出一 个错误消息,“关系应该是方向性的”。

  Neo4j图数据库将其所有数据存储在节点和关系中,我们不需要任何额外的RDBMS数据库或NoSQL数据 库来存储Neo4j数据库数据,它以图的形式存储数据。Neo4j使用本机GPE(图形处理引擎)来使用它的 本机图存储格式。 图数据库数据模型的主要构建块是:

  • 节点

  • 关系

  • 属性

简单的属性图的例子:

        这里我们使用圆圈表示节点。 使用箭头表示关系,关系是有方向性的。 我们可以用Properties(键值 对)来表示Node的数据。  

2.2.3. Neo4j的构建元素

Neo4j图数据库主要有以下构建元素:

  • 节点

  • 属性

  • 关系

  • 标签

  • 数据浏览器

有一个或多个标签,用于描述其在图表中的作用。

属性   

        属性(Property)是用于描述图节点和关系的键值对。其中Key是一个字符串,值可以通过使用任何

  • Neo4j数据类型来表示

  • 属性是命名值,其中名称(或键)是字符串

  • 属性可以被索引和约束

  • 可以从多个属性创建复合索引

关系   

        关系(Relationship)同样是图数据库的基本元素。当数据库中已经存在节点后,需要将节点连接起来 构成图。关系就是用来连接两个节点,关系也称为图论的边(Edge) ,其始端和末端都必须是节点,关系不 能指向空也不能从空发起。关系和节点一样可以包含多个属性,但关系只能有一个类型(Type) 。 关系连接两个节点 关系是方向性的 节点可以有多个甚至递归的关系 关系可以有一个或多个属性(即存储为键/值对的属性)

基于方向性,Neo4j关系被分为两种主要类型:

  • 单向关系

  • 双向关系

标签   

        标签(Label)将一个公共名称与一组节点或关系相关联, 节点或关系可以包含一个或多个标签。 我们 可以为现有节点或关系创建新标签, 我们可以从现有节点或关系中删除标签。 标签用于将节点分组 一个节点可以具有多个标签 对标签进行索引以加速在图中查找节点 本机标签索引针对速度进行了优化

Neo4j Browser   

        一旦我们安装Neo4j,我们就可以访问Neo4j数据浏览器

3. Neo4j安装

Neo4j安装有多种方式,本文仅讲解基于Docker的安装和Neo4j Desktop的安装。

3.1. Docker安装

1. 拉取Docker镜像

docker pull neo4j:4.4.18

2.运行容器

docker run -idt -p 7474:7474 -p 7687:7687 --name neo4j -v /home/docker/neo4j/plugins/:/var/lib/neo4j/plugins -v /home/docker/neo4j/data:/data -v /home/docker/neo4j/logs:/logs -v /home/docker/neo4j/import:/var/lib/neo4j/import  -v /home/docker/conf:/var/lib/neo4j/conf --env NEO4J_AUTH=neo4j/123456 --env NEO4J_apoc_import_file_use__neo4j__config=true --env NEO4J_apoc_import_file_enabled=true --env NEO4J_apoc_export_file_enabled=true --env NEO4J_HOME=/var/lib/neo4j --restart=always neo4j:4.4.18

 3.验证neo4j是否安装成功

访问安装机器(本地或者服务器)的7474端口即可进入以下界面:

3.2. Neo4j Desktop安装

网上教程比较多,我找了一个比较详细的,大家根据这篇来就行:

【知识图谱】图数据库Neo4jDesktop的安装图文详解(小白适用)_neo4j desktop-CSDN博客

4. Neo4j和Spring Boot整合

4.1. 开发环境搭建

4.1.2. 所需版本和工具
依赖版本
Spring Boot2.6.3
Neo4j4.4.18
java1.8以上
4.1.3. pom依赖
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--neo4j-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
</dependencies>
4.1.4. 核心代码讲解 
4.1.4.1. Node操作

1. 建立node实体类

@Data
@Node("Person")
public class PersonNode {
    @Id
    @GeneratedValue
    private Long id;

    @Property("name")
    private String name;

    @Relationship(type = "KNOWS", direction = Relationship.Direction.OUTGOING)
    private List<Knows> knows;
}

2.建立node的repository

@Repository
public interface PersonRepository extends Neo4jRepository<PersonNode,Long> {
}

3.新增node操作

@Service
public class GraphServiceImpl implements GraphService {
    @Autowired
    private PersonRepository personRepository;
    @Override
    public String saveNode() {
        PersonNode person = new PersonNode();
        person.setName("小肥肠");
        personRepository.save(person);
        return "新增成功";
    }
}

4.运行结果

 4.1.4.2. 关系操作

1. 新增关系实体类

@RelationshipProperties
@Data
public class Knows {
    @RelationshipId
    private Long id;

    @TargetNode
    private PersonNode personNode;

}

2.新增关系的repository

public interface KnowsRepository extends Neo4jRepository<Knows, Long> {
    // 如果需要,添加自定义查询
}

3. 新增关系操作

    @Override
    public String saveNAndR() {
        PersonNode person = new PersonNode();
        person.setName("小肥肠1");
        personRepository.save(person);

        PersonNode person1 = new PersonNode();
        person1.setName("豆豆");
        personRepository.save(person1);

        // 创建关系并设置目标节点
        Knows knowsRelationship = new Knows();
        knowsRelationship.setPersonNode(person1); // 设置关系的目标节点

        if (person.getKnows() == null) {
            person.setKnows(new ArrayList<>());
        }
        person.getKnows().add(knowsRelationship);
        personRepository.save(person);
        return "新增成功";
    }

4. 运行结果

5. 结语

        本文对Neo4j的基本概念进行了讲解,同时展示了基于Spring Boot整合Neo4j的代码实践,想要了解Neo4j的更多内容可以动动你们发财的小手点点关注,Neo4j系列会持续更新~

6. 参考链接

【知识图谱】图数据库Neo4jDesktop的安装图文详解(小白适用)_neo4j desktop-CSDN博客

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端小肥肠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值