跳转至

数据模型

本文介绍 Nebula Graph 的数据模型。数据模型是一种组织数据并说明它们如何相互关联的模型(schema)。

数据模型

Nebula Graph 数据模型使用 6 种基本的数据模型:

  • 图空间(Space)

    图空间用于隔离不同团队或者项目的数据。不同图空间的数据是相互隔离的,可以指定不同的存储副本数、权限、分片等。

  • 点(Vertex)

    点用来保存实体对象,特点如下:

    • 点是用点标识符(VID)标识的。VID在同一图空间中唯一。VID 是一个 int64,或者 fixed_string(N)。
    • 点可以有 0 到多个 Tag。

    Compatibility

    Nebula Graph 2.x 的点不能没有 Tag。Nebula Graph 3.0.2 的点可以没有 Tag。

  • 边(Edge)

    边是用来连接点的,表示两个点之间的关系或行为,特点如下:

    • 两点之间可以有多条边。
    • 边是有方向的,不存在无向边。
    • 四元组 <起点 VID、Edge type、边排序值 (rank)、终点 VID> 用于唯一标识一条边。边没有 EID。
    • 一条边有且仅有一个 Edge type。
    • 一条边有且仅有一个 rank,类型为 int64,默认值为 0。

    关于

    rank 可以用来区分 Edge type、起始点、目的点都相同的边。该值完全由用户自己指定。
    读取时必须自行取得全部的 rank 值后排序过滤和拼接。
    不支持诸如 next(), pre(), head(), tail(), max(), min(), lessThan(), moreThan() 等函数功能,也不能通过创建索引加速访问或者条件过滤。

  • 标签(Tag)

    Tag 由一组事先预定义的属性构成。

  • 边类型(Edge type)

    Edge type 由一组事先预定义的属性构成。

  • 属性(Properties)

    属性是指以键值对(Key-value pair)形式存储的信息。

Note

Tag 和 Edge type 的作用,类似于关系型数据库中“点表”和“边表”的表结构。

有向属性图

Nebula Graph 使用有向属性图模型,指点和边构成的图,这些边是有方向的,点和边都可以有属性。

下表为篮球运动员数据集的结构示例,包括两种类型的点(playerteam)和两种类型的边(servefollow)。

类型 名称 属性名(数据类型) 说明
Tag player name (string)
age(int)
表示球员。
Tag team name (string) 表示球队。
Edge type serve start_year (int)
end_year (int)
表示球员的行为。
该行为将球员和球队联系起来,方向是从球员到球队。
Edge type follow degree (int) 表示球员的行为。
该行为将两个球员联系起来,方向是从一个球员到另一个球员。

Note

Nebula Graph 中没有无向边,只支持有向边。

Compatibility

由于 Nebula Graph 3.0.2 的数据模型中,允许存在"悬挂边",因此在增删时,用户需自行保证“一条边所对应的起点和终点”的存在性。详见 INSERT VERTEXDELETE VERTEXINSERT EDGEDELETE EDGE

不支持 openCypher 中的 MERGE 语句。


最后更新: March 7, 2023