第1章 图数据库概述

做课程之前,我先问大伙一个问题:为什么我们需要图数据库? 十年前我刚接触数据存储时,用的是 MySQL + 中间表做好友关系。用户量一上来,那个 SQL 嵌套查询慢得让人抓狂。后来换 Neo4j,一条 Cypher 搞定,性能差距能干到两个数量级。嗯,图数据库不是银弹,但在关联数据密集型场景下,它就是最趁手的工具。

1.1 图数据库发展史

图数据库的底子其实很老。上世纪 60 年代就有类似图结构的数据模型,但直到 2000 年初期,主流还是关系型。我 2012 年第一次用 Neo4j 1.8,社区版连事务都没完全支持。那年的图数据库市场就几个玩家:Neo4j 带头,OrientDB、ArangoDB 多模型跟进。

真正的转折在 2015 年前后:Apache TinkerPop 成为图计算的事实标准,Gremlin 遍历语言统一了多厂商接口;RDF 派系的 SPARQL 也在知识图谱领域站稳脚跟。我记得 2017 年帮一家金融客户做反欺诈系统,对比了 Neo4j 和 JanusGraph,最后选了后者——因为需要集成 HBase 做海量存储。这些经历让我意识到:选图数据库,不能只看名气,得看你的数据模型和查询习惯。

时期标志性事件我的观察
1960s-2000图结构理论出现(Petri 网、语义网)只停留在学术论文里
2000-2010Neo4j 1.0 发布(2007)我还在用 SQL,根本不知道有这玩意儿
2010-2015TinkerPop 3.0 / RDF 标准化我第一次写 Gremlin 遍历,感觉打开了新世界
2015-2020云原生图数据库兴起(Amazon Neptune,Neo4j Aura)客户问得最多的是“能不能支持万亿边”
2020 至今图查询语言标准化(GQL 2024 发布)建议新项目直接上 GQL 兼容的产品
避坑指南
我曾经选过一个多模型数据库,因为它既能当文档库用又能当图库用。结果图遍历性能惨不忍睹,最后只能拆分架构。专业的事交给专业的工具——图数据库就该干图的事。

1.2 图数据库应用场景

说实话,图数据库不是用来取代关系型数据库的。它只解决一类问题:数据之间的关联查询。我总结下来,适合图数据库的场景有四个特征:

  • 深度关联遍历:比如社交网络里的“朋友的朋友的朋友”
  • 可变路径:比如金融风控中找出最短交易路径
  • 复杂关联推荐:用图算法算节点相似度
  • 知识图谱推理:基于 RDF 三元组的逻辑推理

拿实际案例说话。我曾经帮一个电商平台做商品推荐,如果按传统做法,用 MySQL 做用户-商品二部图,每次推荐都要扫几万行中间表。换了 Neo4j 后,用 Collaborative Filtering 在图上跑 PageRank,推荐响应从 500ms 降到 15ms。你想想看,这差距。

场景典型图查询推荐产品
社交关系分析最短路径 / 社区发现Neo4j, Amazon Neptune
金融反欺诈环路检测 / 异常模式匹配JanusGraph, TigerGraph
知识图谱SPARQL 查询 / 推理Apache Jena, Blazegraph
实时推荐近邻查询 / 叶贝斯Neo4j, ArangoDB
网络与 IT 运维拓扑依赖分析Neo4j, NebulaGraph
我的建议
如果你需要 毫秒级深度遍历,优先考虑原生图存储产品(Neo4j、TigerGraph);如果数据量在百亿级且需要水平扩展,JanusGraph 配后端存储仍是成熟方案;若是 RDF 知识图谱,SPARQL endpoint 的选型要看推理能力是否内置。

1.3 图数据库核心概念

讲概念之前,我先划个重点:图数据库不是用“表”存图,而是用“顶点”和“边”存图。这个区别决定了你能做什么姿势的查询。

  • 节点(Vertex):实体,比如人、商品、订单
  • 边(Edge):关系,比如关注、购买、包含
  • 属性:键值对,贴在节点或边上
  • 标签(Label):给节点分类,比如 :Person :Product
  • 图遍历:从某个节点出发,沿着边依次访问相邻节点的过程
  • 索引:加速属性查询,类似关系库的 B+Tree

咱们用一个例子串起来。你写 Cypher 创建一个简单网络:

CREATE (alice:Person {name:'Alice', age:30})
CREATE (bob:Person   {name:'Bob',   age:28})
CREATE (alice)-[:KNOWS {since:2019}]->(bob)

这里 Person 是标签,name/age 是节点属性,KNOWS 是边类型,since 是边属性。你看,关系型数据库需要三张表(person、relationship、还需 third table 存属性),图数据库一条边就把所有关联信息锁死了。这就是“关联即查询”的精髓。

本章知识体系

图数据库概述知识结构 图数据库概述 发展史 1960s 图理论 2007 Neo4j 诞生 2015 TinkerPop 3.0 2024 GQL 标准化 应用场景 社交网络 金融反欺诈 知识图谱 实时推荐 核心概念 节点 / 边 / 属性 标签 / 索引 图遍历 Cypher / Gremlin SPARQL 图算法 图数据库的核心优势不在于存储多少数据, 而在于对关联数据的极速查询与灵活建模。 选型前先理清:数据关系到底有多复杂? 发展史 → 应用场景 → 核心概念:三步定位你的图数据库选型
重要提醒
图数据库的核心概念中,“图遍历”是最容易让人误解的地方。我见过不少从 SQL 转过来的同事,上来就用索引拼命过滤,结果图引擎根本没用上特性。记住:图数据库的强项是关联遍历,不是属性过滤。属性过滤强的不如 Elasticsearch。这两种用法别搞混。

最后说一个我的习惯。每次新项目评估图数据库,我都会先画一张“实体关系图”,然后问自己三个问题:

  1. 数据深度(跳数)是不是超过 3?
  2. 查询路径是否固定?
  3. 需不需要支持复杂图算法(如最短路径、社区检测)?

如果三个答案里有两个是“是”,那就果断上原生图数据库。如果只是简单的一度查询,关系数据库加上索引完全够用,别过度设计。