中间件速查手册
图数据库 · neo4j

Neo4j

把关系直接存成边,多跳查询不用 JOIN

图数据库GPLv3 / 商业版Java学习难度:中等

Neo4j 用属性图模型:数据是节点(Node)和边(Relationship),边上也能带属性。查“朋友的朋友的朋友”时,关系库要 JOIN 三次、数据量一大就爆炸,而图库是顺着指针一跳一跳走,耗时只和走过的路径长度有关。

01

它解决什么问题

社交推荐要查“你可能认识的人”,在 MySQL 里是三层 JOIN,百万用户时一条 SQL 跑几十秒,还写不出来。

真实场景:典型场景:反欺诈里查“同一个手机号 → 关联了 3 个身份证 → 其中一个有黑名单记录”,图库两跳就能命中。

02

核心概念

每个概念一句话 + 一个类比。点击卡片看更详细的解释。

03

数据流转动画

跟着步骤看一条数据从进入系统到被处理完的完整路径,可以暂停、重播和调速。

Flow animation

从起点出发的两跳关系遍历

应用推荐接口Cypher 解析MATCH (a)-[:KNOWS]->索引定位起点User(id=1001)张三 · 一跳KNOWS李四 · 二跳KNOWS候选结果按共同好友数排序

← 左右滑动查看完整流程图 →

01 / 05
1. 提交 Cypher

MATCH (u:User {id:1001})-[:KNOWS*1..2]->(f) RETURN f 发给数据库。

提示:关键差异:关系库靠 JOIN 重建关系,图库的关系是“存好的指针”,一跳就是一次内存/磁盘寻址。 悬停图中的节点可以看概念解释。

04

优劣势

短句说清适合什么、不适合什么,选型时先看这一栏。

适合什么
  • 多跳关系查询快,代价只和路径长度相关
  • 图模型直观,业务人员也能看懂
  • Cypher 表达力强,路径查询一句话搞定
  • 适合做实时推荐、反欺诈、知识图谱
不适合什么
  • 全量统计(count/group by)比关系库慢
  • 写入吞吐不高,不适合高频流水数据
  • 数据量大时内存要求高,分片能力弱于其他分布式库
  • 生态和人才比 MySQL 少很多
05

常见使用场景

每个场景都配一句「为什么用它」。

01

社交推荐

好友的好友、共同兴趣、二度人脉推荐。

为什么用它:多跳遍历是图库的主场,关系库 JOIN 会指数级变慢。

02

反欺诈与风控

设备、手机号、身份证、银行卡之间的关联网络。

为什么用它:团伙欺诈的本质是“关系密集”,图上一眼就能看出来。

03

知识图谱

企业、人物、产品之间的实体关系检索。

为什么用它:节点和边天然表达实体与关系,便于推理和问答。

07

常见问题

上手第一个月最容易卡住的地方。

Q1什么时候该用图数据库?

当你的核心查询是“沿着关系走 N 跳”,并且关系深度不固定时。如果只是简单的关联查询、统计报表,关系库更合适。

Q2和 MySQL 的 JOIN 有什么本质区别?

JOIN 是查询时用索引临时拼关系,深度越深代价越大;图库在写入时就把关系存成了双向指针,查询时顺着走,一跳一次寻址。

Q3Cypher 难学吗?

比 SQL 直观。模式就是画图:(a:Person)-[:KNOWS]->(b:Person),括号是节点、方括号是关系、箭头是方向。