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

Neo4j初解

Neo4j 是目前应用非常广泛的一款高性能的 NoSQL 图数据库,其设计和实现专门用于存储、查询和遍历由节点(实体)、关系(边)以及属性(键值对)构成的图形数据模型。它的核心优势在于能够以一种自然且高效的方式表示和处理极其复杂的关系网络,从而克服传统关系型数据库(RDBMS)在多表 JOIN 查询中性能急剧下降的问题。

下载地址:

Neo4j Deployment Center - Graph Database & Analytics

也可以通过docker进行部署

docker pull neo4j:latest

使用 docker run 命令启动一个 Neo4j 容器,映射常用端口(7474 用于浏览器访问、7687 用于 Bolt 协议):

docker run -d \--name neo4j \-p 7474:7474 -p 7687:7687 \-v /your/local/data:/data \-v /your/local/logs:/logs \-v /your/local/conf:/var/lib/neo4j/conf \-v /your/local/import:/var/lib/neo4j/import \--env NEO4J_AUTH=neo4j/your_password \neo4j:latest

1 专为图数据设计

Neo4j 基于属性图模型,将数据存储为节点、关系和属性,这种模型与现实世界中实体及其相互联系的本质非常贴近。对于那些本质就是网状、连接密集的数据(如社交网络、推荐系统中的用户关系),它能提供直观的数据表达和操作方式。

2 高性能图遍历

Neo4j 的核心优势之一是“免索引邻接”。每个节点直接存储了指向其相邻节点的指针,使得遍历节点间的关系不依赖全局索引,能够在常数时间内快速定位和访问相邻节点。对于涉及深度遍历、路径查询和复杂关系分析的场景,这种设计大大减少了查询开销。

3 简洁直观的查询语言

Neo4j 提供的 Cypher 查询语言语法清晰、易学且表达力强。使用类似 ASCII 艺术的语法,如“(a)-[:FRIENDS_WITH]->(b)”来表示关系,不仅使查询更自然,也简化了开发者表达复杂图查询需求的过程。

4 灵活的模式和扩展性

Neo4j 的数据模型本身无固定的 schema 或只有很少的约束,这使得数据模式可以随着应用需求的变化而轻松扩展和调整。开发者无需对数据库表结构进行频繁改动,这对于动态变化或者数据结构多变的业务场景非常有优势。

5 ACID 事务支持和企业级特性

Neo4j 完全支持 ACID 事务,不论是读取还是写入操作,都能保证数据的一致性和可靠性。同时,企业版提供高可用集群、在线备份、监控和安全管理等多项高级特性,适合要求严格的生产环境。

6 Neo4j的优势

  • 高效遍历: 免索引邻接使得图遍历(例如查找“朋友的朋友”)的时间复杂度非常低,这对于大规模和复杂关系的数据查询极其重要。

  • 快速定位: 采用固定大小记录存储,每个节点或关系的物理位置可以通过简单计算得到,进一步提升了读写速度。

  • 直观表达: 使用 Cypher 查询语言,开发者可以快速编写和调试查询语句,便于快速搭建原型。

  • 灵活模式: 无需提前设计复杂的表结构,能够根据业务需求不断演进数据模型,降低维护成本。

  • 图数据可视化: Neo4j Browser 和 Neo4j Bloom 等工具让数据结果的图形展示变得直观生动,辅助决策分析。

  • 多语言支持: 提供 Java、Python、JavaScript 等多种驱动和 API,使得开发者可以根据自己的技术栈灵活使用。

7 应用场景

  • 社交推荐: 根据好友关系、互动历史计算用户影响力、发现潜在朋友。

  • 网络结构分析: 分析社交网络中的传播路径和影响范围,有效支持营销策略和舆情监控。

  • 个性化推荐: 分析用户行为及其相互关系,从用户的兴趣、浏览、购买记录中提取特征,提供精准商品或内容推荐。

  • 协同过滤: 基于用户之间的相似性推导新推荐项,无需传统的多表关联操作。

  • 企业知识管理: 将企业内部各类数据以实体和关系的形式组织,为企业决策提供直观数据支持。

  • 智能问答和搜索: 构建基于语义的知识图谱,助力自然语言查询和推理过程,提高搜索引擎准确性。

  • 异常模式识别: 在金融交易、信用卡使用等场景中,通过图遍历迅速检测复杂交易路径中隐藏的异常或可疑模式。

  • 实时监控: 利用图算法(如最短路径、社区检测等)判断网络中异常节点和异常交易行为,提前预警风险。

  • 网络拓扑管理: 对复杂网络结构进行建模、监控和故障排查,帮助优化网络配置。

  • 供应链追踪: 分析供应链各节点之间的关联,提高物流和库存管理效率,降低运营风险。

案例使用,通过python来实现一个简易的neo4j的包:

使用 pip 安装 neo4j:

pip install neo4j
from neo4j import GraphDatabase# 配置 Neo4j 的连接信息
URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "your_password"  # 替换为你的密码# 创建一个会话
driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))def create_person(tx, name, age):"""创建一个 Person 节点"""tx.run("CREATE (p:Person {name: $name, age: $age})", name=name, age=age)def create_friendship(tx, name1, name2):"""创建两个 Person 节点之间的关系"""tx.run("MATCH (a:Person {name: $name1}), (b:Person {name: $name2})""CREATE (a)-[:FRIEND]->(b)",name1=name1, name2=name2)def get_persons(tx):"""查询所有 Person 节点"""result = tx.run("MATCH (p:Person) RETURN p.name AS name, p.age AS age")return [record for record in result]# 启动 Neo4j 并写入数据
try:with driver.session() as session:# 清空数据库(可选)session.run("MATCH (n) DETACH DELETE n")# 创建节点session.write_transaction(create_person, "Alice", 30)session.write_transaction(create_person, "Bob", 25)session.write_transaction(create_person, "Charlie", 35)# 创建关系session.write_transaction(create_friendship, "Alice", "Bob")session.write_transaction(create_friendship, "Bob", "Charlie")# 查询数据persons = session.read_transaction(get_persons)print("Persons in the database:")for person in persons:print(f"Name: {person['name']}, Age: {person['age']}")finally:driver.close()

运行结果

Persons in the database:
Name: Alice, Age: 30
Name: Bob, Age: 25
Name: Charlie, Age: 35

你可以通过 Neo4j Browser(http://localhost:7474)登录并运行以下查询来验证数据:

MATCH (p:Person) RETURN p

或者查看关系:

MATCH (a:Person)-[r:FRIEND]->(b:Person) RETURN a, r, b

以下举个例子,以java1.8为例,安装 Neo4j 3.5.6 版本的详细步骤:

1. 安装 Java JDK

Neo4j 是用 Java 语言开发的,因此需要安装 Java JDK。以下是安装 JDK 的步骤:

  1. 从 Oracle 官网下载 JDK 安装包。

  2. 运行安装包,双击下载的 .exe 文件开始安装。

  3. 在安装过程中,选择合适的 JDK 安装路径,并勾选“添加到系统环境变量”选项。

  4. 安装完成后,打开命令提示符,输入 java -version 检查 JDK 是否安装成功。

2. 下载 Neo4j 安装包

Neo4j 版本JDK 版本
Neo4j 3.5.xJDK 8
Neo4j 4.0.xJDK 11
Neo4j 4.1.xJDK 11
Neo4j 4.2.xJDK 11
Neo4j 4.3.xJDK 11
Neo4j 4.4.xJDK 11
Neo4j 5.xJDK 11 或 JDK 17

从 Neo4j 官网下载 Neo4j 社区版安装包。由于官网下载速度较慢,也可以选择从其他渠道下载。

https://download.csdn.net/download/yyfloveqcw/90629997

3. 解压安装包

将下载的 Neo4j 安装包解压到自定义目录。

4. 配置 Neo4j

  1. 打开 neo4j-community-3.5.6/conf/neo4j.conf 文件。

  2. 根据需要修改配置文件中的参数,例如数据目录、日志目录等。

  3. 保存并关闭配置文件。

5. 设置环境变量

  1. 打开“设置” -> “系统” -> “高级系统设置” -> “环境变量”。

  2. 在系统变量中,新建一个名为 NEO4J_HOME 的变量,值为 Neo4j 安装目录。

  3. 在系统变量中,修改 Path 变量,添加 %NEO4J_HOME%\bin

6. 启动 Neo4j

  1. 打开命令提示符,切换到 Neo4j 安装目录。

  2. 输入 neo4j.bat console 命令启动 Neo4j。

7. 访问 Neo4j

在浏览器中输入 http://localhost:7474,使用默认用户名 neo4j 和密码 neo4j 登录。

8. 常见问题解答

  • 为什么启动 Neo4j 时出现错误?

    • 可能原因包括:Java JDK 没有正确安装;环境变量设置错误;Neo4j 配置文件错误。

    • 解决方法:检查 Java JDK 是否安装正确;确保环境变量设置正确;检查 Neo4j 配置文件是否正确。

  • 如何修改 Neo4j 的默认端口?

    • neo4j-community-3.5.6/conf/neo4j.conf 文件中,找到 dbms.default.host 参数,将其值修改为你想要的端口。

  • 如何将 Neo4j 安装为服务?

    1. 打开命令提示符,切换到 Neo4j 安装目录。

    2. 输入 neo4j.bat service install 命令安装 Neo4j 服务。

    3. 使用 net start neo4j 命令启动 Neo4j 服务。

相关文章:

Neo4j初解

Neo4j 是目前应用非常广泛的一款高性能的 NoSQL 图数据库,其设计和实现专门用于存储、查询和遍历由节点(实体)、关系(边)以及属性(键值对)构成的图形数据模型。它的核心优势在于能够以一种自然且…...

学习笔记二十——Rust trait

🧩 Rust Trait 彻底搞懂版 👀 目标读者:对 Rust 完全陌生,但想真正明白 “Trait、Trait Bound、孤岛法则” 在做什么、怎么用、为什么这样设计。 🛠 方法: 先给“心里模型”——用生活类比把抽象概念掰开揉…...

音视频小白系统入门课-2

本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅 课程传送门:音视频小白系统入门课 音视频基础ffmpeg原理 往期课程笔记传送门: 音视频小白系统入门笔记-0音视频小白系统入门笔记-1 课程实践代码仓库:传送门 音视频编解…...

Linux:安装 CentOS 7(完整教程)

文章目录 一、简介二、安装 CentOS 72.1 虚拟机配置2.2 安装CentOS 7 三、结语 一、简介 CentOS(Community ENTerprise Operating System)是一个基于 Linux 的发行版之一,旨在提供一个免费的、企业级的计算平台,因其稳定性、安全…...

MATLAB 控制系统设计与仿真 - 34

多变量系统知识回顾 - MIMO system 这一章对深入理解多变量系统以及鲁棒分析至关重要 首先,对于如下系统: 当G(s)为单输入,单输出系统时: 如果: 则: 所以 因此,对于SISO,系统的增…...

【网络】通过Samba实现Window挂在Linux服务器路径

有时候我们去进行内网部署时,会遇到客户或者甲方爸爸说,需要将Linux中的某个路径共享出去到Window上,挂载出比如Z:\这种盘符。通过打开Z盘,来查看服务器的指定目录下的数据。 步骤1: 在Linux中安装samba yum install…...

DevOps 进阶指南:如何让工作流更丝滑?

DevOps 进阶指南:如何让工作流更丝滑? 引言 在 DevOps 世界里,我们追求的是高效、稳定、自动化。但现实总是充满挑战:代码部署失败、CI/CD 过程卡顿、环境不一致……这些痛点让开发和运维团队疲惫不堪。今天,我就来聊聊如何优化 DevOps 工作流,通过实战案例和代码示例,…...

架构思维:缓存层场景实战_读缓存(下)

文章目录 Pre业务场景缓存存储数据的时机与常见问题解决方案1. 缓存读取与存储逻辑2. 高并发下的缓存问题及解决方案3. 缓存预热(减少冷启动问题) 缓存更新策略(双写问题)1. 先更新缓存,再更新数据库(不推荐…...

uniapp微信小程序实现sse

微信小程序实现sse 注:因为微信小程序不支持sse请求,因为后台给的是分包的流,所以我们就使用接受流的方式,一直接受,然后把接受的数据拿取使用。这里还是使用uniapp的原生请求。 上代码 //注意:一定要下…...

C#语言的区块链

C#语言在区块链开发中的应用 引言 区块链技术自比特币问世以来,逐渐发展成为一种革命性的技术,其在金融、供应链、物联网等各个领域都产生了深远的影响。随着区块链应用的不断增加,开发者对区块链技术的需求也在不断上升。在众多编程语言中…...

Ubuntu服务器日志满audit:backlog limit exceeded了会报错解决方案-Linux 审计系统 (auditd) 工具

auditd 是 Linux 系统中的审计守护进程,负责收集、记录和监控系统安全相关事件。以下是相关工具及其功能: 核心组件 auditd - 审计守护进程 系统的审计服务主程序 收集系统调用信息并写入日志文件 通常存储在 /var/log/audit/audit.log auditctl - 审计控…...

新能源汽车能量流测试的传感器融合技术应用指南

第一部分:核心原理模块化拆解 模块1:多源传感器物理层融合 关键技术: 高精度同步采集架构 采用PXIe-8840控制器同步定时模块(NI PXIe-6674T),实现CAN/LIN/模拟量信号的μs级同步光纤电压传感器&#xff0…...

人工智能与网络安全:AI如何预防、检测和应对网络攻击?

引言:网络安全新战场,AI成关键角色 在数字化浪潮不断推进的今天,网络安全问题已经成为每一家企业、每一个组织无法回避的“隐形战场”。无论是电商平台、金融机构,还是政府机关、制造企业,都可能面临数据泄露、勒索病毒…...

链表知识回顾

类型:单链表,双链表、循环链表 存储:在内存中不是连续存储 删除操作:即让c的指针指向e即可,无需释放d,因为java中又内存回收机制 添加节点: 链表的构造函数 public class ListNode {// 结点…...

FPGA学习(五)——DDS信号发生器设计

FPGA学习(五)——DDS信号发生器设计 目录 FPGA学习(五)——DDS信号发生器设计一、FPGA开发中常用IP核——ROM/RAM/FIFO1、ROM简介2、ROM文件的设置(1)直接编辑法(2)用C语言等软件生成初始化文件 3、ROM IP核配置调用 二、DDS信号发…...

【数据结构入门训练DAY-18】信息学奥赛一本通T1331-后缀表达式的值

文章目录 前言一、题目二、解题思路总结 前言 本次训练内容: 栈的复习。栈模拟四则运算计算问题的练习。训练解题思维。 一、题目 从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加()、减…...

OpenCv高阶(六)——图像的透视变换

目录 一、透视变换的定义与作用 二、透视变换的过程 三、OpenCV 中的透视变换函数 1. cv2.getPerspectiveTransform(src, dst) 2. cv2.warpPerspective(src, H, dsize, dstNone, flagscv2.INTER_LINEAR, borderModecv2.BORDER_CONSTANT, borderValue0) 四、文档扫描校正&a…...

性能比拼: Go vs Bun

本内容是对知名性能评测博主 Anton Putra Go (Golang) vs. Bun: Performance (Latency - Throughput - Saturation - Availability) 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 我对 Bun 在之前的基准测试中的出色表现感到惊讶,因此我决定将它与 Go …...

定制化 Docsify 文档框架实战分享

🌟 定制化 Docsify 文档框架实战分享 在构建前端文档平台时,我们希望拥有更友好的用户界面、便捷的搜索、清晰的目录导航以及实用的代码复制功能。借助 Docsify,我实现了以下几个方面的定制优化,分享给大家 🙌。 &…...

Qt中读写结构体字节数据

在Qt中读写结构体字节数据通常涉及将结构体转换为字节数组(QByteArray)或直接从内存中读写。以下是几种常见方法&#xff1a; 方法1&#xff1a;使用QDataStream读写结构体 cpp #include <QFile> #include <QDataStream>// 定义结构体 #pragma pack(push, 1) //…...

鸿蒙ArkUI之布局实战,线性布局(Column,Row)、弹性布局(Flex)、层叠布局(Stack),详细用法

本文聚焦于ArkUI的布局实战&#xff0c;三种十分重要的布局&#xff0c;线性布局、弹性布局、层叠布局&#xff0c;在实际开发过程中这几种布局方法都十分常见&#xff0c;下面直接上手 线性布局 垂直布局&#xff08;Column&#xff09; 官方文档&#xff1a; Column-行列…...

测试基础笔记第七天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、cat命令二、ls -al命令三、>重定向符号四、>>追加重定向符号五、less/more命令六、grep命令七、|管道符八、clear命令九、head命令十、tail命令十一、…...

[Windows] Adobe Camera Raw 17.2 win/Mac版本

[Windows] Adobe Camera Raw 链接&#xff1a;https://pan.xunlei.com/s/VOOIAXoyaZcKAkf_NdP-qw_6A1?pwdpd5k# Adobe Camera Raw&#xff0c;支持Photoshop&#xff0c;lightroom等Adobe系列软件&#xff0c;对相片无损格式进行编辑调色。 支持PS LR 2022 2023 2024 2025版…...

开源模型应用落地-Podcastfy-从文本到声音的智能跃迁-Gradio(一)

一、前言 在当今信息呈现方式越来越多样化的背景下&#xff0c;如何将文字、图片甚至视频高效转化为可听的音频体验&#xff0c;已经成为内容创作者、教育者和研究者们共同关注的重要话题。Podcastfy是一款基于Python的开源工具&#xff0c;它专注于将多种形式的内容智能转换成…...

深入剖析 Java Web 项目序列化:方案选型与最佳实践

在 Java Web 开发中&#xff0c;“序列化”是一个你无法绕过的概念。无论是缓存数据、共享 Session&#xff0c;还是进行远程过程调用&#xff08;RPC&#xff09;或消息传递&#xff0c;序列化都扮演着底层数据搬运工的角色。它负责将内存中的 Java 对象转换成可传输或可存储的…...

Python 深度学习实战 第11章 自然语言处理(NLP)实例

Python 深度学习实战 第11章 自然语言处理(NLP)实例 内容概要 第11章深入探讨了自然语言处理&#xff08;NLP&#xff09;的深度学习应用&#xff0c;涵盖了从文本预处理到序列到序列学习的多种技术。本章通过IMDB电影评论情感分类和英西翻译任务&#xff0c;详细介绍了如何使…...

零基础上手Python数据分析 (19):Matplotlib 高级图表定制 - 精雕细琢,让你的图表脱颖而出!

写在前面 —— 超越默认样式,掌握 Matplotlib 精细控制,打造专业级可视化图表 上一篇博客,我们学习了 Matplotlib 的基础绘图功能,掌握了如何绘制常见的折线图、柱状图、散点图和饼图,并进行了基本的图表元素定制,例如添加标题、标签、图例等。 这些基础技能已经能让我…...

将 DeepSeek 集成到 Spring Boot 项目实现通过 AI 对话方式操作后台数据

文章目录 项目简介本项目分两大模块 GiteeMCP 简介环境要求项目代码核心实现代码MCP 服务端MCP 客户端 DeepSeek APIDockersse 连接ws 连接&#xff08;推荐&#xff09;http 连接 vue2-chat-windowCherry Studio配置模型配置 MCP调用 MCP 项目简介 在本项目中&#xff0c;我们…...

《前端面试题之 Vue 篇(第三集)》

目录 1、 nvm的常用命令①.Node.js 版本与 npm 版本的对应关系②Vue2 与 Vue3 项目的 Node.js 版本分界线③版本管理实践建议 2、Vue2 项目搭建&#xff08;基于 vue-cli Webpack&#xff09;① 环境准备② 安装 Vue CLI&#xff08;脚手架&#xff09;③.创建项目&#xff08…...

PHP实现图片自动添加水印效果

<?php // 设置原始图片路径和水印图片路径 $original_image original.jpg; $watermark_image watermark.png;// 创建图片资源 $original imagecreatefromjpeg($original_image); $watermark imagecreatefrompng($watermark_image);// 获取图片尺寸 $original_width im…...