Neo4j基础

Neo4j基础

_

一,Neo4j相关概念介绍

1.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查询语言命令是人性化的可读格式,非常容易学习
  • 使用简单而强大的数据模型
  • 它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有 连接或索引

1.2 Neo4j数据模型

1.2.1 图论基础

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

2953321-20260522094229637-2051022414.png

在两个节点直接创建关系:

image-20260522094324783

1.2.2 属性图模型

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

  • 属性图模型规则
  • 表示节点,关系和属性中的数据
  • 节点和关系都包含属性
  • 关系连接节点
  • 属性是键值对
  • 节点用圆圈表示,关系用方向键表示。
  • 关系具有方向:单向和双向。
  • 每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”

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

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

  • 节点
  • 关系
  • 属性

简单的属性图的例子:

2953321-20260522094803383-420884550.png

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

1.2.3 Neo4j的构建元素

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

  • 节点
  • 属性
  • 关系
  • 标签
  • 数据浏览器

节点

2953321-20260522095219407-1229252973.png

属性   

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

  • Neo4j数据类型来表示
  • 属性是命名值,其中名称(或键)是字符串
  • 属性可以被索引和约束
  • 可以从多个属性创建复合索引

关系   

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

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

  • 单向关系
  • 双向关系

标签   

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

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

2953321-20260522095335193-1024621672.png

二,Neo4j安装

2.1 Docker安装Ne04j

下载镜像

docker pull neo4j:4.4.18

启动容器

docker run -it 
-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

验证 Neo4j 是否安装成功

2953321-20260522100855916-1666578060.png

2.2 Neo4j Desktop安装

skip 回家配好再说

三,Spring Boot整合Neo4j快速入门

4.1. 开发环境搭建

4.1.1 所需版本和工具

依赖版本
Spring Boot2.6.14
Neo4j4.4.18
java1.8以上

4.1.2 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.2 核心代码讲解

  1. 建立 node 实体类

    @Data
    @Node("Person")
    public class PersonNode {
        @Id
        @GeneratedValue
        private Long id;
    
        @Property("name")
        private String name;
    }
    
  2. . 建立 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. 运行结果
    2953321-20260522102348528-1719530450.png

Go语言函数与结构体 2026-04-30
CQL语句和函数 2026-05-22

© 2026 苏叶的belog