Skip to content

Commit

Permalink
Mergev250 (#910)
Browse files Browse the repository at this point in the history
* Update deploy.yaml

* Update deploy.yaml

* Delete header.html

* fix-brokenlink

* Update mkdocs.yml

* Update README.md

* Update README.md

* Update 2.install-nebula-graph-by-rpm-or-deb.md

* Update 4.date-and-time.md

* Update mkdocs.yml

* Update requirements.txt

* Update 2.install-nebula-graph-by-rpm-or-deb.md

* Update show hosts results (#882)

* Update 6.list.md

* Update 2.1.path.md

* Update 2.user-defined-variables.md

* Update 4.pipe.md

* Update 6.set.md

* Update 7.string.md

* Update 8.list.md

* Update requirements.txt

* Update 3.date-and-time.md

* Update 6.list.md

* update (#884)

* Update 3.upsert-edge.md

* update (#885)

* Update 2.match.md

* Update 8.show-indexes.md (#883)

* Update 1.resource-preparations.md

* Update mkdocs.yml

* merge

* add release notes

* Update requirements.txt

* update (#887)

* add console commands (#888)

* Update 1.authentication.md

* Update 1.what-is-nebula-graph.md

* Update 2.data-model.md

* Update 1.architecture-overview.md

* Update 2.install-nebula-graph-by-rpm-or-deb.md

* Update 3.deploy-nebula-graph-with-docker-compose.md

* Update 4.nebula-graph-crud.md

* Update 4.nebula-graph-crud.md

* Update 2.user-defined-variables.md

* update

* Update 4.nebula-graph-crud.md

* Update 4.nebula-graph-crud.md

* Update 1.overview.md

* Update 3.graph-patterns.md

* Update 1.install-nebula-graph-by-compiling-the-source-code.md

* Update 3.graph-patterns.md

* Update ngql-style-guide.md

* Update releasenote.md

* Update ngql-style-guide.md

* Update 4.date-and-time.md

* Update ngql-style-guide.md

* Update 1.composite-queries.md

* Modify doc (#889)

* add console commands

* update

* Update 1.overview.md

* Update 1.overview.md

* Update 1.composite-queries.md

* Update 4.date-and-time.md

* Update 4.job-statements.md

* Update 4.br-restore-data.md

* Update README.md

* Update README.md

* Update mkdocs.yml

* Update ex-ug-import-from-kafka.md (#890)

* Update st-ug-deploy.md

* Update 2.deploy-dashboard.md

* Update 4.storage-config.md

* Update st-ug-deploy.md

* Update 1.get-subgraph.md (#891)

* Update 2.deploy-dashboard.md

* Update 2.deploy-dashboard.md

* Update nebula-algorithm.md

* Update 2.install-nebula-graph-by-rpm-or-deb.md

* Update ex-ug-parameter.md

* update (#892)

* Create 2.deploy-dashboard.md

* Update st-ug-deploy.md

* Update 3.br-backup-data.md

* Update source_connect-to-nebula-graph.md

* Update source_connect-to-nebula-graph.md

* Update 2.find-path.md

* Clarify index selection behavior

* Update 1.overview.md

* String writing operations (#894)

* about string writing operations

* Update 3.string.md

* Update mkdocs.yml (#895)

* Update 6.eco-tool-version.md (#896)

* Update 2.install-nebula-graph-by-rpm-or-deb.md

* Update mind-map.md

* Update 1.resource-preparations.md

* Update 2.deploy-dashboard.md

* Update 6.eco-tool-version.md (#897)

* Update 1.resource-preparations.md

* Add compatibility note for index selection (#898)

* Delete header.html

* Update 2.install-nebula-graph-by-rpm-or-deb.md

* list supported property types (#901)

* Update 2.install-nebula-graph-by-rpm-or-deb.md

* Update mkdocs.yml

* Update 6.eco-tool-version.md

* Update 6.eco-tool-version.md (#902)

* Update releasenote.md (#903)

* Update releasenote.md

* Update 4.nebula-graph-crud.md

* Update 1.install-nebula-graph-by-compiling-the-source-code.md

* Update 6.eco-tool-version.md

* Update README.md

* Update 2.deploy-dashboard.md

* Update 1.install-nebula-graph-by-compiling-the-source-code.md

* Update 2.deploy-dashboard.md

* Update 2.deploy-dashboard.md

* Update 2.deploy-dashboard.md

* Update 2.install-nebula-graph-by-rpm-or-deb.md

* Specify the path when installing, then you also need to specify the path when upgrading

Specify the path when installing, then you also need to specify the path when upgrading。

* It is recommended to back up the configuration file before updating (#905)

It is recommended to back up the configuration file before updating

* Update 1.install-nebula-graph-by-compiling-the-source-code.md

* Update 3.deploy-nebula-graph-with-docker-compose.md

* Update 3.deploy-nebula-graph-with-docker-compose.md

* Update ex-ug-deploy.md

* Update return.md

* Update st-ug-deploy.md

* Update return.md

* Update 4.nebula-graph-crud.md

* Update 1.overview.md

* Update order-by.md

* Update 2.match.md

* Update 1.composite-queries.md

* update (#906)

* Update source_manage-service.md

* Optimize the reuse method and resolve some issues (#907)

* Fix format issues (#908)

* Update st-ug-what-is-graph-studio.md

* Update st-ug-what-is-graph-studio.md

* Update st-ug-what-is-graph-studio.md

* Update st-ug-what-is-graph-studio.md

* Update st-ug-what-is-graph-studio.md

* Update st-ug-deploy.md

* Update 1.what-is-nebula-graph.md

* Update 3.role-list.md (#909)

* Update 2.management-user.md

* Update 3.go.md

* Update 3.property-reference.md

Co-authored-by: foesa <35463247+foesa-yang@users.noreply.github.com>
Co-authored-by: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com>
Co-authored-by: randomJoe211 <69501902+randomJoe211@users.noreply.github.com>
Co-authored-by: Nut He <18328704+hetao92@users.noreply.github.com>
Co-authored-by: Sophie-Xie <84560950+Sophie-Xie@users.noreply.github.com>
Co-authored-by: li Nico <37568394+NicolaCage@users.noreply.github.com>
Co-authored-by: study-day <38400198+study-day@users.noreply.github.com>
  • Loading branch information
8 people committed Aug 26, 2021
1 parent 57771ff commit 1b6d148
Show file tree
Hide file tree
Showing 79 changed files with 956 additions and 634 deletions.
11 changes: 3 additions & 8 deletions .github/workflows/deploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:

jobs:
deploy:
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
Expand All @@ -15,19 +15,17 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v1
with:
python-version: '3.7'
python-version: '3.8'
architecture: 'x64'

- name: apt install
run: |
sudo apt update -y
sudo apt install -y $(cat pkglist.txt)
- name: Install dependencies
run: |
pip install --upgrade pip
pip install -r ./requirements.txt
- name: set LANG
run: sh lang-zh.sh

Expand All @@ -37,17 +35,14 @@ jobs:
- name: mike list delete
run: |
mike list
- name: Mike Deploy master
run: |
mike deploy master -p --rebase
mike list
- name: show git branch
run: |
git branch
git checkout gh-pages
- name: Compress
run: |
tar -vczf nebula-docs.tar.gz master versions.json *.html
Expand Down Expand Up @@ -79,4 +74,4 @@ jobs:
# uses: peaceiris/actions-gh-pages@v3
# with:
# github_token: ${{ secrets.DEPLOY_TOKEN }}
# publish_dir: ./site
# publish_dir: ./site
4 changes: 2 additions & 2 deletions docs-2.0/1.introduction/1.what-is-nebula-graph.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ Nebula Graph支持严格的角色访问控制和LDAP(Lightweight Directory Acc

### 生态多样化

Nebula Graph开放了越来越多的原生工具,例如[Nebula Graph Studio](https://github.com/vesoft-inc/nebula-web-docker)[Nebula Console](https://github.com/vesoft-inc/nebula-console)[Nebula Exchange](https://github.com/vesoft-inc/nebula-spark-utils/tree/v2.0.0/nebula-exchange)等。
Nebula Graph开放了越来越多的原生工具,例如[Nebula Graph Studio](https://github.com/vesoft-inc/nebula-studio)[Nebula Console](https://github.com/vesoft-inc/nebula-console)[Nebula Exchange](https://github.com/vesoft-inc/nebula-spark-utils/tree/v2.0.0/nebula-exchange)等。

此外,Nebula Graph还具备与Spark、Flink、HBase等产品整合的能力,在这个充满挑战与机遇的时代,大大增强了自身的竞争力。

### 兼容openCypher查询语言

Nebula Graph查询语言,也称为nGQL,是一种声明性的、兼容openCypher的文本查询语言,易于理解和使用。详细语法请参见[nGQL指南](../3.ngql-guide/1.nGQL-overview/1.overview.md)
Nebula Graph 查询语言,简称为 nGQL,是一种声明性的、部分兼容 openCypher 的文本查询语言,易于理解和使用。详细语法请参见[nGQL指南](../3.ngql-guide/1.nGQL-overview/1.overview.md)

### 面向未来硬件,读写平衡

Expand Down
2 changes: 1 addition & 1 deletion docs-2.0/1.introduction/2.1.path.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@

## 视频

用户也可以观看视频了解Path的相关概念
用户也可以观看视频了解路径的相关概念

[Nebula Algorithm](https://www.bilibili.com/video/BV1Uf4y1t72L)(03分09秒)

Expand Down
6 changes: 3 additions & 3 deletions docs-2.0/1.introduction/2.data-model.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# 数据模型

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

## 数据结构
## 数据模型

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

- 图空间(Space)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 架构总览
# Nebula Graph 架构总览

Nebula Graph 由三种服务构成:Graph 服务、Meta 服务和 Storage 服务,是一种存储与计算分离的架构。

Expand Down Expand Up @@ -28,7 +28,9 @@ Nebula Graph 采用计算存储分离架构。Graph 服务负责处理计算请

- 节约成本

计算存储分离架构能够提高资源利用率,而且可根据业务需求灵活控制成本。如果使用 [Nebula Graph Cloud](https://cloud.nebula-graph.com.cn/ "Nebula Graph Cloud official website"),可以进一步节约前期成本。
计算存储分离架构能够提高资源利用率,而且可根据业务需求灵活控制成本。

<!--如果使用 [Nebula Graph Cloud](https://cloud.nebula-graph.com.cn/ "Nebula Graph Cloud official website"),可以进一步节约前期成本。-->

- 更多可能性

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Storage服务是由nebula-storaged进程提供的,用户可以根据场景配

- Consensus层

Storage服务的中间层,实现了[Multi Group Raft](#raft协议),保证强一致性和高可用性。
Storage服务的中间层,实现了[Multi Group Raft](#multi_group_raft),保证强一致性和高可用性。

- Store Engine层

Expand Down
4 changes: 4 additions & 0 deletions docs-2.0/2.quick-start/2.install-nebula-graph.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# 步骤1:安装Nebula Graph

{% include "/source_install-nebula-graph-by-rpm-or-deb.md" %}
<!-- The line above is for content reusing. The source file is in the docs-2.0/reuse directory. -->
5 changes: 2 additions & 3 deletions docs-2.0/2.quick-start/3.connect-to-nebula-graph.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 步骤3:连接Nebula Graph

--8<-- "source_connect-to-nebula-graph.md"

<!-- This part is reused from the docs-2.0/reuse directory. To modify it, update the source file. -->
{% include "/source_connect-to-nebula-graph.md" %}
<!-- The line above is for content reusing. The source file is in the docs-2.0/reuse directory. -->
50 changes: 14 additions & 36 deletions docs-2.0/2.quick-start/4.nebula-graph-crud.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@

## 检查Nebula Graph集群的机器状态

首先建议检查机器状态,确保所有的Storage服务连接到了Meta服务。执行命令`SHOW HOSTS`查看机器状态。
!!! Note

首先建议检查机器状态,确保所有的Storage服务连接到了Meta服务。执行命令`SHOW HOSTS`查看机器状态。

```ngql
nebula> SHOW HOSTS;
Expand All @@ -49,7 +51,9 @@ Got 4 rows (time spent 1061/2251 us)

### 异步实现创建和修改

Nebula Graph中执行如下创建和修改操作,是异步实现的,需要在下一个心跳周期才同步数据。
!!! caution

Nebula Graph中执行如下创建和修改操作,是异步实现的。要在**下一个**心跳周期之后才能生效;否则访问会报错。

- `CREATE SPACE`
- `CREATE TAG`
Expand Down Expand Up @@ -165,7 +169,7 @@ CREATE {TAG | EDGE} {<tag_name> | <edge_type>}(<property_name> <data_type>

### 示例

创建Tag`player``team`,以及Edge type`follow``serve`。说明如下表。
创建Tag:`player``team`,以及Edge type:`follow``serve`。说明如下表。

| 名称 | 类型 | 属性 |
| :--- | :--- | :--- |
Expand All @@ -178,22 +182,14 @@ CREATE {TAG | EDGE} {<tag_name> | <edge_type>}(<property_name> <data_type>
nebula> CREATE TAG player(name string, age int);
Execution succeeded (time spent 20708/22071 us)
Wed, 24 Feb 2021 03:47:01 EST
nebula> CREATE TAG team(name string);
Execution succeeded (time spent 5643/6810 us)
Wed, 24 Feb 2021 03:47:59 EST
nebula> CREATE EDGE follow(degree int);
Execution succeeded (time spent 12665/13934 us)
Wed, 24 Feb 2021 03:48:07 EST
nebula> CREATE EDGE serve(start_year int, end_year int);
Execution succeeded (time spent 5858/6870 us)
Wed, 24 Feb 2021 03:48:16 EST
```

## 插入点和边
Expand Down Expand Up @@ -231,22 +227,14 @@ Wed, 24 Feb 2021 03:48:16 EST
nebula> INSERT VERTEX player(name, age) VALUES "player100":("Tim Duncan", 42);
Execution succeeded (time spent 28196/30896 us)
Wed, 24 Feb 2021 03:55:08 EST
nebula> INSERT VERTEX player(name, age) VALUES "player101":("Tony Parker", 36);
Execution succeeded (time spent 2708/3834 us)
Wed, 24 Feb 2021 03:55:20 EST
nebula> INSERT VERTEX player(name, age) VALUES "player102":("LaMarcus Aldridge", 33);
Execution succeeded (time spent 1945/3294 us)
Wed, 24 Feb 2021 03:55:32 EST
nebula> INSERT VERTEX team(name) VALUES "team200":("Warriors"), "team201":("Nuggets");
Execution succeeded (time spent 2269/3310 us)
Wed, 24 Feb 2021 03:55:47 EST
```

- 插入代表球员和球队之间关系的边。
Expand All @@ -255,22 +243,14 @@ Wed, 24 Feb 2021 03:48:16 EST
nebula> INSERT EDGE follow(degree) VALUES "player100" -> "player101":(95);
Execution succeeded (time spent 3362/4542 us)
Wed, 24 Feb 2021 03:57:36 EST
nebula> INSERT EDGE follow(degree) VALUES "player100" -> "player102":(90);
Execution succeeded (time spent 2974/4274 us)
Wed, 24 Feb 2021 03:57:44 EST
nebula> INSERT EDGE follow(degree) VALUES "player102" -> "player101":(75);
Execution succeeded (time spent 1891/3096 us)
Wed, 24 Feb 2021 03:57:52 EST
nebula> INSERT EDGE serve(start_year, end_year) VALUES "player100" -> "team200":(1997, 2016), "player101" -> "team201":(1999, 2018);
Execution succeeded (time spent 6064/7104 us)
Wed, 24 Feb 2021 03:58:01 EST
```

## 查询数据
Expand All @@ -279,9 +259,9 @@ Wed, 24 Feb 2021 03:48:16 EST

- [FETCH](../3.ngql-guide/7.general-query-statements/4.fetch.md)语句可以获得点或边的属性。

- [LOOKUP](../3.ngql-guide/7.general-query-statements/5.lookup.md)语句是基于[索引](#_14)的,和`WHERE`子句一起使用,查找符合特定条件的数据。
- [LOOKUP](../3.ngql-guide/7.general-query-statements/5.lookup.md)语句是基于[索引](#_12)的,和`WHERE`子句一起使用,查找符合特定条件的数据。

- [MATCH](../3ngql-guide/../3.ngql-guide/7.general-query-statements/2.match.md)语句是查询图数据最常用的,但是它依赖[索引](#_14)去匹配Nebula Graph中的数据模型。
- [MATCH](../3ngql-guide/../3.ngql-guide/7.general-query-statements/2.match.md)语句是查询图数据最常用的,可以灵活的描述各种图模式,但是它依赖[索引](#_12)去匹配Nebula Graph中的数据模型,性能也还需要调优

### nGQL语法

Expand Down Expand Up @@ -416,7 +396,7 @@ Got 1 rows (time spent 2006/2406 us)

!!! Note

`LOOKUP`和`MATCH`的示例在下文的[索引](#_14)部分查看。
`LOOKUP`和`MATCH`的示例在下文的[索引](#_12)部分查看。

## 修改点和边

Expand All @@ -426,7 +406,7 @@ Got 1 rows (time spent 2006/2406 us)

!!! Note

`UPSERT`操作是基于Nebula Graph的分区进行串行操作,所以执行速度比单独执行`INSERT``UPDATE`
每个 partition 内部,`UPSERT` 操作是一个串行操作,所以执行速度比执行 `INSERT``UPDATE` 慢很多。其仅在多个 partition 之间有并发

### nGQL语法

Expand Down Expand Up @@ -459,8 +439,6 @@ Got 1 rows (time spent 2006/2406 us)
nebula> UPDATE VERTEX "player100" SET player.name = "Tim";
Execution succeeded (time spent 3483/3914 us)
Wed, 21 Oct 2020 10:53:14 UTC
nebula> FETCH PROP ON player "player100";
+---------------------------------------------+
| vertices_ |
Expand Down Expand Up @@ -541,11 +519,11 @@ Got 1 rows (time spent 2006/2406 us)

用户可以通过[CREATE INDEX](../3.ngql-guide/14.native-index-statements/1.create-native-index.md)语句为Tag和Edge type增加索引。

### 使用索引必读
!!! caution "使用索引必读"

- `MATCH``LOOKUP`语句的执行都依赖索引,但是索引会导致写性能大幅降低(降低90%甚至更多)。请**不要随意**在生产环境中使用索引,除非很清楚使用索引对业务的影响。
`MATCH`和`LOOKUP`语句的执行都依赖索引,但是索引会导致写性能大幅降低(降低90%甚至更多)。请**不要随意**在生产环境中使用索引,除非很清楚使用索引对业务的影响。

- **必须**为已存在的数据重建索引,否则不能索引已存在的数据,导致无法在`MATCH``LOOKUP`语句中返回这些数据。更多信息,请参见[重建索引](../3.ngql-guide/14.native-index-statements/1.create-native-index.md)
**必须**为“已写入但未构建索引”的数据重建索引,否则无法在`MATCH`和`LOOKUP`语句中返回这些数据。参见[重建索引](../3.ngql-guide/14.native-index-statements/4.rebuild-native-index.md)。

### nGQL语法

Expand Down
5 changes: 2 additions & 3 deletions docs-2.0/2.quick-start/5.start-stop-service.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 步骤2:启动Nebula Graph服务

--8<-- "source_manage-service.md"

<!-- This part is reused from the docs-2.0/reuse directory. To modify it, update the source file. -->
{% include "/source_manage-service.md" %}
<!-- The line above is for content reusing. The source file is in the docs-2.0/reuse directory. -->
8 changes: 5 additions & 3 deletions docs-2.0/20.appendix/0.FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Nebula Graph一直在持续开发,功能或操作的行为可能会有变化
!!! compatibility "`X`版本兼容性"

Nebula Graph {{ nebula.release }} 与 历史版本 (包括 Nebula Graph 1.x 和 2.0-RC) 的数据格式、客户端通信协议均**双向不兼容**。
数据格式升级参见[升级 Nebula Graph 历史版本至 v2.0.0](../4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-graph-to-200.md)。
数据格式升级参见[升级 Nebula Graph 历史版本至 v2.0.0](../4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-graph-to-250.md)。
客户端与工具均需要[下载对应版本](../20.appendix/6.eco-tool-version.md)。

!!! compatibility "`Y`版本兼容性"
Expand Down Expand Up @@ -145,7 +145,8 @@ Storage服务在毫秒级时间内多次收到插入或者更新同一点或边

报错原因通常为Graph服务向Storage服务请求了过多的数据,导致Storage服务超时。请尝试以下解决方案:

* [修改配置文件](../5.configurations-and-logs/1.configurations/3.graph-config.md): 在`nebula-graphd.conf`文件中修改`--storage_client_timeout_ms`参数的值,以增加Storage client的连接超时时间。该值的单位为毫秒(ms)。例如,设置`--storage_client_timeout_ms=60000`。如果`nebula-graphd.conf`文件中未配置该参数,请手动增加。提示:请在配置文件开头添加--local_config=true再重启服务。
* [修改配置文件](../5.configurations-and-logs/1.configurations/3.graph-config.md): 在`nebula-graphd.conf`文件中修改`--storage_client_timeout_ms`参数的值,以增加Storage client的连接超时时间。该值的单位为毫秒(ms)。例如,设置`--storage_client_timeout_ms=60000`。如果`nebula-graphd.conf`文件中未配置该参数,请手动增加。
<!--提示:请在配置文件开头添加--local_config=true再重启服务。-->
* 优化查询语句:减少全库扫描型的查询,无论是否用`LIMIT`限制了返回结果的数量;用 GO 语句改写 MATCH 语句(前者有优化,后者无优化)。
* 检查Storaged是否发生的 OOM。(`dmesg |grep nebula`)。
* 为 Storage 服务器提供性能更好的SSD或者内存。
Expand All @@ -171,7 +172,8 @@ Storage服务在毫秒级时间内多次收到插入或者更新同一点或边

- 导入数据时,手动[compaction](../8.service-tuning/compaction.md),加速读的速度。

- 增加Graph服务与Storage服务的RPC连接超时时间,在`nebula-storaged.conf`文件里面修改`--storage_client_timeout_ms`参数的值。该值的单位为毫秒(ms),默认值为60000毫秒。提示:请在配置文件开头添加--local_config=true再重启服务。
- 增加Graph服务与Storage服务的RPC连接超时时间,在`nebula-storaged.conf`文件里面修改`--storage_client_timeout_ms`参数的值。该值的单位为毫秒(ms),默认值为60000毫秒。
<!--提示:请在配置文件开头添加--local_config=true再重启服务。-->

### 如何处理`nebula-storaged.INFO`错误日志`MetaClient.cpp:65] Heartbeat failed, status:Wrong cluster!`或者 `nebula-metad.INFO`含有错误日志`HBProcessor.cpp:54] Reject wrong cluster host "x.x.x.x":9771!`

Expand Down
Loading

0 comments on commit 1b6d148

Please sign in to comment.