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 的步骤:
-
从 Oracle 官网下载 JDK 安装包。
-
运行安装包,双击下载的
.exe
文件开始安装。 -
在安装过程中,选择合适的 JDK 安装路径,并勾选“添加到系统环境变量”选项。
-
安装完成后,打开命令提示符,输入
java -version
检查 JDK 是否安装成功。
2. 下载 Neo4j 安装包
Neo4j 版本 | JDK 版本 |
---|---|
Neo4j 3.5.x | JDK 8 |
Neo4j 4.0.x | JDK 11 |
Neo4j 4.1.x | JDK 11 |
Neo4j 4.2.x | JDK 11 |
Neo4j 4.3.x | JDK 11 |
Neo4j 4.4.x | JDK 11 |
Neo4j 5.x | JDK 11 或 JDK 17 |
从 Neo4j 官网下载 Neo4j 社区版安装包。由于官网下载速度较慢,也可以选择从其他渠道下载。
https://download.csdn.net/download/yyfloveqcw/90629997
3. 解压安装包
将下载的 Neo4j 安装包解压到自定义目录。
4. 配置 Neo4j
-
打开
neo4j-community-3.5.6/conf/neo4j.conf
文件。 -
根据需要修改配置文件中的参数,例如数据目录、日志目录等。
-
保存并关闭配置文件。
5. 设置环境变量
-
打开“设置” -> “系统” -> “高级系统设置” -> “环境变量”。
-
在系统变量中,新建一个名为
NEO4J_HOME
的变量,值为 Neo4j 安装目录。 -
在系统变量中,修改
Path
变量,添加%NEO4J_HOME%\bin
。
6. 启动 Neo4j
-
打开命令提示符,切换到 Neo4j 安装目录。
-
输入
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 安装为服务?
-
打开命令提示符,切换到 Neo4j 安装目录。
-
输入
neo4j.bat service install
命令安装 Neo4j 服务。 -
使用
net start neo4j
命令启动 Neo4j 服务。
-