图数据库入门:Neo4j
本文系统讲解图数据库核心概念,以 Neo4j 为代表,涵盖节点、边、路径的数据模型,Cypher 图查询语言,多跳遍历与最短路径,社交网络、知识图谱、风控、推荐等典型场景,对比关系型数据库的 JOIN 查询,并演示使用 Python 驱动连接 Neo4j。
视频讲解
图数据库入门:Neo4j
一个视频,讲透图数据库,不用学几个月。
第一章 - 图数据库是什么
这一个视频把图数据库这一类讲完,代表是 {{Neo4j}}。
一句话:图数据库把世界看成{{节点和边}},擅长回答"谁和谁有什么关系、中间隔了几跳"这类问题,是关系型数据库做不好的多跳关系检索。
什么时候用得上
好友网络:A 和 B 之间隔了几个共同好友?
知识图谱:这个人 -> 在哪家公司 -> 这家公司 -> 有哪些产品?
风控链路:A 转账给 B,B 转账给 C,是不是洗钱链?
推荐路径:看过 X 的人也看过 Y
图数据库和关系型的分工
关系型把关系存在表里,多跳要反复 JOIN;图数据库把关系存成边,沿边走就行。
本章小结
图数据库专攻"关系与路径",Neo4j 是它的代表——节点 + 边 + 沿边走。
第二章 - 数据模型:节点和边
三个要素
- {{节点 Node}}:一个实体,带标签和属性,如
(:Person {name: "Ada"})。 - {{边 Relationship}}:两个节点的关系,有类型和方向,如
-[:FRIEND]->。 - {{路径 Path}}:一串节点和边连成的路线。
(Ada)-[:FRIEND]->(Lin)-[:FRIEND]->(Bob)
节点 边(有类型有方向) 节点
和关系型的对照
关系型用外键 + JOIN 表示关系;图数据库直接把关系存成边,一跳就是一步。
本章小结
节点是实体、边是关系、路径是路线——图数据库把"关系"变成一等公民。
第三章 - Cypher:图查询语言
用画图的方式写查询
{{Cypher}} 是 Neo4j 的查询语言,直接用 ASCII 图案匹配关系:
-- 创建节点和关系
CREATE (a:Person {name: 'Ada'})
CREATE (b:Person {name: 'Lin'})
CREATE (a)-[:FRIEND]->(b)
-- 查 Ada 的朋友
MATCH (a:Person {name: 'Ada'})-[:FRIEND]->(f)
RETURN f.name
(a)-[:FRIEND]->(f) 就是"节点 a 通过 FRIEND 边指向节点 f",写查询像画图。
本章小结
Cypher 用 (节点)-[:边]->(节点) 的图案来匹配关系,比 SQL 的 JOIN 直观得多。
第四章 - 多跳查询与路径
一跳一跳往外走
-- 1 到 3 跳内的朋友(朋友的朋友...)
MATCH (a:Person {name: 'Ada'})-[:FRIEND*1..3]->(f)
RETURN DISTINCT f.name
最短路径
MATCH p = shortestPath(
(a:Person {name: 'Ada'})-[:FRIEND*]-(b:Person {name: 'Bob'})
)
RETURN p
为什么比 SQL 快
关系型查"三跳的朋友"要自连接三次,数据量一大就爆炸;图数据库沿边跳,每跳几乎 O(1)。
本章小结
图数据库的杀手锏是{{多跳遍历}}:*1..3 一次写出"几跳之内",shortestPath 直接找最短路径。
第五章 - 图建模与典型场景
四个经典场景
- {{社交网络}}:好友、关注、共同好友。
- {{知识图谱}}:实体 - 关系 - 实体,构建领域知识。
- {{风控}}:资金链路、异常转账环。
- {{推荐}}:用户 - 喜欢 - 商品,协同过滤。
-- 共同好友:Ada 和 Bob 都认识谁
MATCH (a:Person {name: 'Ada'})-[:FRIEND]->(f)<-[:FRIEND]-(b:Person {name: 'Bob'})
RETURN f.name
本章小结
社交、知识图谱、风控、推荐——凡是"关系即核心"的场景,图数据库都更自然。
第六章 - 对比关系型 JOIN
一张表看清差异
| 维度 | 关系型 | 图数据库 |
|---|---|---|
| 关系存储 | 外键 + 表 | 边 |
| 多跳查询 | 反复 JOIN | 沿边遍历 |
| 深度 | 越深越慢 | 每跳近 O(1) |
| 适合 | 事务、聚合 | 关系、路径 |
什么时候图库完胜
关系越深、跳数越多,图库优势越大。SQL 做"三层朋友"很痛苦,Cypher 一句话就完。
本章小结
关系型在深关联查询上力不从心,图库沿边遍历——这是选图库最硬的依据。
第七章 - 用 Python 连接 Neo4j
neo4j 驱动
from neo4j import GraphDatabase
driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password"))
with driver.session() as session:
session.run("CREATE (a:Person {name: 'Ada'})")
result = session.run(
"MATCH (a:Person {name: 'Ada'})-[:FRIEND]->(f) RETURN f.name"
)
for record in result:
print(record["f.name"])
本章小结
neo4j 驱动走 bolt 协议,session.run 跑 Cypher——连接、建点边、查路径,套路清楚。
第八章 - 什么时候用图数据库
适合
- 关系是核心:社交、知识图谱、风控、推荐。
- 需要多跳路径、最短路径、子图匹配。
不适合
- 普通事务、简单点查 -> 关系型/键值。
- 大规模聚合分析 -> OLAP。
本章小结
图数据库赢在"深关系遍历",输在"普通 CRUD 和聚合"——关系是核心才用它。
总结
- 核心回顾:图数据库把世界看成节点和边;Cypher 用
(节点)-[:边]->(节点)画图式查询;多跳遍历*1..3、shortestPath 是杀手锏;社交、知识图谱、风控、推荐是四大场景;对比关系型 JOIN,深关联上图库完胜。 - 学习路线:先 Docker 起 Neo4j -> 用 Browser 界面练 CREATE 和 MATCH -> 再练多跳和最短路径 -> 用 neo4j 驱动写脚本。
- 推荐练习:① 建一个好友网络,查"三跳内的朋友"和"共同好友";② 用 shortestPath 找两个人之间的最短认识路径;③ 建一个小知识图谱,跑多跳查询对比 SQL JOIN。
实践示例
查找三跳内的朋友和共同好友
使用 shortestPath 查找两人之间的最短认识路径
构建小知识图谱,跑多跳查询对比 SQL JOIN
用 Cypher 创建节点和关系并查询
后续与前置知识
- 数据库导论:12 分钟看懂整个数据库世界上下位
面向零基础学习者的数据库导论教程,12分钟建立数据库世界地图,覆盖为何需要数据库、OLTP vs OLAP、9类数据库系统(关系型、键值、文档、宽列、图、搜索、时序、OLAP、向量)、SQL vs NoSQL、共同框架(Schema、数据类型、CRUD、持久化、索引)、对象存储与数据库的区别,以及程序如何通过 Driver、Connection Pool、ORM 连接数据库。
- SQL 入门:从一张表看懂数据库相关
本文从一张表入手,系统讲解 SQL 数据库核心概念与操作,涵盖建库查数据、列记录主键、约束索引、DDL/DML/DQL/DCL/TCL 五类 SQL 语言、SELECT 聚合分组排序、JOIN 多表拼接、五大范式与反范式、事务与 ACID、视图索引权限、SQLite/PostgreSQL/MySQL 对比、Python 连接数据库、ORM 映射以及 DBeaver 图形化管理,适合快速建立 SQL 全景。
- 文档数据库入门:MongoDB 与 Couchbase相关
本教程系统讲解文档数据库核心概念,以 MongoDB 和 Couchbase 为代表,涵盖数据模型、CRUD 操作、查询与聚合、索引、副本集、分片、事务、多模型能力、选型对比及 Python 接入方法,帮助建立文档数据库全景认知。
- 键值数据库入门:Redis 与 DynamoDB相关
本教程系统讲解键值数据库核心概念,以 Redis 和 DynamoDB 为代表,对比内存与云托管两种形态,涵盖 Redis 五种数据结构、过期持久化高可用、经典场景,DynamoDB 数据模型、主键设计、CRUD、二级索引、容量一致性、单表设计,并通过 Python 示例连接两者,最后给出选型建议与练习。
- 搜索数据库入门:Elasticsearch 与 OpenSearch相关
本教程系统讲解搜索数据库核心概念,以 Elasticsearch 与 OpenSearch 为代表,涵盖倒排索引、集群与索引/分片/副本数据模型、REST API 全文搜索、分词与 BM25 相关性排序、聚合分析、两者对比及 Python 接入方法,帮助建立搜索数据库全景认知。
- 时序数据库入门:InfluxDB 与 TimescaleDB相关
本文系统讲解时序数据库核心概念,以 InfluxDB 和 TimescaleDB 为代表,涵盖数据模型、Line Protocol 与 Flux/InfluxQL 查询、保留策略与降采样、超表与连续聚合/压缩、两者对比及 Python 接入方法,帮助建立时序数据库全景认知。
- 宽列数据库入门:Cassandra 与 ScyllaDB相关
本教程系统讲解宽列数据库核心概念,以 Cassandra 和 ScyllaDB 为代表,涵盖数据模型(分区键+列族)、CQL 与 CRUD、无主架构与可调一致性、LSM 树与建模、ScyllaDB 的 Shard-per-core 架构、两者对比、Python 连接及适用场景,帮助快速建立宽列数据库全景认知。
- Python 基础教程 · 10 分钟上手实操课相关
面向零基础初学者的 Python 实操教程,10 分钟从安装运行开始,讲解变量与数据结构、函数与模块、文件 I/O 与异常处理,最后实战完成 CSV 数据分析小工具。
引用此知识点
暂无关联知识。