Skip to content

Commit

Permalink
Merge branch 'master' into update-Group&Zone
Browse files Browse the repository at this point in the history
  • Loading branch information
cooper-lzy authored Jan 11, 2022
2 parents 7286125 + fe1ea02 commit c9f1329
Show file tree
Hide file tree
Showing 85 changed files with 1,888 additions and 618 deletions.
2 changes: 1 addition & 1 deletion docs-2.0/1.introduction/1.what-is-nebula-graph.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 什么是 Nebula Graph

Nebula Graph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。
Nebula Graph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。

![Nebula Graph 鸟瞰图](nebula-birdview.png)

Expand Down
6 changes: 5 additions & 1 deletion docs-2.0/1.introduction/2.data-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ Nebula Graph 数据模型使用 6 种基本的数据模型:
点用来保存实体对象,特点如下:

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

!!! Compatibility

Nebula Graph 2.x 的点不能没有 Tag。Nebula Graph {{nebula.release}} 的点可以没有 Tag。

- 边(Edge)

Expand Down
4 changes: 2 additions & 2 deletions docs-2.0/1.introduction/3.vid.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,6 @@ VID 的数据类型必须在[创建图空间](../3.ngql-guide/9.space-statements

2. 例如 `LOOKUP ON player WHERE player.name == "Tony Parker"` 或者 `MATCH (v:player {name:"Tony Parker"}) `,是通过属性 `player.name` 的索引来定位到 `start vid`

!!! caution "不能在没有 `start vid` 情况下进行全局扫描"
!!! caution

例如 `match (n) return n;` 会返回错误,因为此时无法定位到 `start vid`;这是一个全局扫描,因此被禁止
`match (n) return n;` 会返回错误`Scan vertices or edges need to specify a limit number, or limit number can not push down.`,这是一个全局扫描,需要用`LIMIT`子句限制返回数量才能执行
18 changes: 9 additions & 9 deletions docs-2.0/15.contribution/how-to-contribute.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@

## 开始之前

### github 或社区提交问题
### GitHub 或社区提交问题

欢迎为项目贡献任何代码或文档,但是建议先在 [github](https://github.com/vesoft-inc/nebula)[社区](https://discuss.nebula-graph.io/)上提交一个问题,和大家共同讨论。
欢迎为项目贡献任何代码或文档,但是建议先在 [GitHub](https://github.com/vesoft-inc/nebula)[社区](https://discuss.nebula-graph.io/)上提交一个问题,和大家共同讨论。

### 签署贡献者许可协议(CLA)

什么是 [CLA](https://www.apache.org/licenses/contributor-agreements.html)

签署协议链接:[vesoft inc. Contributor License Agreement](https://cla-assistant.io/vesoft-inc/)

单击按钮** Sign in with GitHub to agree **签署协议。
单击按钮 **Sign in with GitHub to agree** 签署协议。

如果有任何问题,请发送邮件至`info@vesoft.com`

Expand Down Expand Up @@ -124,7 +124,7 @@ Nebula Graph 项目有很多[仓库](https://github.com/vesoft-inc),以 [nebul

- 代码风格

**Nebula Graph **采用`cpplint`来确保代码符合 Google 的代码风格指南。检查器将在提交代码之前执行。
**Nebula Graph** 采用`cpplint`来确保代码符合 Google 的代码风格指南。检查器将在提交代码之前执行。

- 单元测试要求

Expand Down Expand Up @@ -193,20 +193,20 @@ pull request 创建后,至少需要两人审查。审查人员将进行彻底

### Step 1:确认项目捐赠

通过邮件、微信、Slack 等方式联络 Nebula Graph 官方人员,确认捐赠项目一事。项目将被捐赠至 Nebula Contrib 组织下。
通过邮件、微信、Slack 等方式联络 Nebula Graph 官方人员,确认捐赠项目一事。项目将被捐赠至 [Nebula Contrib](https://github.com/nebula-contrib) 组织下。

邮件地址:info@vesoft.com
* 邮件地址:info@vesoft.com

微信:NebulaGraphbot
* 微信:NebulaGraphbot

Slack:[Join Slack](https://join.slack.com/t/nebulagraph/shared_invite/zt-7ybejuqa-NCZBroh~PCh66d9kOQj45g)
* Slack:[Join Slack](https://join.slack.com/t/nebulagraph/shared_invite/zt-7ybejuqa-NCZBroh~PCh66d9kOQj45g)

### Step 2:获取项目接收人信息

由 Nebula Graph 官方人员给出 Nebula Contrib 的项目接收者 ID。

### Step 3:捐赠项目

由您将项目转移至本次捐赠的项目接受人,并由项目接收者将该项目转移至 Nebula Contrib 组织下。捐赠后,您将以 Maintain 角色继续主导社区项目的发展。
由您将项目转移至本次捐赠的项目接受人,并由项目接收者将该项目转移至 [Nebula Contrib](https://github.com/nebula-contrib) 组织下。捐赠后,您将以 Maintain 角色继续主导社区项目的发展。

GitHub 上转移仓库的操作,请参见 [Transferring a repository owned by your user account](https://docs.github.com/en/enterprise-server@3.0/github/administering-a-repository/managing-repository-settings/transferring-a-repository#transferring-a-repository-owned-by-your-user-account)
15 changes: 4 additions & 11 deletions docs-2.0/2.quick-start/4.nebula-graph-crud.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

| 组成部分 | 说明|
| :--- | :--- |
| 点(Vertex) | 表示现实世界中的实体。一个点可以有一个或多个标签|
| 点(Vertex) | 表示现实世界中的实体。一个点可以有 0 到多个标签|
| 标签(Tag) | 点的类型,定义了一组描述点类型的属性。 |
| 边(Edge) | 表示两个点之间**有方向**的关系。|
| 边类型(Edge type) | 边的类型,定义了一组描述边的类型的属性。 |
Expand Down Expand Up @@ -67,7 +67,7 @@ nebula> SHOW HOSTS;

!!! caution

Nebula Graph 中执行如下创建和修改操作,是异步实现的。要在**下一个**心跳周期之后才能生效否则访问会报错。
Nebula Graph 中执行如下创建和修改操作,是异步实现的。要在**下一个**心跳周期之后才能生效否则访问会报错。为确保数据同步,后续操作能顺利进行,请等待 2 个心跳周期(20 秒)

- `CREATE SPACE`
- `CREATE TAG`
Expand All @@ -81,12 +81,6 @@ nebula> SHOW HOSTS;

默认心跳周期是 10 秒。修改心跳周期参数`heartbeat_interval_secs`,请参见[配置简介](../5.configurations-and-logs/1.configurations/1.configurations.md)。

为确保数据同步,后续操作能顺利进行,可采取以下方法之一:

- 执行`SHOW``DESCRIBE`命令检查相应对象的状态,确保创建或修改已完成。如果没有完成,请等待几秒重试。

- 等待 2 个心跳周期(20 秒)。

## 创建和选择图空间

### nGQL 语法
Expand Down Expand Up @@ -208,10 +202,9 @@ nebula> CREATE EDGE serve(start_year int, end_year int);
- 插入点

```ngql
INSERT VERTEX [IF NOT EXISTS] <tag_name> (<property_name>[, <property_name>...])
INSERT VERTEX [IF NOT EXISTS] [<tag_name> (<property_name>] [, <property_name>...])
[, <tag_name> (<property_name>[, <property_name>...]), ...]
VALUES <vid>: (<property_value>[, <property_value>...])
[, <vid>: (<property_value>[, <property_value>...];
VALUES <vid>: ([<property_value>[, <property_value>...]]);
```
`VID`是 Vertex ID 的缩写,`VID`在一个图空间中是唯一的。参数详情请参见 [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md)。
Expand Down
14 changes: 7 additions & 7 deletions docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@
| 匹配点的属性 | `MATCH (v:player{name:"Tim Duncan"}) RETURN v` | 用户可以在 Tag 的右侧用`{<prop_name>: <prop_value>}`表示模式中点的属性。 |
| 匹配单点 ID | `MATCH (v) WHERE id(v) == 'player101' RETURN v` | 用户可以使用点 ID 去匹配点。`id()`函数可以检索点的 ID。 |
| 匹配多点 ID | `MATCH (v:player { name: 'Tim Duncan' })--(v2) WHERE id(v2) IN ["player101", "player102"] RETURN v2` | 要匹配多个点的 ID,可以用`WHERE id(v) IN [vid_list]`|
| 匹配连接的点 | `MATCH (v:player{name:"Tim Duncan"})--(v2) RETURN v2.name AS Name` | 用户可以使用`--`符号表示两个方向的边,并匹配这些边连接的点。用户可以在`--`符号上增加`<``>`符号指定边的方向。 |
| 匹配连接的点 | `MATCH (v:player{name:"Tim Duncan"})--(v2) RETURN v2.player.name AS Name` | 用户可以使用`--`符号表示两个方向的边,并匹配这些边连接的点。用户可以在`--`符号上增加`<``>`符号指定边的方向。 |
| 匹配路径 | `MATCH p=(v:player{name:"Tim Duncan"})-->(v2) RETURN p` | 连接起来的点和边构成了路径。用户可以使用自定义变量命名路径。 |
| 匹配边 | `MATCH (v:player{name:"Tim Duncan"})-[e]-(v2) RETURN e` | 除了用`--``-->``<--`表示未命名的边之外,用户还可以在方括号中使用自定义变量命名边。例如`-[e]-`|
| 匹配 Edge type | `MATCH ()-[e:follow]-() RETURN e` | 和点一样,用户可以用`:<edge_type>`表示模式中的 Edge type,例如`-[e:follow]-`|
Expand All @@ -221,7 +221,7 @@
| 检索点或边的信息 | `MATCH (v:player{name:"Tim Duncan"}) RETURN v`<br>`MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) RETURN e` | 使用`RETURN {<vertex_name> | <edge_name>}`检索点或边的所有信息。 |
| 检索点 ID | `MATCH (v:player{name:"Tim Duncan"}) RETURN id(v)` | 使用`id()`函数检索点 ID。 |
| 检索 Tag | `MATCH (v:player{name:"Tim Duncan"}) RETURN labels(v)` | 使用`labels()`函数检索点上的 Tag 列表。<br>检索列表`labels(v)`中的第 N 个元素,可以使用`labels(v)[n-1]`|
| 检索点或边的单个属性 | `MATCH (v:player{name:"Tim Duncan"}) RETURN v.age` | 使用`RETURN {<vertex_name> | <edge_name>}.<property>`检索单个属性。<br>使用`AS`设置属性的别名。 |
| 检索点或边的单个属性 | `MATCH (v:player{name:"Tim Duncan"}) RETURN v.player.age` | 使用`RETURN {<vertex_name> | <edge_name>}.<property>`检索单个属性。<br>使用`AS`设置属性的别名。 |
| 检索点或边的所有属性 | `MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN properties(v2)` | 使用`properties()`函数检索点或边的所有属性。 |
| 检索 Edge type | `MATCH p=(v:player{name:"Tim Duncan"})-[e]->() RETURN DISTINCT type(e)` | 使用`type()`函数检索匹配的 Edge type。 |
| 检索路径 | `MATCH p=(v:player{name:"Tim Duncan"})-[*3]->() RETURN p` | 使用`RETURN <path_name>`检索匹配路径的所有信息。 |
Expand Down Expand Up @@ -296,7 +296,7 @@



* [UNWIND](../3.ngql-guide/7.general-query-statements/7.unwind.md)
* [UNWIND](../3.ngql-guide/8.clauses-and-options/unwind.md)

```
UNWIND <list> AS <alias> <RETURN clause>
Expand Down Expand Up @@ -340,11 +340,11 @@
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| [GROUP BY](../3.ngql-guide/8.clauses-and-options/group-by.md) | ` GROUP BY <var> YIELD <var>, <aggregation_function(var)>` | `GO FROM "player100" OVER follow BIDIRECT YIELD $$.player.name as Name | GROUP BY $-.Name YIELD $-.Name as Player, count(*) AS Name_Count` | 查找所有连接到 player100 的点,并根据他们的姓名进行分组,返回姓名的出现次数。 |
| [LIMIT](../3.ngql-guide/8.clauses-and-options/limit.md) | `YIELD <var> [| LIMIT [<offset_value>,] <number_rows>]` | `O FROM "player100" OVER follow REVERSELY YIELD $$.player.name AS Friend, $$.player.age AS Age | ORDER BY $-.Age, $-.Friend | LIMIT 1, 3` | 从排序结果中返回第 2 行开始的 3 行数据。 |
| [SKIP](../3.ngql-guide/8.clauses-and-options/limit.md) | `RETURN <var> [SKIP <offset>] [LIMIT <number_rows>]` | `MATCH (v:player{name:"Tim Duncan"}) --> (v2) RETURN v2.name AS Name, v2.age AS Age ORDER BY Age DESC SKIP 1` | 用户可以单独使用`SKIP <offset>`设置偏移量,后面不需要添加`LIMIT <number_rows>`|
| [SKIP](../3.ngql-guide/8.clauses-and-options/limit.md) | `RETURN <var> [SKIP <offset>] [LIMIT <number_rows>]` | `MATCH (v:player{name:"Tim Duncan"}) --> (v2) RETURN v2.player.name AS Name, v2.player.age AS Age ORDER BY Age DESC SKIP 1` | 用户可以单独使用`SKIP <offset>`设置偏移量,后面不需要添加`LIMIT <number_rows>`|
| [ORDER BY](../3.ngql-guide/8.clauses-and-options/order-by.md) | `<YIELD clause> ORDER BY <expression> [ASC | DESC] [, <expression> [ASC | DESC] ...]` | `FETCH PROP ON player "player100", "player101", "player102", "player103" YIELD player.age AS age, player.name AS name | ORDER BY $-.age ASC, $-.name DESC` | `ORDER BY`子句指定输出结果的排序规则。 |
| [RETURN](../3.ngql-guide/8.clauses-and-options/return.md) | `RETURN {<vertex_name>|<edge_name>|<vertex_name>.<property>|<edge_name>.<property>|...}` | `MATCH (v:player) RETURN v.name, v.age LIMIT 3` | 返回点的属性为`name``age`的前三行值。 |
| [RETURN](../3.ngql-guide/8.clauses-and-options/return.md) | `RETURN {<vertex_name>|<edge_name>|<vertex_name>.<property>|<edge_name>.<property>|...}` | `MATCH (v:player) RETURN v.player.name, v.player.age LIMIT 3` | 返回点的属性为`name``age`的前三行值。 |
| [TTL](../3.ngql-guide/8.clauses-and-options/ttl-options.md) | ``CREATE TAG <tag_name>(<property_name_1> <property_value_1>, <property_name_2> <property_value_2>, ...) ttl_duration= <value_int>, ttl_col = <property_name>`` | `CREATE TAG t2(a int, b int, c string) ttl_duration= 100, ttl_col = "a"` | 创建 Tag 并设置 TTL 选项。 |
| [WHERE](../3.ngql-guide/8.clauses-and-options/where.md) | `WHERE {<vertex|edge_alias>.<property_name> {>|==|<|...} <value>...}` | `MATCH (v:player) WHERE v.name == "Tim Duncan" XOR (v.age < 30 AND v.name == "Yao Ming") OR NOT (v.name == "Yao Ming" OR v.name == "Tim Duncan") RETURN v.name, v.age` | `WHERE`子句可以根据条件过滤输出结果,通常用于`GO``LOOKUP`语句,`MATCH``WITH`语句。 |
| [WHERE](../3.ngql-guide/8.clauses-and-options/where.md) | `WHERE {<vertex|edge_alias>.<property_name> {>|==|<|...} <value>...}` | `MATCH (v:player) WHERE v.player.name == "Tim Duncan" XOR (v.player.age < 30 AND v.player.name == "Yao Ming") OR NOT (v.player.name == "Yao Ming" OR v.player.name == "Tim Duncan") RETURN v.player.name, v.player.age` | `WHERE`子句可以根据条件过滤输出结果,通常用于`GO``LOOKUP`语句,`MATCH``WITH`语句。 |
| [YIELD](../3.ngql-guide/8.clauses-and-options/yield.md) | `YIELD [DISTINCT] <col> [AS <alias>] [, <col> [AS <alias>] ...] [WHERE <conditions>];` | `GO FROM "player100" OVER follow YIELD dst(edge) AS ID | FETCH PROP ON player $-.ID YIELD player.age AS Age | YIELD AVG($-.Age) as Avg_age, count(*)as Num_friends` | 查找 player100 关注的 player,并计算他们的平均年龄。 |
| [WITH](../3.ngql-guide/8.clauses-and-options/with.md) | `MATCH $expressions WITH {nodes()|labels()|...}` | `MATCH p=(v:player{name:"Tim Duncan"})--() WITH nodes(p) AS n UNWIND n AS n1 RETURN DISTINCT n1` | `WITH`子句可以获取并处理查询前半部分的结果,并将处理结果作为输入传递给查询的后半部分。 |

Expand Down Expand Up @@ -384,7 +384,7 @@

| 语句 | 语法 | 示例 | 说明 |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md) | `INSERT VERTEX [IF NOT EXISTS] <tag_name> (<prop_name_list>) [, <tag_name> (<prop_name_list>), ...] VALUES VID: (<prop_value_list>[, <prop_value_list>])` | `INSERT VERTEX t2 (name, age) VALUES "13":("n3", 12), "14":("n4", 8)` | 在 Nebula Graph 实例的指定图空间中插入一个或多个点。 |
| [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md) | `INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...] VALUES VID: ([prop_value_list]) <br> tag_props: tag_name ([prop_name_list]) <br> prop_name_list: [prop_name [, prop_name] ...] <br> prop_value_list: [prop_value [, prop_value] ...] ` | `INSERT VERTEX t2 (name, age) VALUES "13":("n3", 12), "14":("n4", 8)` | 在 Nebula Graph 实例的指定图空间中插入一个或多个点。 |
| [DELETE VERTEX](../3.ngql-guide/12.vertex-statements/4.delete-vertex.md) | `DELETE VERTEX <vid> [, <vid> ...]` | `DELETE VERTEX "team1"` | 删除点,以及点关联的出边和入边。 |
| [UPDATE VERTEX](../3.ngql-guide/12.vertex-statements/2.update-vertex.md) | `UPDATE VERTEX ON <tag_name> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>]` | `UPDATE VERTEX ON player "player101" SET age = age + 2 ` | 修改点上 Tag 的属性值。 |
| [UPSERT VERTEX](../3.ngql-guide/12.vertex-statements/3.upsert-vertex.md) | `UPSERT VERTEX ON <tag> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>]` | `UPSERT VERTEX ON player "player667" SET age = 31` | 结合`UPDATE``INSERT`,如果点存在,会修改点的属性值;如果点不存在,会插入新的点。 |
Expand Down
Loading

0 comments on commit c9f1329

Please sign in to comment.