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

[数据库]Neo4j图数据库搭建快速入门

[数据库]图数据库基础入门

概念

图数据库是一种使用图结构(节点、边和属性)进行数据存储和查询的数据库管理系统。与传统的关系型数据库不同,图数据库专注于实体之间的关系,特别适合处理高度互联的数据。常见的图数据库包括:Neo4j、JanusGraph、HugeGraph…
在这里插入图片描述

核心优势:

  • 高效处理复杂关系查询
  • 直观的数据模型表示
  • 灵活应对数据模式变化
  • 卓越的性能(尤其对多跳查询)

主要有以下特点:

  1. 节点(Node):表示具体实体(如人物、地点、产品)
  • 可拥有标签(Label)进行分类
  • 可包含属性(键值对)
  • 例如:汤姆汉克斯Actor,Actor是演员代表分类,汤姆汉克斯代表实际的节点
  1. 关系(Relationship):连接节点的有向边
  • 必须有类型或可以理解为具体的关系(如:ACT表示演员与影视作品出演的关系、PURCHASED表示人与商品之间的购买关系)
  • 可包含属性,例如:xxx出演了什么电影,出演这个边(关系)中,我们可以设置具体的时间,具体什么时候出演了这个电影
  1. 属性(Properties):节点和关系的键值对属性
  2. 标签(Labels):节点的分类标记,如:Movie电影、Person人、Actor演员等

应用场景

  1. 社交网络分析
  • 好友推荐系统
  • 影响力传播分析
  1. 推荐引擎
  • “购买此商品的用户也购买了…”
  • 个性化内容推荐
  • 相关好友推送
  1. 欺诈检测
  • 识别异常交易模式
  • 发现欺诈团伙关联
  1. 知识图谱
  • 构建企业知识库
  • 语义搜索系统
  • 血缘图谱
  1. 网络与IT运维
  • 基础设施依赖关系映射
  • 影响分析
  1. 供应链管理
  • 物流路径优化
  • 风险传播分析

安装[neo4j]

这里以neo4j为例,讲解图数据库基本使用。
官方网站:https://neo4j.com/
官方教程地址:https://neo4j.ac.cn/docs/

大家可以直接通过官网下载,也可以通过docker方式下载使用,我这里演示docker安装:

#  创建映射目录
mkdir -p /Users/ziyi/docker-home/neo4j/{data,logs,conf,import}docker run -d --name neo4j -p 7474:7474 -p 7687:7687 -v /Users/ziyi/docker-home/neo4j/data:/data -v /Users/ziyi/docker-home/neo4j/plugins:/var/lib/neo4j/plugins -v /Users/ziyi/docker-home/neo4j/logs:/logs -v /Users/ziyi/docker-home/neo4j/conf:/var/lib/neo4j/conf -v /Users/ziyi/docker-home/neo4j/import:/var/lib/neo4j/import -e NEO4J_AUTH=neo4j/12345678 neo4j:5.26.6# 访问浏览器,并输入 neo4j / 12345678 登录账号
http://localhost:7474/browser/preview/

使用

1. cypher语法

创建节点

// 其中Person为标签/类型,Alice为一个具体的节点,name、age是Alice这个具体节点的属性
CREATE (:Person {name: 'Alice', age: 30})
CREATE (:Person {name: 'Bob', occupation: 'Engineer'})

在这里插入图片描述

最后效果:
在这里插入图片描述

创建关系

//找到Alice和Bob两个节点,并为其创建FRIENDS朋友关系,同时为这个关系设置属性
MATCH (a:Person), (b:Person)
WHERE a.name = 'Alice' AND b.name = 'Bob'
CREATE (a)-[:FRIENDS {since: '2020-01-01'}]->(b)

在这里插入图片描述

查询数据

// 查找所有人员
MATCH (p:Person) RETURN p// 查找Alice的朋友
MATCH (alice:Person {name: 'Alice'})-[:FRIENDS]->(friend)
RETURN friend.name

在这里插入图片描述

更新数据

MATCH (p:Person {name: 'Alice'})
SET p.age = 31, p.location = 'New York'
RETURN p

在这里插入图片描述

删除数据

// 删除节点及其关系
MATCH (p:Person {name: 'Bob'})
DETACH DELETE p// 删除关系
// 删除任意方向的FRIENDS关系
MATCH (t:Person {name: 'Tom'})-[r:FRIENDS]-(b:Person {name: 'Bob'})
DELETE r// 删除所有数据(谨慎使用!)
MATCH (n) DETACH DELETE n

在这里插入图片描述

多跳查询

//补充数据用于展示多跳查询
CREATE (:Person {name: 'Tom', age: 30});
MATCH (a:Person), (b:Person)
WHERE a.name = 'Tom' AND b.name = 'Bob'
CREATE (a)-[:FRIENDS]->(b),(b)-[:FRIENDS]->(a);// 查找Alice的2度好友(朋友的朋友)
MATCH (alice:Person {name: 'Alice'})-[:FRIENDS*2]->(fof)
RETURN DISTINCT fof.name

在这里插入图片描述

最短查询

MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Tom'}),
path = shortestPath((a)-[*]-(b))
RETURN path

在这里插入图片描述

聚合函数

MATCH (p:Person)
RETURN avg(p.age) AS averageAge, count(*) AS totalPeople

在这里插入图片描述

2. 插件安装[apoc]

neo4j图数据库可支持很多插件扩展,例如:apoc、

  1. apoc插件下载:https://github.com/neo4j/apoc/releases?page=1

neo4j与apoc版本对应关系:https://neo4j.ac.cn/labs/apoc/5/installation/

在这里插入图片描述

下载与自己neo4j匹配的插件即可,因为开始通过docker搭建neo4j时,我们已经做了plugins的映射:-v /Users/ziyi/docker-home/neo4j/plugins:/var/lib/neo4j/plugins。所以我们直接将插件下载到本地/Users/ziyi/docker-home/neo4j/plugins目录即可。
在这里插入图片描述
2. 配置文件新增配置
neo4j.conf新增:

dbms.security.procedures.unrestricted=apoc.*
dbms.security.procedures.allowlist=apoc.*

在这里插入图片描述

  1. 重启容器
# 重启neo4j容器
docker ps | grep neo4j
docker restart 容器ID
  1. 来到可视化页面,输入下面命令验证插件是否安装成功
return apoc.version()

在这里插入图片描述
5. apoc里面有很多内置函数,可直接使用
在这里插入图片描述
效果:
在这里插入图片描述

http://www.xdnf.cn/news/16020.html

相关文章:

  • 设备健康管理实施案例:中讯烛龙预测性维护系统的实战应用
  • 基于bert-lstm对微博评论的情感分析系统设计与实现
  • 新版 Java SE 集合框架 Map 篇
  • Pycharm的Terminal打开后默认是python环境
  • Kafka 在分布式系统中的关键特性与机制深度解析
  • 基于Pytorch的人脸识别程序
  • 1948. 删除系统中的重复文件夹
  • 定点小数与分数
  • langchain调用本地ollama语言模型和嵌入模型
  • 线程状态线程安全
  • gradle微服务依赖模版
  • 软件反调试(5)- 基于注册表实时调试器检测
  • [Python] -项目实战7- 用Python和Tkinter做一个图形界面小游戏
  • 我的世界-推理
  • 基于Event Sourcing和CQRS的微服务架构设计与实战
  • 连接语言大模型(LLM)服务进行对话
  • 随着GPT-5测试中泄露OpenAI 预计将很快发布 揭秘GPT-5冲击波:OpenAI如何颠覆AI战场,碾压谷歌和Claude?
  • [硬件电路-58]:根据电子元器件的控制信号的类型分为:电平控制型和脉冲控制型两大类。
  • 威力导演 12:革新级影音创作平台——专业特效与极致效率的完美融合
  • 算法题(176):three states
  • 100个GEO基因表达芯片或转录组数据处理27 GSE83456
  • [simdjson] 实现不同CPU调度 | 自动硬件适配的抽象
  • JAVA面试宝典 -《API设计:RESTful 与 GraphQL 对比实践》
  • Linux操作系统之线程(四):线程控制
  • RabbitMQ核心组件浅析:从Producer到Consumer
  • 【Django】DRF API版本和解析器
  • ubuntu-linux-pycharm-社区版安装与django配置
  • 高性能熔断限流实现:Spring Cloud Gateway 在电商系统的实战优化
  • Linux网上邻居局域网络共享工具Samba及Smb协议,smbd,nmbd服务,smbpasswd,pdbedit命令,笔记250720
  • 数组算法之【合并两个有序数组】