Skip to content

Commit

Permalink
Fix bad punctuations (#1049)
Browse files Browse the repository at this point in the history
  • Loading branch information
greyli committed Oct 13, 2021
1 parent 3cb7db7 commit 8c50d6a
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 16 deletions.
18 changes: 9 additions & 9 deletions docs-2.0/1.introduction/2.data-model.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
# 数据模型

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

## 数据模型

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

- 图空间(Space)
- 图空间Space)

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

- 点(Vertex)

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

- 点是用点标识符(`VID`)标识的。`VID`在同一图空间中唯一。VID 是一个 int64, 或者 fixed_string(N)。
- 点是用点标识符(`VID`)标识的。`VID`在同一图空间中唯一。VID 是一个 int64或者 fixed_string(N)。
- 点必须有至少一个Tag,也可以有多个Tag。但不能没有Tag。

- 边(Edge)
Expand All @@ -25,7 +25,7 @@ Nebula Graph数据模型使用6种基本的数据模型:
- 边是有方向的,不存在无向边。
- 四元组 `<起点VID、Edge type、边排序值(Rank)、终点VID>` 用于唯一标识一条边。边没有EID。
- 一条边有且仅有一个Edge type。
- 一条边有且仅有一个rank。其为int64, 默认为0。
- 一条边有且仅有一个rank。其为int64默认为0。

- 标签(Tag)

Expand All @@ -51,17 +51,17 @@ Nebula Graph使用有向属性图模型,指点和边构成的图,这些边

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

!!! Note

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 语句。
7 changes: 3 additions & 4 deletions docs-2.0/1.introduction/3.vid.md
Original file line number Diff line number Diff line change
Expand Up @@ -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生成建议

Expand All @@ -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`;这是一个全局扫描,因此被禁止。

6 changes: 3 additions & 3 deletions docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ nebula> CREATE TAG player(name string, age int);

!!! compatibility "nGQL 部分兼容 openCypher 9 的 DQL"

nGQL 设计目标为兼容部分 DQL (match)。不计划兼容任何 DDL,DML,DCL。
nGQL 设计目标为兼容部分 DQLmatch。不计划兼容任何 DDL,DML,DCL。

在[Nebula Graph Issues](https://github.com/vesoft-inc/nebula/issues?q=is%3Aissue+is%3Aopen+label%3Aincompatible)中已经列出已知的多处不兼容项。如果发现这种类型的新问题,请提交问题并附带`incompatible`标签。在本文搜索"compatibility"或者“兼容性”查看具体不兼容细节。

Expand All @@ -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
Expand All @@ -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 没有。

Expand Down

0 comments on commit 8c50d6a

Please sign in to comment.