diff --git a/docs-2.0/1.introduction/2.data-model.md b/docs-2.0/1.introduction/2.data-model.md index a84bc961318..c78e42b6554 100644 --- a/docs-2.0/1.introduction/2.data-model.md +++ b/docs-2.0/1.introduction/2.data-model.md @@ -1,12 +1,12 @@ # 数据模型 -本文介绍Nebula Graph的数据模型。数据模型是一种组织数据并说明它们如何相互关联的模型(schema)。 +本文介绍Nebula Graph的数据模型。数据模型是一种组织数据并说明它们如何相互关联的模型(schema)。 ## 数据模型 Nebula Graph数据模型使用6种基本的数据模型: -- 图空间(Space) +- 图空间(Space) 图空间用于隔离不同团队或者项目的数据。不同图空间的数据是相互隔离的,可以指定不同的存储副本数、权限、分片等。 @@ -14,7 +14,7 @@ Nebula Graph数据模型使用6种基本的数据模型: 点用来保存实体对象,特点如下: - - 点是用点标识符(`VID`)标识的。`VID`在同一图空间中唯一。VID 是一个 int64, 或者 fixed_string(N)。 + - 点是用点标识符(`VID`)标识的。`VID`在同一图空间中唯一。VID 是一个 int64,或者 fixed_string(N)。 - 点必须有至少一个Tag,也可以有多个Tag。但不能没有Tag。 - 边(Edge) @@ -25,7 +25,7 @@ Nebula Graph数据模型使用6种基本的数据模型: - 边是有方向的,不存在无向边。 - 四元组 `<起点VID、Edge type、边排序值(Rank)、终点VID>` 用于唯一标识一条边。边没有EID。 - 一条边有且仅有一个Edge type。 - - 一条边有且仅有一个rank。其为int64, 默认为0。 + - 一条边有且仅有一个rank。其为int64,默认为0。 - 标签(Tag) @@ -51,10 +51,10 @@ Nebula Graph使用有向属性图模型,指点和边构成的图,这些边 | 类型 | 名称 | 属性名(数据类型) | 说明 | | :--- | :--- | :---| :--- | -|Tag| **player** | name (string)
age (int) | 表示球员。 | -|Tag| **team** | name (string) | 表示球队。 | -|Edge type| **serve** | start_year (int)
end_year (int) | 表示球员的行为。
该行为将球员和球队联系起来,方向是从球员到球队。 | -|Edge type| **follow** | degree(int) | 表示球员的行为。
该行为将两个球员联系起来,方向是从一个球员到另一个球员。 | +|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 @@ -62,6 +62,6 @@ Nebula Graph使用有向属性图模型,指点和边构成的图,这些边 !!! compatibility - 由于 Nebula Graph {{ nebula.release }} 的数据模型中,允许存在"悬挂边",因此在增删时,用户需自行保证“一条边所对应的起点和终点”的存在性。详见[INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md), [DELETE VERTEX](../3.ngql-guide/12.vertex-statements/4.delete-vertex.md), [INSERT EDGE](../3.ngql-guide/13.edge-statements/1.insert-edge.md), [DELETE EDGE](../3.ngql-guide/13.edge-statements/4.delete-edge.md)。 + 由于 Nebula Graph {{ nebula.release }} 的数据模型中,允许存在"悬挂边",因此在增删时,用户需自行保证“一条边所对应的起点和终点”的存在性。详见[INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md)、[DELETE VERTEX](../3.ngql-guide/12.vertex-statements/4.delete-vertex.md)、[INSERT EDGE](../3.ngql-guide/13.edge-statements/1.insert-edge.md)、[DELETE EDGE](../3.ngql-guide/13.edge-statements/4.delete-edge.md)。 不支持 openCypher 中的 MERGE 语句。 diff --git a/docs-2.0/1.introduction/3.vid.md b/docs-2.0/1.introduction/3.vid.md index fb05aa767be..7ae92dea809 100644 --- a/docs-2.0/1.introduction/3.vid.md +++ b/docs-2.0/1.introduction/3.vid.md @@ -28,7 +28,7 @@ - 可以使用`LOOKUP`或者`MATCH`语句,来通过属性索引查找对应的VID; -- 性能上,直接通过VID找到点的语句性能最高,例如`DELETE xxx WHERE id(xxx) == "player100"`, 或者`GO FROM "player100"`等语句。通过属性先查找VID,再进行图操作的性能会变差,例如`LOOKUP | GO FROM $-.ids`等语句,相比前者多了一次内存或硬盘的随机读(`LOOKUP`)以及一次序列化(`|`)。 +- 性能上,直接通过VID找到点的语句性能最高,例如`DELETE xxx WHERE id(xxx) == "player100"`,或者`GO FROM "player100"`等语句。通过属性先查找VID,再进行图操作的性能会变差,例如`LOOKUP | GO FROM $-.ids`等语句,相比前者多了一次内存或硬盘的随机读(`LOOKUP`)以及一次序列化(`|`)。 ## VID生成建议 @@ -50,16 +50,15 @@ VID的数据类型必须在[创建图空间](../3.ngql-guide/9.space-statements/ ## "查询起始点"(`start vid`)与全局扫描 -绝大多数情况下,Nebula Graph 的查询语句(`MATCH`, `GO`, `LOOKUP`)的执行计划,必须要通过一定方式找到查询起始点的 VID (`start vid`)。 +绝大多数情况下,Nebula Graph 的查询语句(`MATCH`、`GO`、`LOOKUP`)的执行计划,必须要通过一定方式找到查询起始点的 VID(`start vid`)。 定位 `start vid` 只有两种方式: 1. 例如 `GO FROM "player100" OVER` 是在语句中显式的指明 `start vid` 是 "player100"; -2. 例如, `LOOKUP ON player WHERE player.name == "Tony Parker"` 或者 `MATCH (v:player {name:"Tony Parker"}) `,是通过属性 `player.name` 的索引来定位到 `start vid`; +2. 例如 `LOOKUP ON player WHERE player.name == "Tony Parker"` 或者 `MATCH (v:player {name:"Tony Parker"}) `,是通过属性 `player.name` 的索引来定位到 `start vid`; !!! caution "不能在没有 `start vid` 情况下进行全局扫描" 例如 `match (n) return n;` 会返回错误,因为此时无法定位到 `start vid`;这是一个全局扫描,因此被禁止。 - diff --git a/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md b/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md index 9b546149ac6..8d612f0ac2f 100644 --- a/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md +++ b/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md @@ -84,7 +84,7 @@ nebula> CREATE TAG player(name string, age int); !!! compatibility "nGQL 部分兼容 openCypher 9 的 DQL" - nGQL 设计目标为兼容部分 DQL (match)。不计划兼容任何 DDL,DML,DCL。 + nGQL 设计目标为兼容部分 DQL(match)。不计划兼容任何 DDL,DML,DCL。 在[Nebula Graph Issues](https://github.com/vesoft-inc/nebula/issues?q=is%3Aissue+is%3Aopen+label%3Aincompatible)中已经列出已知的多处不兼容项。如果发现这种类型的新问题,请提交问题并附带`incompatible`标签。在本文搜索"compatibility"或者“兼容性”查看具体不兼容细节。 @@ -99,7 +99,7 @@ nebula> CREATE TAG player(name string, age int); |边Rank| 无此概念 | 用`@rank`设置。 | |语句|-|不支持 openCypher 9 的所有 DML 语句(如`CREATE`、`MERGE`等),不支持所有的 DCL, 和支持部分 `MATCH` 语法和函数(不支持`OPTIONAL MATCH`,不支持多`MATCH`,不支持 `WHERE` 中使用图 pattern)。 | |语句文本换行 | 换行符 | `\` + 换行符 | -|Label与Tag是不同的概念| Label用于寻找点(点的索引)。 | Tag用于定义点的一种类型及相应的属性,无索引功能。 | +|Label与Tag是不同的概念| Label用于寻找点(点的索引)。 | Tag用于定义点的一种类型及相应的属性,无索引功能。 | | 预编译与参数化查询 | 支持 | 不支持 | !!! compatibility @@ -108,7 +108,7 @@ nebula> CREATE TAG player(name string, age int); 1. Cypher要求所有Cypher语句必须“显式地在一个事务中”执行,而openCypher没有这样的要求。另外,nGQL **没有**事务及隔离性。 - 2. Cypher 企业版功能有多种的约束(constraints),包括 Unique node property constraints、Node property existence constraints、Relationship property existence constraints、Node key constraints。 OpenCypher 标准中没有约束。 而 nGQL 是强 Schema 系统,前述的约束大多通过 Schema 定义可实现(包括 NOT NULL),唯一不能支持的功能是“属性值唯一性”(UNIQUE constraint)。 + 2. Cypher 企业版功能有多种的约束(constraints),包括 Unique node property constraints、Node property existence constraints、Relationship property existence constraints、Node key constraints。 OpenCypher 标准中没有约束。 而 nGQL 是强 Schema 系统,前述的约束大多通过 Schema 定义可实现(包括 NOT NULL),唯一不能支持的功能是“属性值唯一性”(UNIQUE constraint)。 3. Cypher 有 APoC,openCypher 9 没有 APoC。Cypher 有 Blot 协议支持要求, openCypher 9 没有。