数据模型¶
本文介绍 NebulaGraph 的数据模型。数据模型是一种组织数据并说明它们如何相互关联的模型。
数据模型¶
NebulaGraph 数据模型使用 6 种基本的数据模型:
-
图空间(Space)
图空间用于隔离不同团队或者项目的数据。不同图空间的数据是相互隔离的,可以指定不同的存储副本数、权限、分片等。
-
点(Vertex)
点用来保存实体对象,特点如下:
- 点是用点标识符(
VID
)标识的。VID
在同一图空间中唯一。VID 是一个 int64,或者 fixed_string(N)。 - 点可以有 0 到多个 Tag。
Compatibility
NebulaGraph 2.x 及以下版本中的点必须包含至少一个 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 由一组事先预定义的属性构成。
-
属性(Property)
属性是指以键值对(Key-value pair)形式表示的信息。
Note
Tag 和 Edge type 的作用,类似于关系型数据库中“点表”和“边表”的表结构。
有向属性图¶
NebulaGraph 使用有向属性图模型,指点和边构成的图,这些边是有方向的,点和边都可以有属性。
下表为篮球运动员数据集的结构示例,包括两种类型的点(player、team)和两种类型的边(serve、follow)。
类型 | 名称 | 属性名(数据类型) | 说明 |
---|---|---|---|
Tag | player | name (string) age(int) | 表示球员。属性name 表示姓名,age 表示年龄。 |
Tag | team | name (string) | 表示球队。属性name 表示球队名。 |
Edge type | serve | start_year (int) end_year (int) | 表示球员效力球队的行为。该行为将球员和球队联系起来,方向是从球员到球队。属性start_year 表示效力的起始年份,end_year 表示效力的结束年份。 |
Edge type | follow | degree (int) | 表示推特上球员关注另一个球员的行为。该行为将两个球员联系起来,方向是从一个球员到另一个球员。属性degree 表示喜爱程度。 |
Note
NebulaGraph 中没有无向边,只支持有向边。
Compatibility
由于 NebulaGraph master 的数据模型中,允许存在"悬挂边",因此在增删时,用户需自行保证“一条边所对应的起点和终点”的存在性。详见 INSERT VERTEX、DELETE VERTEX、INSERT EDGE、DELETE EDGE。
不支持 openCypher 中的 MERGE 语句。