请使用支持现代 CSS 与 JavaScript 的浏览器播放课件
DBPA · 15.2

图数据库与关系的图化表达

当联系本身成为查询对象

VER. 2608.3 Built with impress.js

学习目标

完成本节后,你应该能够

  1. 01根据查询是否依赖多跳关系判断图数据库是否合适
  2. 02用选课案例区分顶点、边、标签、属性和属性值
  3. 03比较图匹配、图导航和图关系复合操作
  4. 04比较邻接访问与关系连接在邻居查询上的路径差异
  5. 05读懂 Cypher 中的变量、标签、属性、MATCH、WHERE 和 RETURN
  6. 06说明属性图、RDF 三元组图与查询语言并非一一对应
2/12
LEARNING OBJECTIVES

学生选课图把联系本身变成查询对象

属性图把学生、课程和选课关系表示为顶点、边与属性

学生王林与课程英语通过一条带成绩和日期属性的选课边连接
单个边实例示意:王林与英语的一条选课关系,边上挂有成绩和日期属性
3/12
GRAPH DATA

属性图用对象、关系和描述表达业务语义

选课案例把形式元素映射到学生能复述的业务对象

顶点 V

业务对象:王林、英语等学生和课程

边 E

业务关系:SC 选课,连接王林与英语

标签 L

类型分类:Student、Course、SC

属性 A/T

字段和值:Score=90、Date=2020-09-01

Takeaway

本例只需理解图元素与业务语义的对应关系

4/12
PROPERTY GRAPH

关系可以带属性并成为查询对象

图模型把联系作为独立对象表达,是否采用图数据库仍取决于查询和约束需求

表达方式直观含义
关系模型通过 Student ⋈ SC ⋈ Course 组合业务事实
图模型直接匹配并导航 Student — SC — Course 路径
Takeaway

查询谁选了什么课以及成绩时,图中的边是查询对象;关系系统也能表达同一事实

5/12
STUDENT COURSE GRAPH

图查询的匹配、导航与复合

先分清每一步处理的对象,再判断它们如何组合

图匹配

找出 Student—SC→Course 模式,例如王林选过的课程

图导航

沿学生→课程→教师寻找两跳关系

复合操作

先匹配,再按成绩过滤并返回结果

6/12
GRAPH OPERATIONS

常见图语言各有模型与表达侧重

SPARQL、Cypher 和 Gremlin 侧重不同模型与表达方式

语言常见对象直观方式
SPARQLRDF 三元组图三元组匹配
Cypher属性图模式和路径表达
Gremlin属性图程序化遍历
Takeaway

SPARQL、Cypher 和 Gremlin 分属不同图模型与语言生态,尚未形成所有系统共同采用的统一语言

7/12
QUERY LANGUAGES

Cypher 用图形符号表达选课路径

括号表示顶点,中括号表示关系,WHERE 过滤属性

CYPHER
MATCH (n:Student)-[e:SC]->(c:Course)
WHERE n.Sname = "王林"
RETURN c.Cname, e.Score

n、e、c 是变量;Student、SC、Course 是标签;Sname、Score 是属性

MATCH 找模式;WHERE 过滤;RETURN 输出

Takeaway

预期结果是课程英语与成绩 90

8/12
CYPHER

以 Neo4j 为例,邻接存储有利于邻居遍历

顶点记录可维护邻接信息,但实现各异

访问路径直观过程
关系系统索引定位记录,再通过连接找到邻居
原生图存储从顶点记录沿邻接关系定位邻居

Neo4j 作为代表性实现可支持事务;事务能力不等于所有图数据库的统一契约

Takeaway

图数据库是否更快取决于数据布局与查询模式是否匹配

9/12
NATIVE TRAVERSAL

图数据库判断链

图数据库适合关系密集、路径有意义的任务;关系数据库仍适合其他负载

数据结构

顶点、边、标签、属性把业务网络表达出来

查询操作

匹配、导航、复合操作分别回答不同路径问题

语言表达

SPARQL、Cypher、Gremlin 各有模型与生态侧重

实现边界

邻接存储有利于邻居访问;事务、报表与约束仍需按负载评估

Takeaway

强关联场景 → 属性图元素 → 图匹配与导航 → 查询语言 → 邻接存储与访问取舍

10/12
RECAP

本节知识地图

11/12
KNOWLEDGE MAP

本节问题

  1. 01学生选课、社交关系和交通路径中,哪些更适合图模型,为什么?
  2. 02在选课案例中,顶点、边、标签、属性和属性值分别是什么?
  3. 03找成绩大于 90 的选课和找两个学生之间的两跳关系分别属于哪类操作?
  4. 04如何用 MATCHWHERERETURN 查询王林的课程和成绩?
  5. 05为什么 Neo4j 的邻接存储不能推出所有图查询都比关系查询快?
  6. 06RDF 三元组图、属性图和程序化遍历分别更接近哪种语言生态?为什么图查询语言仍未完全统一?
12/12
CHECK YOUR UNDERSTANDING