图数据建模

此文档介绍 Nebula Graph 建模及图模型的基本概念。

图空间

图空间 为彼此隔离的图数据,与 MySQL 中的 database 概念类似。

有向属性图

Nebula Graph 存储的图为 有向属性图,边为有向边,点和边均可包含属性。可表示为: G = < V, E, PV, PE >, 其中 V 表示点,E 表示有向边,PV 表示点属性,PE 表示边属性。 此文档将使用如下示例图数据介绍属性图的基本概念:

map300

上图为 NBA 球员及球队信息数据,图中包含 2 种类型的 11 个点,即 player 和 team,2 种类型的边,即 serve 和 like。 以下为示例图数据涉及到的概念介绍。

点(Vertex)

点用于表示现实世界中的实体。在 Nebula Graph 中,点必须拥有唯一的标识符(即 VID)。在每个图空间中的 VID 必须是唯一的。

本例的数据中共包含 11 个点。

数据模型 - 图2

点类型——标签(Tag)

Nebula Graph 使用标签表示点类型;一个点可以同时有多种类型(Tag)。本例中有两种类型的点,其标签(类型)分别为 playerteam

数据模型 - 图3

边(Edge)

边用来连接点,边通常表示两个点间的某种关系或行为,本例中的边为 servelike

数据模型 - 图4

边类型(Edge Type)

每条边都有唯一的边类型。两个节点之间允许有多个相同或者不同类型的边。例如,以球员-球队的服役关系 serve 为例,(球员)点 101(表示一名球员)为起始点,(球队)点 215(表示一支球队)为目标点。点 101 有一条出边,而点 215 有一条入边。

边 rank

两个点之间的边除了必须有类型之外,还必须有 rank。边 rank 是用户分配的 64 位整数;如不指定,边 rank 默认值为 0。

四元组[起点、边类型、权重、终点]可以唯一表示一条边。

边 rank 决定了两个点之间相同类型的边的排序方式。边 rank 值较高的边排名靠前。

目前的排序依据为“二进制编码顺序“:即 0, 1, 2, … 9223372036854775807, -9223372036854775808, -9223372036854775807, …, -1。

点和边的属性(Property)

点和边无可可拥有属性,属性以键值对的方式描述。本例中,点 player 拥有属性 idnameage,边 like 则拥有属性 likeness

Schema

Nebula Graph 中,schema 为标签及边对应的属性。与 MySQL 类似,Nebula Graph 是一种强 schema 的数据库,属性的名称和数据类型在数据写入前已确定。