属性图查询:Cypher 与 Gremlin
一、Cypher 语法概览
Cypher 是面向属性图的声明式查询语言,核心思想是「图模式」:用括号表示节点、方括号表示边,箭头表示方向,整体读起来像一张小图。MATCH 子句指定要匹配的模式;WHERE 对节点或边的属性施加条件;RETURN 指定返回的变量或表达式;CREATE 用于插入新节点与边。
节点用 (变量:Label {key: value}) 表示,可省略变量或标签;边用 -[变量:REL_TYPE]-,方向为 -> 或 <-。例如 (a:Person)-[:KNOWS]->(b:Person) 表示 a、b 均为 Person,且存在从 a 到 b 的 KNOWS 边。
MATCH (a:Person)-[r:KNOWS]->(b:Person)
WHERE a.name = 'Alice'
RETURN b.name, r.since
CREATE 示例:CREATE (a:Person {name: 'Alice'})-[:KNOWS {since: 2020}]->(b:Person {name: 'Bob'}) 会创建两个节点与一条边。与 MATCH 结合可写 MERGE(存在则匹配、不存在则创建),实现「若无则插入」。
二、Gremlin 遍历与图计算
Gremlin 是 Apache TinkerPop 的图遍历语言,采用步骤链(step chain):从图 g 出发,g.V() 取所有顶点,g.V(id) 取指定顶点;.out(label) 沿出边到邻居,.in(label) 沿入边,.both(label) 无向;.has(key, value) 过滤属性;.values('name') 取属性值;.limit(n)、.count() 等做聚合或截断。每一步的输入是上一步产生的元素(顶点或边),输出传给下一步。
Gremlin 既可做查询(谁的朋友的朋友),也可做图计算(如 PageRank、最短路径),与 TinkerPop 的图 API 和多种图数据库(Neo4j、JanusGraph、Neptune 等)集成。风格是「一步步走」,适合需要精细控制遍历顺序或嵌入到程序中的场景。
g.V().has('name', 'Alice').out('KNOWS').values('name')
三、与 SPARQL 的思维差异与选型
SPARQL 面向 RDF:数据是三元组集合,查询是图模式(三元组模式的合取),变量绑定到图中的节点或边;强调「模式匹配」与标准、多源(LOD)。Cypher 面向属性图:数据是节点+边+属性,查询是「图模式」的声明式描述,语法贴近图的形状;强项为可读性与 Neo4j 生态。Gremlin 是过程式遍历:从起点一步步走,每步变换流;强项为灵活控制、图算法与多后端(TinkerPop)。
选型时可考虑:若数据已是 RDF、需 SPARQL 或与 LOD 互操作,用三元组存储 + SPARQL;若以属性图建模、希望查询易读且以 Neo4j 为主,用 Cypher;若需要复杂遍历、图算法或统一多图后端,用 Gremlin。部分系统同时支持多种语言(如 Neptune 支持 SPARQL 与 Gremlin),可按场景切换。
SPARQL
RDF, triple pattern, BGP; declarative; LOD, standard; good for knowledge graphs and federation.
Cypher
Property graph, pattern (node-edge-node); declarative, readable; Neo4j; good for business graph.
Gremlin
Step chain, traversal; imperative; TinkerPop, multi-backend; good for traversal and graph algo.
选型小结
RDF + 标准 + 联邦 → SPARQL;属性图 + 易读 + Neo4j → Cypher;遍历 + 图算法 + 多后端 → Gremlin。数据模型(RDF vs 属性图)与团队习惯、生态一起考虑。
一句话: Cypher 用图模式 (a)-[r:REL]->(b) 做声明式查询,MATCH/WHERE/RETURN/CREATE/MERGE;Gremlin 用步骤链 g.V().out().has().values() 做过程式遍历与图计算。与 SPARQL:SPARQL 面向 RDF 与图模式匹配;Cypher 面向属性图、语法像图;Gremlin 面向遍历与算法。选型看数据模型、查询风格与生态(LOD/Neo4j/TinkerPop)。
四、小结
Cypher 以 MATCH、WHERE、RETURN、CREATE 描述属性图上的图模式,语法贴近图结构。Gremlin 以步骤链做遍历与图计算,与 TinkerPop 和多图后端集成。与 SPARQL 相比:SPARQL 为 RDF 声明式,Cypher 为属性图声明式,Gremlin 为过程式;选型依数据模型、查询需求与生态。下一章讲存储选型与性能优化。