← 返回知识宇宙
数据库·入门

图数据库入门:Neo4j

本文系统讲解图数据库核心概念,以 Neo4j 为代表,涵盖节点、边、路径的数据模型,Cypher 图查询语言,多跳遍历与最短路径,社交网络、知识图谱、风控、推荐等典型场景,对比关系型数据库的 JOIN 查询,并演示使用 Python 驱动连接 Neo4j。

知识编号32
关系轨道8
学习难度入门
图数据库Neo4jCypherNoSQL数据库入门教程关系型数据库Python
抖音

视频讲解

图数据库入门:Neo4j

一个视频,讲透图数据库,不用学几个月。


第一章 - 图数据库是什么

这一个视频把图数据库这一类讲完,代表是 {{Neo4j}}。

一句话:图数据库把世界看成{{节点和边}},擅长回答"谁和谁有什么关系、中间隔了几跳"这类问题,是关系型数据库做不好的多跳关系检索。

什么时候用得上

好友网络:A 和 B 之间隔了几个共同好友?
知识图谱:这个人 -> 在哪家公司 -> 这家公司 -> 有哪些产品?
风控链路:A 转账给 B,B 转账给 C,是不是洗钱链?
推荐路径:看过 X 的人也看过 Y

图数据库和关系型的分工

关系型把关系存在表里,多跳要反复 JOIN;图数据库把关系存成边,沿边走就行。

本章小结

图数据库专攻"关系与路径",Neo4j 是它的代表——节点 + 边 + 沿边走。


第二章 - 数据模型:节点和边

三个要素

(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——连接、建点边、查路径,套路清楚。


第八章 - 什么时候用图数据库

适合

不适合

本章小结

图数据库赢在"深关系遍历",输在"普通 CRUD 和聚合"——关系是核心才用它。


总结

实践示例

后续与前置知识

引用此知识点

暂无关联知识。

更多数据库知识