Skip to content

参考:Cypher 速查、场景决策与易错点

基于 Neo4j 5.x · 核于 2026-08

速查

  • Neo4j 定义:原生图数据库,属性图(节点+关系+属性)+ 无索引邻接,关系遍历每跳 O(1)。
  • 三要素:节点(带标签 Label 与属性)、关系(有向、带类型 Type 与属性、必有起止)、属性(key-value 挂节点或关系)。
  • Cypher(node)-[rel]->(node) ASCII 艺术语法。MATCH 查找模式、CREATE 新建、MERGE 幂等、DETACH DELETE 连带删。
  • 无索引邻接:节点存关系指针、关系存起止节点指针,遍历不查索引表。定位起点的点查才要索引。
  • 场景:关系密集 + 多跳遍历(推荐/欺诈/知识图谱/社交)。简单 KV/订单/OLAP 不用图库。
  • 属性图 vs RDF:属性图边可带属性、易用、Cypher;RDF 三元组、SPARQL、W3C 标准、语义网用。
  • APOC:标配过程库(数据导入、批量 iterate、路径工具)。GDS 是图算法库(PageRank/Louvain)。

一、Cypher 命令速查

操作命令
查找节点MATCH (n:Person {name:'a'}) RETURN n
查找关系MATCH (a)-[:KNOWS]->(b) RETURN a,b
变长路径MATCH (a)-[:KNOWS*2..3]-(x) RETURN x
最短路径MATCH p = shortestPath((a)-[:KNOWS*]-(b)) RETURN p
创建节点CREATE (n:Person {name:'a', age:30})
创建关系CREATE (a)-[:KNOWS {since:2020}]->(b)
幂等创建MERGE (n:Person {email:'a@x.com'}) ON CREATE SET n.created=timestamp()
改属性MATCH (n) WHERE id(n)=1 SET n.age = 40
删节点(有关系到连删)MATCH (n {name:'temp'}) DETACH DELETE n
建索引CREATE INDEX FOR (n:Person) ON (n.email)
唯一约束CREATE CONSTRAINT FOR (n:Person) REQUIRE n.email IS UNIQUE
聚合MATCH (n:Person) RETURN n.city, count(*) AS cnt ORDER BY cnt DESC

二、图模型术语对照

概念属性图(Neo4j)关系库RDF
实体节点(Node)+ 标签(Label)行(row)+ 表(table)资源(URI)
关系关系(Relationship)+ 类型(Type)外键(FK)/ JOIN 表谓语(predicate)
属性属性(Property)列(column)属性(但要 reification 挂边)
标识内部 id + 标签主键(PK)URI(全局唯一)
查询CypherSQLSPARQL

三、场景决策表

场景用图库吗原因
推荐系统(共同购买/朋友推荐)关系密集,几跳搞定,关系库多层 JOIN
欺诈检测(团伙/环路)多实体关联、环路检测,关系库难表达
知识图谱(实体-关系语义)图天然表达,多跳推理
社交网络(朋友的朋友/影响力)多跳遍历是核心
IAM(用户-角色-权限-资源)授权继承是图遍历
网络拓扑/故障影响分析依赖关系图遍历
简单 KV 缓存用 Redis
订单/事务系统关系清晰,用关系库(MySQL)+ 外键
大规模聚合分析(OLAP)用列式(ClickHouse)/关系库
全文搜索用 Elasticsearch

四、属性图 vs RDF 对比

维度属性图RDF
数据单元节点+关系+属性三元组(主-谓-宾)
边带属性✅ 直接❌ reification 绕道
查询语言CypherSPARQL
标识内部 id/标签URI
schema动态(可加约束)RDFS/OWL 本体推理
标准化厂商主导W3C 国际标准
典型场景业务图(推荐/欺诈/IAM)语义网/Linked Data

五、易错点清单

  • 「图库一定比关系库快」:错。图库只在「关系遍历」快(无索引邻接),全图扫描、聚合分析不一定快,简单点查关系库索引可能更快。选型看场景。
  • 「关系可以没有起止节点」:错。Neo4j 的关系必须有 startNode 和 endNode,删除节点的所有关系会连带处理。不能有「悬空关系」。
  • 「关系是无向的」:错。Neo4j 关系有方向(建时指定 ->),查询时可忽略方向(--),但存储有向。
  • 「CREATE 和 MERGE 一样」:错。CREATE 总是新建(重复执行建多个副本),MERGE 是幂等(不存在才建)。防重复用 MERGE + 唯一约束。
  • 「图遍历需要建索引」:错。遍历本身靠无索引邻接的指针,不需要索引。只有「定位遍历起点的点查」才需要索引。
  • 「属性图边不能带属性」:错。属性图的边(关系)能带属性——这是它相对 RDF 的核心优势(RDF 边不能直接带属性)。
  • 「Neo4j 适合大规模分布式」:错。社区版单机,企业版 Fabric 跨库联邦但分布式分片不如 Cassandra/MongoDB 成熟,超大规模要评估。
  • 「Cypher 的 *(任意跳)随便用」:错。稠密图上 * 会遍历海量路径爆炸,要限定跳数或加 LIMIT。
  • 「图库适合做全文搜索」:错。全文搜索用 Elasticsearch/Atlas Search,图库专注于关系遍历。
  • 「RDF 和属性图完全等价」:不完全。两者可互转,但 RDF 边不能直接带属性(要 reification),查询语言(SPARQL vs Cypher)、标识(URI vs 内部 id)、标准化(W3C vs 厂商)都不同。

六、进阶方向

权威链接