图数据建模
此文档介绍 Nebula Graph 建模及图模型的基本概念。
图空间
图空间 为彼此隔离的图数据,与 MySQL 中的 database 概念类似。
有向属性图
Nebula Graph将数据存储在有向属性图中。有向属性图是指点和边构成的图,这些边是有方向的。有向属性图表示为:
G = < V, E, PV, PE >
- V是点的集合。
- E是有向边的集合。
- PV 是点的属性。
- PE 是边的属性。
下表为篮球运动员数据集的结构示例,包括两种类型的点(player、team)和两种类型的边(serve、follow)。
类型 | 名称 | 属性名(数据类型) | 说明 |
---|---|---|---|
tag | player | name (string) age (int) | 表示球员。 |
tag | team | name (string) | 表示球队。 |
edge type | serve | start_year (int) end_year (int) | 表示球员的行为。 该行为将球员和球队联系起来,方向是从球员到球队。 |
edge type | follow | degree (int) | 表示球员的行为。 该行为将两个球员联系起来,方向是从一个球员到另一个球员。 |
点(Vertex)
点用于表示现实世界中的实体。在 Nebula Graph 中,点必须拥有唯一的标识符(即 VID
)。在每个图空间中的 VID
必须是唯一的。
本例的数据中共包含 11 个点。
点类型——标签(Tag)
Nebula Graph 使用标签表示点类型;一个点可以同时有多种类型(Tag)。本例中有两种类型的点,其标签(类型)分别为 player 和 team。
边(Edge)
边用来连接点,边通常表示两个点间的某种关系或行为,本例中的边为 serve 和 follow。
边类型(Edge Type)
每条边都有唯一的边类型。两个节点之间允许有多个相同或者不同类型的边。例如,以球员-球队的服役关系 serve 为例,(球员)点 101
(表示一名球员)为起始点,(球队)点 215
(表示一支球队)为目标点。点 101
有一条出边,而点 215
有一条入边。
边 rank
两个点之间的边除了必须有类型之外,还必须有 rank。边 rank 是用户分配的 64 位整数;如不指定,边 rank 默认值为 0。
四元组[起点、边类型、权重、终点]可以唯一表示一条边。
边 rank 决定了两个点之间相同类型的边的排序方式。边 rank 值较高的边排名靠前。
目前的排序依据为“二进制编码顺序“:即 0, 1, 2, … 9223372036854775807, -9223372036854775808, -9223372036854775807, …, -1。
点和边的属性(Property)
点和边无可可拥有属性,属性以键值对的方式描述。本例中,点 player 拥有属性 id
、name
和 age
,边 follow 则拥有属性 degree
。
Schema
在 Nebula Graph 中,Schema 为标签及边对应的属性。与 MySQL
类似,Nebula Graph 是一种强 schema 的数据库,属性的名称和数据类型在数据写入前已确定。