Neo4j
把关系直接存成边,多跳查询不用 JOIN
Neo4j 用属性图模型:数据是节点(Node)和边(Relationship),边上也能带属性。查“朋友的朋友的朋友”时,关系库要 JOIN 三次、数据量一大就爆炸,而图库是顺着指针一跳一跳走,耗时只和走过的路径长度有关。
它解决什么问题
社交推荐要查“你可能认识的人”,在 MySQL 里是三层 JOIN,百万用户时一条 SQL 跑几十秒,还写不出来。
真实场景:典型场景:反欺诈里查“同一个手机号 → 关联了 3 个身份证 → 其中一个有黑名单记录”,图库两跳就能命中。
核心概念
每个概念一句话 + 一个类比。点击卡片看更详细的解释。
数据流转动画
跟着步骤看一条数据从进入系统到被处理完的完整路径,可以暂停、重播和调速。
从起点出发的两跳关系遍历
← 左右滑动查看完整流程图 →
MATCH (u:User {id:1001})-[:KNOWS*1..2]->(f) RETURN f 发给数据库。
提示:关键差异:关系库靠 JOIN 重建关系,图库的关系是“存好的指针”,一跳就是一次内存/磁盘寻址。 悬停图中的节点可以看概念解释。
优劣势
短句说清适合什么、不适合什么,选型时先看这一栏。
- 多跳关系查询快,代价只和路径长度相关
- 图模型直观,业务人员也能看懂
- Cypher 表达力强,路径查询一句话搞定
- 适合做实时推荐、反欺诈、知识图谱
- 全量统计(count/group by)比关系库慢
- 写入吞吐不高,不适合高频流水数据
- 数据量大时内存要求高,分片能力弱于其他分布式库
- 生态和人才比 MySQL 少很多
常见使用场景
每个场景都配一句「为什么用它」。
社交推荐
好友的好友、共同兴趣、二度人脉推荐。
为什么用它:多跳遍历是图库的主场,关系库 JOIN 会指数级变慢。
反欺诈与风控
设备、手机号、身份证、银行卡之间的关联网络。
为什么用它:团伙欺诈的本质是“关系密集”,图上一眼就能看出来。
知识图谱
企业、人物、产品之间的实体关系检索。
为什么用它:节点和边天然表达实体与关系,便于推理和问答。
常见问题
上手第一个月最容易卡住的地方。
Q1什么时候该用图数据库?
当你的核心查询是“沿着关系走 N 跳”,并且关系深度不固定时。如果只是简单的关联查询、统计报表,关系库更合适。
Q2和 MySQL 的 JOIN 有什么本质区别?
JOIN 是查询时用索引临时拼关系,深度越深代价越大;图库在写入时就把关系存成了双向指针,查询时顺着走,一跳一次寻址。
Q3Cypher 难学吗?
比 SQL 直观。模式就是画图:(a:Person)-[:KNOWS]->(b:Person),括号是节点、方括号是关系、箭头是方向。