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 服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习MySQL的第十天

一、MySQL的数据类型 1.MySQL的数据类型 2.常见的数据类型的属性 二、整数类型 三、浮点类型 REAL默认就是DOUBLE。如果你把SQL模式设定为启用“REAL_AS_FLOAT”,那么,MySQL就认为REAL是FLOAT。如果要启用“REAL_AS_FLOAT”,可以通过以下SQL语句实现: SET sql_mode &…

ubuntu24.04上使用qemu+buildroot+uboot+linux+tftp+nfs模拟搭建vexpress-ca9嵌入式linux开发环境

1 准备工作 1.1 安装依赖工具 sudo apt-get update && sudo apt-get install build-essential git bc flex libncurses5-dev libssl-dev device-tree-compiler1.2 安装arm交叉编译工具链 sudo apt install gcc-arm-linux-gnueabihf安装之后,在终端输入ar…

ubuntu 22.04 使用ssh-keygen创建ssh互信账户

现有两台ubuntu 22.04服务器,ip分别为192.168.66.88和192.168.88.66。需要将两台服务器创建新用户并将新用户做互信。 创建账户 adduser user1 # 如果此用户不想使用密码,直接一直回车就行,创建的用户是没法使用用户密码进行登陆的 su - …

【PCIE配置空间】

1 PCIE配置空间 1.1 软件如何知道PCIE设备是Swith,RC还是EP? –软件通过读取寄存器信息。 PCIE配置空间• PCIE寄存器;--PCIE配置协议规定必须实现的空间。--PCIE存在两种配置空间Type0/Type1;--Type0配置空间EP设备必须实现;-…

Android 热点二维码简单示例

Android 热点二维码简单示例 一、前言 Android 原生设置有热点二维码分享功能,有些系统应用也会有这个需求。 下面看看是如何实现的。 本文是一个比较简单的内容。 二、热点二维码生成实现 1、效果 整个应用就一个普通的Activity,显示一个按钮和二维…

uv:重新定义Python开发效率的下一代工具链

在Python生态系统中,包管理和项目工具链的复杂性一直是开发者面临的一大挑战。从依赖管理、虚拟环境创建到多版本Python切换,传统的工具链(如pip、virtualenv、poetry等)虽然功能强大,但操作繁琐、性能不足的问题长期存…

T101D加固平板电脑:无人机地面站的高效智能控制核心

随着无人机技术在应急救援、农业监测、军事侦察等领域的广泛应用,对地面控制设备的要求也日益提高。鲁成伟业推出的T101D加固平板电脑凭借其高性能、强防护和专业化设计,成为无人机地面站的核心控制终端,为复杂环境下的作业提供了可靠支持。 …

Datawhale AI春训营】AI + 新能源(发电功率预测)Task1

赛题链接 官网 新能源发电功率预测赛题进阶方案 下面是ai给的一些建议 新能源发电功率预测赛题进阶方案 一、时序特性深度挖掘 1. 多尺度周期特征 # 分钟级周期编码 train[15min_index] (train[hour]*4 train[minute]//15)# 周周期特征 train[weekday] pd.to_datetime…

山东科技大学深度学习考试回忆

目录 一、填空(五个空,十分) 二、选择题(五个,十分) 三、判断题(五个,五分) 四、论述题(四个,四十分) 五、计算题(二个&#xff…

Redis线上操作最佳实践有哪些?

大家好,我是锋哥。今天分享关于【Redis线上操作最佳实践有哪些?】面试题。希望对大家有帮助; Redis线上操作最佳实践有哪些? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在使用 Redis 时,尤其是在生产环境中,合理…

mac中的zip文件压缩与压缩文件中指定目录删除

问题 在使用mac的图形界面压缩文件后,往往那个压缩文件中带有__MACOSX文件,但是,这个文件夹又是我们不需要的目录,所有,需要对mac图形化界面压缩后的文件目录进行删除,改如何做? 检查压缩文件…

【记录】服务器用命令开启端口号

这里记录下如何在服务器上开启适用于外界访问的端口号。 方法 1 使用防火墙 1 su ,命令 输入密码 切换到root节点 2 开启防火墙 systemctl start firewalld3 配置开放端口 firewall-cmd --zonepublic --add-port8282/tcp --permanent4 重启防火墙 firewall-cmd…

深度学习-torch,全连接神经网路

3. 数据集加载案例 通过一些数据集的加载案例,真正了解数据类及数据加载器。 3.1 加载csv数据集 代码参考如下 import torch from torch.utils.data import Dataset, DataLoader import pandas as pd ​ ​ class MyCsvDataset(Dataset):def __init__(self, fil…

C++/Python实现RGB和HSI相互转换

1--C版本 #include <opencv2/opencv.hpp> #include <iostream> #include <cmath>// RGB to HSI cv::Vec3f RGBtoHSI(cv::Vec3b rgb) {float B rgb[0] / 255.0f;float G rgb[1] / 255.0f;float R rgb[2] / 255.0f;float num 0.5f * ((R - G) (R - B));f…

【Linux我做主】make和makefile自动化构建

make和makefile自动化构建 make和makefile自动化构建github地址前言背景介绍为什么需要make和makefile&#xff1f; make和makefile解析什么是make和makefile依赖关系和依赖方法核心语法结构简单演示编译清理 多阶段编译示例 make时执行的顺序场景1&#xff1a;clean目标在前(特…

Qt 入门 5 之其他窗口部件

Qt 入门 5 之其他窗口部件 本文介绍的窗口部件直接或间接继承自 QWidget 类详细介绍其他部件的功能与使用方法 1. QFrame 类 QFrame类是带有边框的部件的基类。它的子类包括最常用的标签部件QLabel另外还有 QLCDNumber、QSplitter,QStackedWidget,QToolBox 和 QAbstractScrol…

JAVA学习-多线程

线程 线程(Thread)是一个程序内部的一条执行流程。 程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序。 线程的常用方法及构造器&#xff1a; Thread提供的常用方法public void run() 线程的任务方法public void start() 启动线程public String getName() …

Github 2025-04-19Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-04-19统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目1Rust: 构建可靠高效软件的开源项目 创建周期:5064 天开发语言:Rust协议类型:OtherStar数量:92978 个Fork数量:12000…

OpenLayers:视图变换的方法

一、什么是视图变换&#xff1f; 视图变换就是指视图的 extent&#xff08;范围&#xff09;、center&#xff08;中心点&#xff09;、zoom&#xff08;缩放级别&#xff09;、 resolution&#xff08;分辨率&#xff09;、rotation&#xff08;旋转角&#xff09;等参数发生…

数字孪生火星探测车,星际探索可视化

运用图扑构建数字孪生火星探测车&#xff0c;高精度还原外观与内部构造。实时映射探测车在火星表面的移动、探测作业及设备状态&#xff0c;助力科研人员远程监测、分析数据&#xff0c;为火星探索任务提供可视化决策支持。