Neo4j-01.入门简介与环境配置

Neo4j 是目前市场占有率最高的属性图(property graph)数据库,使用声明式查询语言 Cypher(类 SQL 的 ASCII 图模式语法),支持完整 ACID(原子性、一致性、隔离性、持久性)事务,生态成熟。本文是 Neo4j 实战系列的起点:弄清版本差异、搭好本地环境、跑通第一条查询。

段末注释:Neo4j 为 Neo4j Inc. 出品的原生图数据库产品;Cypher 为其查询语言,也是 openCypher 开放规范的基础。

前置阅读01.图数据库-概述与选型


一、Neo4j 是什么:核心对象一览

Neo4j 在存储与查询层面只关心四类对象:

对象 英文 说明 类比 RDBMS
节点 Node 实体,如人、蛋白、论文 一行记录
标签 Label 节点的类型标记,可多标签 表名 / 类型
关系 Relationship 有向边,类型固定,如 KNOWSCITES 外键 + 关联表
属性 Property 键值对,挂在节点或关系上 列字段
1
2
3
flowchart LR
A["(:Person {name:'Alice'})"] -->|FRIENDS| B["(:Person {name:'Bob'})"]
B -->|WORKS_AT| C["(:Company {name:'Acme'})"]

与关系型数据库的本质差异:关系是一等公民——遍历邻居不需要 JOIN,存储层采用无索引邻接(index-free adjacency),每个节点直接指向其关联关系。


二、版本与部署形态

2.1 三个版本线

版本 许可 典型用途
Community Edition 开源(GPL) 学习、中小规模自托管
Enterprise Edition 商业 集群、RBAC、在线备份、Fabric 分片
AuraDB 托管 SaaS 免运维、按量计费、自动备份

社区版单库规模可达数百亿节点/边量级(受硬件限制),对多数企业知识图谱、风控、推荐场景足够;需要因果集群(causal cluster)、细粒度权限或Fabric 多库联邦时再考虑企业版或 Aura。

2.2 部署方式选型

方式 命令/入口 适合
Neo4j Desktop 图形界面,内置 Browser 本地学习、小项目
Docker docker run neo4j CI、团队统一环境
Linux 包 / tar neo4j start 生产自托管
AuraDB console.neo4j.io 快速上线、无运维团队

三、环境安装(推荐 Docker)

3.1 Docker 一键启动

1
2
3
4
5
6
7
8
docker run -d \
--name neo4j \
-p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/your-strong-password \
-e NEO4J_PLUGINS='["apoc"]' \
-v neo4j_data:/data \
-v neo4j_logs:/logs \
neo4j:5-community
端口 协议 用途
7474 HTTP Browser、REST API
7687 Bolt 官方驱动(Python/Java/JS)

首次登录 Browser(http://localhost:7474):用户名 neo4j,密码为 NEO4J_AUTH/ 后的部分。

3.2 关键配置项(neo4j.conf

1
2
3
4
5
6
7
8
9
10
# 内存:堆 + 页缓存,建议页缓存 ≈ 图数据热集大小
server.memory.heap.initial_size=512m
server.memory.heap.max_size=2g
server.memory.pagecache.size=2g

# 允许从文件系统 LOAD CSV(生产请收紧路径)
server.directories.import=import

# 默认库名(Neo4j 5.x 多数据库)
initial.dbms.default_database=neo4j

段末注释:Bolt 为 Neo4j 二进制协议,驱动通过它收发 Cypher;页缓存(page cache)缓存存储文件页,对遍历性能影响极大。

3.3 验证连接

1
2
3
# cypher-shell(容器内或本地安装)
cypher-shell -a bolt://localhost:7687 -u neo4j -p 'your-strong-password' \
"RETURN 'hello' AS msg"

四、Neo4j Browser 初识

Browser 是随 Neo4j 附带的 Web 客户端,适合交互式写 Cypher、看图可视化

区域 作用
命令栏 输入 Cypher,:help 看内置命令
图视图 节点/关系可视化,可拖拽
表视图 结果表格
侧栏 库列表、连接信息、收藏查询

常用 Browser 命令:

1
2
3
4
5
:help          // 帮助
:clear // 清屏
:server status // 连接状态
:use system // 切换到 system 库(管理库)
:use neo4j // 切换到业务库

五、第一条 Cypher:创建、查询、删除

5.1 创建数据

1
2
3
4
5
// 创建两人及其关系
CREATE (a:Person {name: 'Alice', age: 30})
CREATE (b:Person {name: 'Bob', age: 28})
CREATE (a)-[:KNOWS {since: 2020}]->(b)
RETURN a, b;

语法要点:

  • () 表示节点,:Label 为标签,{} 为属性
  • -[:TYPE]-> 表示有向关系,关系也可带属性
  • CREATE 每次执行都新建节点,可能重复

5.2 查询

1
2
3
// 匹配 Alice 认识的人
MATCH (a:Person {name: 'Alice'})-[:KNOWS]->(friend)
RETURN friend.name AS friend_name;

5.3 幂等写入:MERGE

1
2
3
4
MERGE (p:Person {name: 'Alice'})
ON CREATE SET p.created = timestamp()
ON MATCH SET p.lastSeen = timestamp()
RETURN p;

MERGE =「有则匹配,无则创建」,导入与同步场景必备。

5.4 清理(学习环境)

1
2
// 删除所有节点及关系(慎用!)
MATCH (n) DETACH DELETE n;

六、驱动连接示例(Python)

生产环境通过官方驱动访问,而非 Browser。

1
2
3
4
5
6
7
8
9
10
11
12
13
from neo4j import GraphDatabase

URI = "bolt://localhost:7687"
AUTH = ("neo4j", "your-strong-password")

with GraphDatabase.driver(URI, auth=AUTH) as driver:
driver.verify_connectivity()
records, summary, keys = driver.execute_query(
"MATCH (p:Person) RETURN p.name AS name LIMIT 10",
database_="neo4j",
)
for record in records:
print(record["name"])

安装:pip install neo4j

语言 包名 说明
Python neo4j 官方,推荐
Java neo4j-java-driver Spring Data Neo4j 基于此
JavaScript neo4j-driver Node/Browser 均可
Go neo4j-go-driver 官方

七、目录与文件结构(自托管)

路径 内容
data/databases/ 各库图数据
data/transactions/ 事务日志
logs/ 运行日志
import/ LOAD CSV 默认可读目录
plugins/ APOC、GDS 等插件 JAR
conf/neo4j.conf 主配置

不要在数据库运行时手动改 data/ 下的文件;备份与迁移用官方工具(见 Neo4j-06)。


八、系列后续篇章

下一篇 内容
Neo4j-02.数据模型与适用场景 如何建模、什么数据该上图
Neo4j-03.Cypher增删改查 完整 CRUD 与约束
Neo4j-04.数据导入与对接工具 CSV、驱动、ETL

九、小结

  • Neo4j 用节点 + 有向关系 + 属性表达图;Cypher 是日常操作语言。
  • 学习用 Docker + Browser 最快;生产用 Bolt 驱动 + 合理内存配置
  • CREATE 会重复数据;同步场景用 MERGE;删节点记得 DETACH DELETE
-------------本文结束感谢您的阅读-------------