diff --git a/docs-2.0/2.quickstart/0.FAQ.md b/docs-2.0/2.quickstart/0.FAQ.md new file mode 100644 index 0000000000..ad285e6656 --- /dev/null +++ b/docs-2.0/2.quickstart/0.FAQ.md @@ -0,0 +1,103 @@ +# 常见问题FAQ + +## 关于openCypher兼容性 + +### nGQL兼容openCypher 9吗? + +nGQL部分兼容openCypher 9。 + +在[Nebula Graph Issues](https://github.com/vesoft-inc/nebula-graph/issues)中已经列出已知的不兼容项。如果您发现这种类型的新问题,请提交问题并附带`incompatible`标签。您可以通过关键字`compatibility`搜索兼容性问题。 + +下面是nGQL和openCypher 9的主要差异(由于设计原因而不兼容)。 + +|类别| openCypher 9 | nGQL | +| :--- | :--- |:--- | +|Schema| 弱Schema | 强Schema | +|相等运算符| `=` | `==` | +|数学求幂| `^` | 使用`pow(x, y)`替代`^` | +|边rank| 无此概念 | 用`@rank`设置 | +|语句|-|不支持openCypher 9的所有DML语句(`CREATE`、`MERGE`等)和部分`MATCH`语句。 | + +>**说明**:请注意[openCypher 9](http://www.opencypher.org/)和[Cypher](https://neo4j.com/developer/cypher/)在语法和许可上有一些不同。例如Cypher要求所有Cypher语句必须显式地在一个事务中执行,而openCypher没有这样的要求。另外,nGQL暂不支持事务。 + +### 哪里可以找到更多nGQL的示例? + +您可以在Nebula Graph GitHub的[features](https://github.com/vesoft-inc/nebula-graph/tree/master/tests/tck/features)目录内查看超过2500条nGQL示例。 + +features目录内包含很多.features格式的文件,每个文件都记录了使用nGQL的场景和示例。例如: + +```text +Feature: Match seek by tag + + Background: Prepare space + Given a graph with space named "nba" + + Scenario: seek by empty tag index + When executing query: + """ + MATCH (v:bachelor) + RETURN id(v) AS vid + """ + Then the result should be, in any order: + | vid | + | 'Tim Duncan' | + And no side effects + When executing query: + """ + MATCH (v:bachelor) + RETURN id(v) AS vid, v.age AS age + """ + Then the result should be, in any order: + | vid | age | + | 'Tim Duncan' | 42 | + And no side effects +``` + +示例中的关键字说明如下。 + +|关键字|说明| +|:---|:---| +|`Feature`|描述当前文档的主题。| +|`Background`|描述当前文档的背景信息。| +|`Given`|描述执行示例语句的前提条件。| +|`Scenario`|描述具体场景。如果场景之前有`@skip`标识,表示这个场景下示例语句可能无法正常工作,请不要在生产环境中使用该示例语句。| +|`When`|描述要执行的nGQL示例语句。| +|`Then`|描述执行`When`内语句的预期返回结果。如果您的返回结果和文档不同,请提交[issue](https://github.com/vesoft-inc/nebula-graph/issues)通知Nebula Graph团队。| +|`And`|描述执行`When`内语句的副作用。| +| `@skip` | 跳过这个示例。通常表示测试代码还没有准备好。 | + +欢迎您[增加更多实用场景示例](https://docs.nebula-graph.io/1.1/manual-EN/4.contributions/how-to-contribute/),成为Nebula Graph贡献者。 + +## 关于程序执行 + +### 返回消息中`time spent`的含义是什么? + +将命令`SHOW SPACES`返回的消息作为示例: + +```nGQL +nebula> SHOW SPACES; ++------+ +| Name | ++------+ +| nba | ++------+ +Got 1 rows (time spent 1235/1934 us) +``` + +- 第一个数字`1235`表示数据库本身执行该命令花费的时间,即查询引擎从客户端接收到一个查询,然后从存储服务器获取数据并执行一系列计算所花费的时间。 + +- 第二个数字`1934`表示从客户端角度看所花费的时间,即从客户端发送请求、接收结果,然后在屏幕上显示结果所花费的时间。 + +### 可以在`CREATE SPACE`时设置`replica_factor`为偶数(例如设置为2)吗? + +不要这样设置。 + +Storage服务使用Raft协议,为保证可用性,要求出故障的副本数量不能超过一半。 + +如果`replica_factor=2`,当其中一个副本故障时,就会导致系统无法工作;如果`replica_factor=4`,只能有一个副本可以出现故障,这和`replica_factor=3`是一样。以此类推,所以`replica_factor`设置为奇数即可。 + +建议您在生产环境中设置`replica_factor=3`,测试环境中设置`replica_factor=1`,不要使用偶数。 + +### 如何处理报错`[ERROR (-7)]: SyntaxError: syntax error near`? + +大部分情况下,查询语句需要有`YIELD`或`RETURN`,请检查您的查询语句是否包含。 diff --git a/docs-2.0/2.quickstart/1.quick-start-workflow.md b/docs-2.0/2.quickstart/1.quick-start-workflow.md new file mode 100644 index 0000000000..5804c33460 --- /dev/null +++ b/docs-2.0/2.quickstart/1.quick-start-workflow.md @@ -0,0 +1,15 @@ +# 快速入门 + +快速入门将介绍如何简单地使用Nebula Graph,包括部署、连接Nebula Graph,以及基础的增删改查操作。 + +1. [Docker Compose部署Nebula Graph](2.deploy-nebula-graph-with-docker-compose.md) + +2. [连接Nebula Graph](3.connect-to-nebula-graph.md) + +3. [基础操作语法](4.nebula-graph-crud.md) + +以下是其他推荐您阅读的文档。在您尝试过快速入门的操作后,您可能会需要阅读它们来进一步了解和使用Nebula Graph。 + +- [常见问题FAQ](./0.FAQ.md) +- 部署Nebula Graph集群 (TODO: doc) +- [Compaction](../8.service-tuning/compaction.md) diff --git a/docs-2.0/2.quickstart/2.deploy-nebula-graph-with-docker-compose.md b/docs-2.0/2.quickstart/2.deploy-nebula-graph-with-docker-compose.md new file mode 100644 index 0000000000..a3782f84a4 --- /dev/null +++ b/docs-2.0/2.quickstart/2.deploy-nebula-graph-with-docker-compose.md @@ -0,0 +1,262 @@ +# Docker Compose部署Nebula Graph + +有多种方式可以部署Nebula Graph,但是使用Docker Compose通常是最快的方式。 + +## 阅读指南 + +如果您是带着如下问题阅读本文,可以直接单击问题跳转查看对应的说明。 + +- [部署Nebula Graph之前需要做什么准备工作?](#前提条件) + +- [如何通过Docker Compose快速部署Nebula Graph?](#部署和连接Nebula_Graph) + +- [如何检查Nebula Graph服务的状态和端口?](#查看Nebula_Graph服务的状态和端口) + +- [如何检查Nebula Graph服务的数据和日志?](#查看Nebula_Graph服务的数据和日志) + +- [如何停止Nebula Graph服务?](#停止Nebula_Graph服务) + +- [如何通过其他方式部署Nebula Graph?](#相关文档) + +## 前提条件 + +- 主机上安装如下应用程序。 + + | 应用程序 | 推荐版本 | 官方安装参考 | + |:---|:---|:---| + |Docker|最新版本|[Install Docker Engine](https://docs.docker.com/engine/install/) | + |Docker Compose|最新版本|[Install Docker Compose](https://docs.docker.com/compose/install/)| + |Git|最新版本|[Download Git](https://git-scm.com/download/)| + +- 如果您使用非root用户部署Nebula Graph,请授权该用户Docker相关的权限。详细信息,请参见[Manage Docker as a non-root user](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user)。 + +- 启动主机上的Docker服务。 + +- 如果您已经通过Docker Compose在主机上部署了另一个版本的Nebula Graph,为避免兼容性问题,需要您删除目录`nebula-docker-compose/data`。 + + >**说明**:如果您需要备份服务数据,请参见[使用BR备份数据](../7.data-security/2.backup-restore/3.br-backup-data.md) 。 + +## 部署和连接Nebula Graph + +1. 通过Git克隆`nebula-docker-compose`仓库的`master`分支到您的主机。 + + >**禁止**:`master`分支包含最新的Nebula Graph开发版本的Docker Compose解决方案。请**不要**在生产环境使用此版本。 + + ```bash + $ git clone https://github.com/vesoft-inc/nebula-docker-compose.git + ``` + +2. 切换至目录`nebula-docker-compose`。 + + ```bash + $ cd nebula-docker-compose/ + ``` + +3. 执行如下命令启动Nebula Graph服务。 + + >**说明**: 如果长期未更新镜像,请先更新[Nebula Graph镜像](#如何升级nebula-graph)和[Nebula Console镜像](#如何更新nebula-console)。 + + ```bash + nebula-docker-compose]$ docker-compose up -d + Creating nebula-docker-compose_metad0_1 ... done + Creating nebula-docker-compose_metad2_1 ... done + Creating nebula-docker-compose_metad1_1 ... done + Creating nebula-docker-compose_graphd2_1 ... done + Creating nebula-docker-compose_graphd_1 ... done + Creating nebula-docker-compose_graphd1_1 ... done + Creating nebula-docker-compose_storaged0_1 ... done + Creating nebula-docker-compose_storaged2_1 ... done + Creating nebula-docker-compose_storaged1_1 ... done + ``` + + >**说明**: 上述服务的更多信息,请参见[架构总览](../1.introduction/3.nebula-graph-architecture/1.architecture-overview.md)。 + +4. 连接Nebula Graph。 + + 1. 使用Nebula Console镜像启动一个容器,并连接到Nebula Graph服务所在的网络(nebula-docker-compose_nebula-net)中。 + + ```bash + $ docker run --rm -ti --network nebula-docker-compose_nebula-net --entrypoint=/bin/sh vesoft/nebula-console:v2-nightly + ``` + + >**说明**:您的本地网络可能和示例中的`nebula-docker-compose_nebula-net`不同,请使用如下命令查看。 + + ```bash + $ docker network ls + NETWORK ID NAME DRIVER SCOPE + a74c312b1d16 bridge bridge local + dbfa82505f0e host host local + ed55ccf356ae nebula-docker-compose_nebula-net bridge local + 93ba48b4b288 none null local + ``` + + 1. 通过Nebula Console连接Nebula Graph。 + + ```bash + docker> nebula-console -u user -p password --address=graphd --port=9669 + ``` + + >**说明**:默认情况下,身份认证功能是关闭的,可以使用任意用户名和密码登录。如果想使用身份认证,请参见[身份认证](../7.data-secrurity/1.authentication/1.authentication.md)。 + + 1. 执行如下命令检查`nebula-storaged`进程状态。 + + ```bash + nebula> SHOW HOSTS; + +-------------+------+----------+--------------+----------------------+------------------------+ + | Host | Port | Status | Leader count | Leader distribution | Partition distribution | + +-------------+------+----------+--------------+----------------------+------------------------+ + | "storaged0" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | + +-------------+------+----------+--------------+----------------------+------------------------+ + | "storaged1" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | + +-------------+------+----------+--------------+----------------------+------------------------+ + | "storaged2" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | + +-------------+------+----------+--------------+----------------------+------------------------+ + | "Total" | | | 0 | | | + +-------------+------+----------+--------------+----------------------+------------------------+ + ``` + +5. 执行两次`exit` 可以退出容器。 + +## 查看Nebula Graph服务的状态和端口 + +执行命令`docker-compose ps`可以列出Nebula Graph服务的状态和端口。 + +```bash +$ docker-compose ps +Name Command State Ports +------------------------------------------------------------------------------------------------------------------------------------------------------------------- +nebula-docker-compose_graphd1_1 ./bin/nebula-graphd --flag ... Up (health: starting) 13000/tcp, 13002/tcp, 0.0.0.0:33295->19669/tcp, 0.0.0.0:33291->19670/tcp, + 3699/tcp, 0.0.0.0:33298->9669/tcp +nebula-docker-compose_graphd2_1 ./bin/nebula-graphd --flag ... Up (health: starting) 13000/tcp, 13002/tcp, 0.0.0.0:33285->19669/tcp, 0.0.0.0:33284->19670/tcp, + 3699/tcp, 0.0.0.0:33286->9669/tcp +nebula-docker-compose_graphd_1 ./bin/nebula-graphd --flag ... Up (health: starting) 13000/tcp, 13002/tcp, 0.0.0.0:33288->19669/tcp, 0.0.0.0:33287->19670/tcp, + 3699/tcp, 0.0.0.0:9669->9669/tcp +nebula-docker-compose_metad0_1 ./bin/nebula-metad --flagf ... Up (health: starting) 11000/tcp, 11002/tcp, 0.0.0.0:33276->19559/tcp, 0.0.0.0:33275->19560/tcp, + 45500/tcp, 45501/tcp, 0.0.0.0:33278->9559/tcp +nebula-docker-compose_metad1_1 ./bin/nebula-metad --flagf ... Up (health: starting) 11000/tcp, 11002/tcp, 0.0.0.0:33279->19559/tcp, 0.0.0.0:33277->19560/tcp, + 45500/tcp, 45501/tcp, 0.0.0.0:33281->9559/tcp +nebula-docker-compose_metad2_1 ./bin/nebula-metad --flagf ... Up (health: starting) 11000/tcp, 11002/tcp, 0.0.0.0:33282->19559/tcp, 0.0.0.0:33280->19560/tcp, + 45500/tcp, 45501/tcp, 0.0.0.0:33283->9559/tcp +nebula-docker-compose_storaged0_1 ./bin/nebula-storaged --fl ... Up (health: starting) 12000/tcp, 12002/tcp, 0.0.0.0:33290->19779/tcp, 0.0.0.0:33289->19780/tcp, + 44500/tcp, 44501/tcp, 0.0.0.0:33294->9779/tcp +nebula-docker-compose_storaged1_1 ./bin/nebula-storaged --fl ... Up (health: starting) 12000/tcp, 12002/tcp, 0.0.0.0:33296->19779/tcp, 0.0.0.0:33292->19780/tcp, + 44500/tcp, 44501/tcp, 0.0.0.0:33299->9779/tcp +nebula-docker-compose_storaged2_1 ./bin/nebula-storaged --fl ... Up (health: starting) 12000/tcp, 12002/tcp, 0.0.0.0:33297->19779/tcp, 0.0.0.0:33293->19780/tcp, + 44500/tcp, 44501/tcp, 0.0.0.0:33300->9779/tcp +``` + +Nebula Graph默认使用`9669`端口为客户端提供服务,如果需要修改端口,请修改目录`nebula-docker-compose`内的文件`docker-compose.yaml`,然后重启Nebula Graph服务。 + +## 查看Nebula Graph服务的数据和日志 + +Nebula Graph的所有数据和日志都持久化存储在`nebula-docker-compose/data`和`nebula-docker-compose/logs`目录中。 + +目录的结构如下: + +```text +nebula-docker-compose/ + |-- docker-compose.yaml + ├── data + │   ├── meta0 + │   ├── meta1 + │   ├── meta2 + │   ├── storage0 + │   ├── storage1 + │   └── storage2 + └── logs + ├── graph + ├── graph1 + ├── graph2 + ├── meta0 + ├── meta1 + ├── meta2 + ├── storage0 + ├── storage1 + └── storage2 +``` + +## 停止Nebula Graph服务 + +您可以执行如下命令停止Nebula Graph服务: + +```bash +$ docker-compose down +``` + +如果返回如下信息,表示已经成功停止服务。 + +```bash +Stopping nebula-docker-compose_storaged0_1 ... done +Stopping nebula-docker-compose_graphd1_1 ... done +Stopping nebula-docker-compose_graphd_1 ... done +Stopping nebula-docker-compose_storaged1_1 ... done +Stopping nebula-docker-compose_graphd2_1 ... done +Stopping nebula-docker-compose_storaged2_1 ... done +Stopping nebula-docker-compose_metad0_1 ... done +Stopping nebula-docker-compose_metad2_1 ... done +Stopping nebula-docker-compose_metad1_1 ... done +Removing nebula-docker-compose_storaged0_1 ... done +Removing nebula-docker-compose_graphd1_1 ... done +Removing nebula-docker-compose_graphd_1 ... done +Removing nebula-docker-compose_storaged1_1 ... done +Removing nebula-docker-compose_graphd2_1 ... done +Removing nebula-docker-compose_storaged2_1 ... done +Removing nebula-docker-compose_metad0_1 ... done +Removing nebula-docker-compose_metad2_1 ... done +Removing nebula-docker-compose_metad1_1 ... done +Removing network nebula-docker-compose_nebula-net +``` + +>**说明**:命令`docker-compose down -v`将会**删除**所有本地Nebula Graph的数据。如果您使用的是developing或nightly版本,并且有一些兼容性问题,请尝试这个命令。 + +## 常见问题 + +### 如何更新Nebula Graph服务的Docker镜像? + +在目录`nebula-docker-compose`内执行命令`docker-compose pull`,可以更新Graph服务、Storage服务和Meta服务的镜像。 + +### 执行命令`docker-compose pull`报错`ERROR: toomanyrequests` + +您可能遇到如下错误: + +`ERROR: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit` + +以上错误表示您已达到Docker Hub的速率限制。解决方案请参见[Understanding Docker Hub Rate Limiting](https://www.docker.com/increase-rate-limit)。 + +### 如何更新Nebula Console? + +执行如下命令可以更新Nebula Console客户端镜像。 + +```bash +docker pull vesoft/nebula-console:v2-nightly +``` + +### 如何升级Nebula Graph? + +更新Nebula Graph的Docker镜像并重启服务: + +1. 在目录`nebula-docker-compose`内,执行命令`docker-compose pull`更新Nebula Graph的Docker镜像。 + +2. 执行命令`docker-compose down`停止Nebula Graph服务。 + +3. 执行命令`docker-compose up -d`启动Nebula Graph服务。 + + +### 为什么更新nebula-docker-compose仓库(Nebula Graph 2.0.0-RC)后,无法通过端口`3699`连接Nebula Graph? + +在Nebula Graph 2.0.0-RC版本,默认端口从`3699`改为`9669`。请使用`9669`端口连接,或修改配置文件`docker-compose.yaml`内的端口。 + +### 为什么更新nebula-docker-compose仓库后,无法访问数据?(2021年01月04日) + +如果您在2021年01月04日后更新过nebula-docker-compose仓库,而且之前已经有数据,请修改文件`docker-compose.yaml`,将端口修改为之前使用的端口。详情请参见[修改默认端口](https://github.com/vesoft-inc/nebula-docker-compose/commit/2a612f1c4f0e2c31515e971b24b355b3be69420a)。 + +### 为什么更新nebula-docker-compose仓库后,无法访问数据?(2021年01月27日) + +2021年01月27日修改了数据格式,无法兼容之前的数据,请执行命令`docker-compose down -v`删除所有本地数据。 + +## 相关文档 + +- [使用源码安装部署Nebula Graph](../4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code.md) +- 使用容器安装部署(TODO: doc) +- [使用RPM或DEB安装包安装Nebula Graph](../4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb.md) +- [多种方式连接Nebula Graph](3.connect-to-nebula-graph.md) \ No newline at end of file diff --git a/docs-2.0/2.quickstart/3.connect-to-nebula-graph.md b/docs-2.0/2.quickstart/3.connect-to-nebula-graph.md new file mode 100644 index 0000000000..e45cf749bd --- /dev/null +++ b/docs-2.0/2.quickstart/3.connect-to-nebula-graph.md @@ -0,0 +1,115 @@ +# 连接Nebula Graph + +Nebula Graph支持多种类型客户端,包括CLI客户端、GUI客户端和流行编程语言开发的客户端。本文将概述Nebula Graph客户端,并介绍如何使用原生CLI客户端Ne'bu'la。 + +## Nebula Graph客户端 + +|客户端|介绍|连接方法| +|:---|:---|:---| +| [Nebula Console](https://github.com/vesoft-inc/nebula-console)|Nebula Graph原生CLI客户端|[使用Nebula Console连接Nebula Graph](#使用nebula-console连接nebula-graph) | +| [Nebula Graph Studio](https://github.com/vesoft-inc/nebula-web-docker) | Nebula Graph官方图形界面客户端 | [使用Nebula Graph Studio连接Nebula Graph](https://github.com/vesoft-inc/nebula-web-docker/blob/master/docs/nebula-graph-studio-user-guide-en.md) | +| [nebula-go](https://github.com/vesoft-inc/nebula-go) | Nebula Graph官方GO客户端 | [使用nebula-go连接Nebula Graph](https://github.com/vesoft-inc/nebula-go#usage-example) | +| [nebula-python](https://github.com/vesoft-inc/nebula-python) | Nebula Graph官方Python客户端 | [使用nebula-python连接Nebula Graph](https://github.com/vesoft-inc/nebula-python#how-to-use-nebula-python-in-your-code) | +| [nebula-java](https://github.com/vesoft-inc/nebula-java) | Nebula Graph官方Java客户端 | [使用nebula-java连接Nebula Graph](https://github.com/vesoft-inc/nebula-java#graph-client-example) | + +如果您还没有Nebula Graph数据库,建议您尝试云服务[Nebula Graph Cloud Service](https://cloud.nebula-graph.com.cn/)。Nebula Graph Cloud Service支持按需部署和快速搭建,并且使用Nebula Graph Studio作为默认客户端。 + +## 使用Nebula Console连接Nebula Graph + +### 前提条件 + +- Nebula Graph服务已启动。如何启动服务,请参见[启动和停止Nebula Graph服务](5.start-stop-service.md)。 + +- 运行Nebula Console的机器和运行Nebula Graph的服务器网络互通。 + +### 操作步骤 + +1. 在[nebula-console Releases](https://github.com/vesoft-inc/nebula-console/releases "the nebula-console Releases page")页面,确认需要的版本,单击**Assets**。 + + >**说明**:建议您选择最新版本。 + + ![Select a Nebula Graph version and click **Assets**](https://docs-cdn.nebula-graph.com.cn/docs-2.0/2.quick-start/nebula-console-releases-1.png "Click Assets to show the available Nebula Graph binary files") + +2. 在**Assets**区域找到机器运行所需的二进制文件,下载文件到机器上。 + + ![Click to download the package according to your hardware architecture](https://docs-cdn.nebula-graph.com.cn/docs-2.0/2.quick-start/nebula-console-releases-2-1.png "Click the package name to download it") + +3. (可选)为方便使用,重命名文件为`nebula-console`。 + + >**说明**:在Windows系统中,请重命名为`nebula-console.exe`。 + +4. 在运行Nebula Console的机器上执行如下命令,为用户授予nebula-console文件的执行权限。 + + >**说明**:Windows系统请跳过此步骤。 + + ```bash + $ chmod 111 nebula-console + ``` + +5. 在命令行界面中,切换工作目录至nebula-console文件所在目录。 + +6. 执行如下命令连接Nebula Graph。 + + - Linux或macOS + + ```bash + $ ./nebula-console -addr -port -u -p + [-t 120] [-e "nGQL_statement" | -f filename.nGQL] + ``` + + - Windows + + ```powershell + > nebula-console.exe -addr -port -u -p + [-t 120] [-e "nGQL_statement" | -f filename.nGQL] + ``` + + 参数说明如下。 + + | 参数 | 说明 | + | - | - | + | `-h` | 显示帮助菜单。 | + | `-addr` | 设置要连接的graphd服务的IP地址。默认地址为127.0.0.1。| + | `-port` | 设置要连接的graphd服务的端口。默认端口为9669。| + | `-u/-user` | 设置Nebula Graph账号的用户名。未启用身份认证时,用户名可以填写任意字符。 | + | `-p/-password` | 设置用户名对应的密码。未启用身份认证时,密码可以填写任意字符。 | + | `-t/-timeout` | 设置整数类型的连接超时时间。单位为秒,默认值为120。 | + | `-e/-eval` | 设置字符串类型的nGQL语句。连接成功后会执行一次该语句并返回结果,然后自动断开连接。 | + | `-f/-file` | 设置存储nGQL语句的文件的路径。连接成功后会执行该文件内的nGQL语句并返回结果,执行完毕后自动断开连接。 | + +## Nebula Console导出模式 + +导出模式开启时,Nebula Console会导出所有请求的结果到CSV格式文件中。关闭导出模式会停止导出。使用语法如下: + +>**说明**: +> +> - 命令不区分大小写。 +> - CSV格式文件保存在当前工作目录中,即Linux命令`pwd`显示的目录。 + +- 开启导出模式 + +```ngql +nebula> :SET CSV +``` + +- 关闭导出模式 + +```ngql +nebula> :UNSET CSV +``` + +## 使用Nebula Console断开连接 + +您可以使用`:EXIT`或者`:QUIT`从Nebula Graph断开连接。为方便使用,Nebula Console支持使用不带冒号(:)的小写命令,例如`quit`。 + +```ngql +nebula> :QUIT + +Bye root! +``` + +## 常见问题 + +### 如何通过源码安装Nebula Console? + +下载和编译Nebula Console的最新源码,请参见[GitHub nebula console](https://github.com/vesoft-inc/nebula-console#build-nebula-graph-console)页面的说明。 \ No newline at end of file diff --git a/docs-2.0/2.quickstart/4.nebula-graph-crud.md b/docs-2.0/2.quickstart/4.nebula-graph-crud.md new file mode 100644 index 0000000000..796746d158 --- /dev/null +++ b/docs-2.0/2.quickstart/4.nebula-graph-crud.md @@ -0,0 +1,592 @@ +# 基础操作语法 + +本文介绍Nebula Graph基础操作的语法。 + +## 图空间和Schema + +一个Nebula Graph实例由一个或多个图空间组成。每个图空间都是物理隔离的,您可以在同一个实例中使用不同的图空间存储不同的数据集。 + +![Nebula Graph and graph spaces](https://docs-cdn.nebula-graph.com.cn/docs-2.0/2.quick-start/nebula-graph-instance-and-graph-spaces.png) + +为了在图空间中插入数据,需要为图数据库定义一个Schema。Nebula Graph的Schema是由如下几部分组成。 + +| 组成部分 | 说明| +| :--- | :--- | +| 点(vertex) | 表示现实世界中的实体。一个点可以有一个或多个标签。 | +| 标签(tag) | 点的类型,定义了一组描述点类型的属性。 | +| 边(edge) | 表示两个点之间**有方向**的关系。| +| 边类型(edge type) | 边的类型,定义了一组描述边类型的属性。 | + +更多信息,请参见Nebula Graph Schema(TODO: doc)。 + +本文将使用下图的数据集演示基础操作的语法。 + +![The demo dataset](https://docs-cdn.nebula-graph.com.cn/docs-2.0/2.quick-start/demo-dataset-for-quick-start.png) + +## 检查Nebula Graph集群的机器状态 + +首先建议您检查机器状态,确保所有的Storage服务连接到了Meta服务。执行命令`SHOW HOSTS`查看机器状态。 + +```ngql +nebula> SHOW HOSTS; ++-------------+-----------+-----------+--------------+----------------------+------------------------+ +| Host | Port | Status | Leader count | Leader distribution | Partition distribution | ++-------------+-----------+-----------+--------------+----------------------+------------------------+ +| "storaged0" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | ++-------------+-----------+-----------+--------------+----------------------+------------------------+ +| "storaged1" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | ++-------------+-----------+-----------+--------------+----------------------+------------------------+ +| "storaged2" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | ++-------------+-----------+-----------+--------------+----------------------+------------------------+ +| "Total" | __EMPTY__ | __EMPTY__ | 0 | __EMPTY__ | __EMPTY__ | ++-------------+-----------+-----------+--------------+----------------------+------------------------+ +Got 4 rows (time spent 1061/2251 us) +``` + +在返回结果中,查看**Status**列,可以看到所有Storage服务都在线。 + +### 异步实现创建和修改 + +Nebula Graph中执行如下创建和修改操作,是异步实现的,需要在下一个心跳周期才同步数据。 + +- `CREATE SPACE` +- `CREATE TAG` +- `CREATE EDGE` +- `ALTER TAG` +- `ALTER EDGE` +- `CREATE TAG INDEX` +- `CREATE EDGE INDEX` + +>**说明**:默认心跳周期是10秒。修改心跳周期,请参见调整心跳周期(TODO: doc)。 + +为确保数据同步,后续操作能顺利进行,可采取以下方法之一: + +- 执行`SHOW`或`DESCRIBE`命令检查相应对象的状态,确保创建或修改已完成。如果没有完成,请等待几秒重试。 + +- 等待2个心跳周期(20秒)。 + +## 创建和选择图空间 + +### nGQL语法 + +- 创建图空间 + + ```ngql + CREATE SPACE [(partition_num=, replica_factor=, vid_type=fixed_string())]; + ``` + + | 参数 | 说明 | + | :--- | :--- | + | partition_num | 指定图空间的分片数量。建议设置为5倍的集群硬盘数量。例如集群中有3个硬盘,建议设置15个分片。 | + | replica_factor | 指定每个分片的副本数量。建议在生产环境中设置为3,在测试环境中设置为1。由于需要进行基于quorum的选举,副本数量必须是**奇数**。 | + |vid_type | 为了插入字符串类型的VID,需要设置VID的最大长度。`fixed_string`默认值为8,建议小于64。`fixed_string`类似SQL中的`char(N)`。 | + +- 列出创建成功的图空间 + + ```ngql + nebula> SHOW SPACES; + ``` + +- 选择数据库 + + ```ngql + USE ; + ``` + +### 示例 + +1. 执行如下语句创建名为`nba`的图空间。 + + ```ngql + nebula> CREATE SPACE nba(partition_num=15, replica_factor=1, vid_type=fixed_string(30)); + Execution succeeded (time spent 2817/3280 us) + ``` + +2. 执行命令`SHOW HOSTS`检查分片的分布情况,确保平衡分布。 + + ```ngql + nebula> SHOW HOSTS; + +-------------+-----------+-----------+--------------+---------------------+------------------------+ + | Host | Port | Status | Leader count | Leader distribution | Partition distribution | + +-------------+-----------+-----------+--------------+---------------------+------------------------+ + | "storaged0" | 9779 | "ONLINE" | 5 | "nba:5" | "nba:5" | + +-------------+-----------+-----------+--------------+---------------------+------------------------+ + | "storaged1" | 9779 | "ONLINE" | 5 | "nba:5" | "nba:5" | + +-------------+-----------+-----------+--------------+---------------------+------------------------+ + | "storaged2" | 9779 | "ONLINE" | 5 | "nba:5" | "nba:5" | + +-------------+-----------+-----------+--------------+---------------------+------------------------+ + | "Total" | __EMPTY__ | __EMPTY__ | 15 | "nba:15" | "nba:15" | + +-------------+-----------+-----------+--------------+---------------------+------------------------+ + Got 4 rows (time spent 1633/2867 us) + ``` + + 如果**Leader distribution**分布不均匀,请执行命令`BALANCE LEADER`重新分配。更多信息,请参见BALANCE(TODO: doc)。 + +3. 选择图空间`nba`。 + + ```ngql + nebula[(none)]> USE nba; + Execution succeeded (time spent 1229/2318 us) + ``` + + 您可以执行命令`SHOW SPACES`查看创建的图空间。 + + ```ngql + nebula> SHOW SPACES; + +-------+ + | Name | + +-------+ + | "nba" | + +-------+ + Got 1 rows (time spent 977/2000 us) + ``` + +## 创建标签和边类型 + +### nGQL语法 + +```ngql +CREATE {TAG | EDGE} { | }( +[, ...]); +``` + +### 示例 + +创建标签`player`和`team`,以及边类型`follow`和`serve`。说明如下表。 + +| 名称 | 类型 | 属性 | +| :--- | :--- | :--- | +| player | Tag | name (string), age (int) | +| team | Tag | name (string) | +| follow | Edge type | degree (int) | +| serve | Edge type | start_year (int), end_year (int) | + +```ngql +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 +``` + +## 插入点和边 + +您可以使用`INSERT`语句,基于现有的标签插入点,或者基于现有的边类型插入边。 + +### nGQL语法 + +- 插入点 + + ```ngql + INSERT VERTEX ([, ...]) + [, ([, ...]), ...] + {VALUES | VALUE} : ([, ...]) + [, : ([, ...]; + ``` + + `VID`是Vertex ID的缩写,`VID`在一个图空间中是唯一的。 + +- 插入边 + + ```ngql + INSERT EDGE ([, ...]) + {VALUES | VALUE} -> [@] : ([, ...]) + [, -> [@ : ([, ...]), ...]; + ``` + +### 示例 + +- 插入代表NBA球员和球队的点。 + + ```ngql + 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 + ``` + +- 插入代表NBA球员和球队之间关系的边。 + + ```ngql + 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 + ``` + +## 查询数据 + +- [GO](../3.ngql-guide/7.general-query-statements/3.go.md)语句可以根据指定的条件遍历数据库。`GO`语句从一个或多个点开始,沿着一条或多条边遍历,返回`YIELD`子句中指定的信息。 + +- [FETCH](../3.ngql-guide/7.general-query-statements/4.fetch.md)语句可以获得点或边的属性。 + +- [LOOKUP](../3.ngql-guide/7.general-query-statements/5.lookup.md)语句是基于[索引](#索引)的,和`WHERE`子句一起使用,查找符合特定条件的数据。 + +- [MATCH](../3ngql-guide/../3.ngql-guide/7.general-query-statements/2.match.md)语句是查询图数据最常用的,但是它依赖[索引](#索引)去匹配Nebula Graph中的数据模型。 + +### nGQL语法 + +- `GO` + + ```ngql + GO [[ TO] STEPS ] FROM + OVER [REVERSELY] [BIDIRECT] + [WHERE [AND | OR expression ...])] + YIELD [DISTINCT] + ``` + +- `FETCH` + + - 查询标签属性 + + ```ngql + FETCH PROP ON { | | *} + [YIELD [DISTINCT] ] + ``` + + - 查询边属性 + + ```ngql + FETCH PROP ON -> [@] + [, -> ...] + [YIELD [DISTINCT] ] + ``` + +- `LOOKUP` + + ```ngql + LOOKUP ON { | } + WHERE [AND expression ...])] + [YIELD ] + ``` + +- `MATCH` + + ```nGQL + MATCH [] RETURN + ``` + +### `GO`语句示例 + +- 从VID为`player100`的球员开始,沿着边`follow`找到连接的球员。 + + ```ngql + nebula> GO FROM "player100" OVER follow; + +-------------+ + | follow._dst | + +-------------+ + | "player101" | + +-------------+ + | "player102" | + +-------------+ + Got 2 rows (time spent 12097/14220 us) + ``` + +- 从VID为`player100`的球员开始,沿着边`follow`查找年龄大于或等于35岁的球员,并返回他们的姓名和年龄,同时重命名对应的列。 + + ```ngql + nebula> GO FROM "player100" OVER follow WHERE $$.player.age >= 35 \ + -> YIELD $$.player.name AS Teammate, $$.player.age AS Age; + +---------------+-----+ + | Teammate | Age | + +---------------+-----+ + | "Tony Parker" | 36 | + +---------------+-----+ + Got 1 rows (time spent 8206/9335 us) + ``` + + |子句/符号|说明| + |:---|:---| + |`YIELD`|指定该查询需要返回的值或结果。| + |`$$`|表示边的终点。| + |`\`|表示换行继续输入。| + +- 从VID为`player100`的球员开始,沿着边`follow`查找连接的球员,然后检索这些球员的球队。为了合并这两个查询请求,可以使用管道符或临时变量。 + + - 使用管道符 + + ```ngql + nebula> GO FROM "player100" OVER follow YIELD follow._dst AS id | \ + GO FROM $-.id OVER serve YIELD $$.team.name AS Team, \ + $^.player.name AS Player; + +-----------+---------------+ + | Team | Player | + +-----------+---------------+ + | "Nuggets" | "Tony Parker" | + +-----------+---------------+ + Got 1 rows (time spent 5055/8203 us) + ``` + + |子句/符号|说明| + |:---|:---| + | `$^` |表示边的起点。| + | `\|` |组合多个查询的管道符,将前一个查询的结果集用于后一个查询。| + | `$-` |表示管道符前面的查询输出的结果集。| + + - 使用临时变量 + + >**说明**:当复合语句作为一个整体提交给服务器时,其中的临时变量会在语句结束时被释放。 + + ```ngql + nebula> $var = GO FROM "player100" OVER follow YIELD follow._dst AS id; \ + GO FROM $var.id OVER serve YIELD $$.team.name AS Team, \ + $^.player.name AS Player; + +---------+-------------+ + | Team | Player | + +---------+-------------+ + | Nuggets | Tony Parker | + +---------+-------------+ + Got 1 rows (time spent 3103/3711 us) + ``` + +### `FETCH`语句示例 + +查询VID为`player100`的球员的属性。 + +```ngql +nebula> FETCH PROP ON player "player100"; ++----------------------------------------------------+ +| vertices_ | ++----------------------------------------------------+ +| ("player100" :player{age: 42, name: "Tim Duncan"}) | ++----------------------------------------------------+ +Got 1 rows (time spent 2006/2406 us) +``` + +>**说明**:`LOOKUP`和`MATCH`的示例在下文的[索引](#索引)部分查看。 + +## 修改点和边 + +您可以使用`UPDATE`语句或`UPSERT`语句修改现有数据。 + +`UPSERT`是`UPDATE`和`INSERT`的结合体。当您使用`UPSERT`更新一个点或边,如果它不存在,数据库会自动插入一个新的点或边。 + +>**说明**:`UPSERT`操作是基于Nebula Graph的分区进行串行操作,所以执行速度比单独执行`INSERT`或`UPDATE`慢。 + +### nGQL语法 + +- `UPDATE`点 + + ```ngql + UPDATE VERTEX SET + [WHEN ] [YIELD ] + ``` + +- `UPDATE`边 + + ```ngql + UPDATE EDGE -> [@rank] OF + SET [WHEN ] [YIELD ] + ``` + +- `UPSERT`点或边 + + ```ngql + UPSERT {VERTEX | EDGE } SET + [WHEN ] [YIELD ] + ``` + +### 示例 + +- 用`UPDATE`修改VID为`player100`的球员的`name`属性,然后用`FETCH`语句检查结果。 + + ```ngql + 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_ | + +---------------------------------------------+ + | ("player100" :player{age: 42, name: "Tim"}) | + +---------------------------------------------+ + Got 1 rows (time spent 2463/3042 us) + ``` + +- 用`UPDATE`修改某条边的`degree`属性,然后用`FETCH`检查结果。 + + ```ngql + nebula> UPDATE EDGE "player100" -> "player101" OF follow SET degree = 96; + Execution succeeded (time spent 3932/4432 us) + + nebula> FETCH PROP ON follow "player100" -> "player101"; + +----------------------------------------------------+ + | edges_ | + +----------------------------------------------------+ + | [:follow "player100"->"player101" @0 {degree: 96}] | + +----------------------------------------------------+ + Got 1 rows (time spent 2205/2800 us) + ``` + +- 用`UPSERT`插入一个VID为`player111`的点。 + + ```ngql + nebula> INSERT VERTEX player(name, age) VALUES "player111":("Ben Simmons", 22); + Execution succeeded (time spent 2115/2900 us) + + Wed, 21 Oct 2020 11:11:50 UTC + + nebula> UPSERT VERTEX "player111" SET player.name = "Dwight Howard", player.age = $^.player.age + 11 \ + WHEN $^.player.name == "Ben Simmons" AND $^.player.age > 20 \ + YIELD $^.player.name AS Name, $^.player.age AS Age; + +---------------+-----+ + | Name | Age | + +---------------+-----+ + | Dwight Howard | 33 | + +---------------+-----+ + Got 1 rows (time spent 1815/2329 us) + ``` + +## 删除点和边 + +### nGQL语法 + +- 删除点 + + ```ngql + DELETE VERTEX [, ...] + ``` + +- 删除边 + + ```ngql + DELETE EDGE -> [@] + [, -> ...] + ``` + +### 示例 + +- 删除点 + + ```ngql + nebula> DELETE VERTEX "team1", "team2"; + Execution succeeded (time spent 4337/4782 us) + ``` + +- 删除边 + + ```ngql + nebula> DELETE EDGE follow "team1" -> "team2"; + Execution succeeded (time spent 3700/4101 us) + ``` + +## 索引 + +您可以通过[CREATE INDEX](../3.ngql-guide/14.native-index-statements/1.create-native-index.md)语句为标签(tag)和边类型(edge type)增加索引。 + +### 使用索引必读 + +- `MATCH`和`LOOKUP`语句的执行都依赖索引,但是索引会导致写性能大幅降低(降低90%甚至更多)。请**不要随意**在生产环境中使用索引,除非您很清楚使用索引对业务的影响。 + +- 您**必须**为已存在的数据重建索引,否则不能索引已存在的数据,导致无法在`MATCH`和`LOOKUP`语句中返回这些数据。更多信息,请参见[重建索引](../3.ngql-guide/14.native-index-statements/4.rebuild-native-index.md)。 + +### nGQL语法 + +- 创建索引 + + ```ngql + CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] + ON { | } (prop_name_list); + ``` + +- 重建索引 + + ```ngql + REBUILD {TAG | EDGE} INDEX + ``` + +### 示例 + +为标签`player`的属性`name`创建索引,并且重建索引。 + +```ngql +nebula> CREATE TAG INDEX player_index_0 on player(name(20)); +nebula> REBUILD TAG INDEX player_index_0; +``` + +>**说明**:为没有指定长度的变量属性创建索引时,需要指定索引长度。详细信息,请参见[创建索引](../3.ngql-guide/14.native-index-statements/1.create-native-index/#create_single-property_indexes)。 + +### 基于索引的`LOOKUP`和`MATCH`示例 + +确保`LOOKUP`或`MATCH`有一个索引可用。如果没有,请先创建索引。 + +找到标签为`player`的点的信息,它的`name`属性值为`Tony Parker`。 + +```nGQL +// 为name属性创建索引player_name_0。 +nebula> CREATE TAG INDEX player_name_0 on player(name(10)); +Execution succeeded (time spent 3465/4150 us) + +// 重建索引确保能对已存在数据生效。 +nebula> REBUILD TAG INDEX player_name_0 ++------------+ +| New Job Id | ++------------+ +| 31 | ++------------+ +Got 1 rows (time spent 2379/3033 us) + +// 使用LOOKUP语句检索点的属性。 +nebula> LOOKUP ON player WHERE player.name == "Tony Parker" \ +YIELD player.name, player.age; ++-------------+---------------+------------+ +| VertexID | player.name | player.age | ++-------------+---------------+------------+ +| "player101" | "Tony Parker" | 36 | ++-------------+---------------+------------+ + +// 使用MATCH语句检索点的属性。 +nebula> MATCH (v:player{name:"Tony Parker"}) RETURN v; ++-----------------------------------------------------+ +| v | ++-----------------------------------------------------+ +| ("player101" :player{age: 36, name: "Tony Parker"}) | ++-----------------------------------------------------+ +Got 1 rows (time spent 5132/6246 us) +``` \ No newline at end of file diff --git a/docs-2.0/2.quickstart/5.start-stop-service.md b/docs-2.0/2.quickstart/5.start-stop-service.md new file mode 100644 index 0000000000..ce1b44b74a --- /dev/null +++ b/docs-2.0/2.quickstart/5.start-stop-service.md @@ -0,0 +1,174 @@ +# 启动和停止Nebula Graph服务 + +## 启动Nebula Graph服务 + +### 非容器部署 + + 执行如下命令启动Nebula Graph服务: + + ```bash + sudo /usr/local/nebula/scripts/nebula.service start all + [INFO] Starting nebula-metad... + [INFO] Done + [INFO] Starting nebula-graphd... + [INFO] Done + [INFO] Starting nebula-storaged... + [INFO] Done + ``` + + `/usr/local/nebula`是Nebula Graph的默认安装路径,如果修改过安装路径,请使用实际路径。 + +### 容器部署 + + 在`nebula-docker-compose`目录内执行如下命令启动Nebula Graph服务: + + ```bash + nebula-docker-compose]$ docker-compose up -d + Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/ + Creating network "nebula-docker-compose_nebula-net" with the default driver + Creating nebula-docker-compose_metad0_1 ... done + Creating nebula-docker-compose_metad2_1 ... done + Creating nebula-docker-compose_metad1_1 ... done + Creating nebula-docker-compose_storaged2_1 ... done + Creating nebula-docker-compose_graphd1_1 ... done + Creating nebula-docker-compose_storaged1_1 ... done + Creating nebula-docker-compose_storaged0_1 ... done + Creating nebula-docker-compose_graphd2_1 ... done + Creating nebula-docker-compose_graphd_1 ... done + ``` + +## 停止Nebula Graph服务 + +>**注意**:请勿使用`kill -9` 命令强制终止进程,否则可能较小概率出现数据丢失。 + +### 非容器部署 + + 执行如下命令停止Nebula Graph服务: + + ```bash + sudo /usr/local/nebula/scripts/nebula.service stop all + [INFO] Stopping nebula-metad... + [INFO] Done + [INFO] Stopping nebula-graphd... + [INFO] Done + [INFO] Stopping nebula-storaged... + [INFO] Done + ``` + + `/usr/local/nebula`是Nebula Graph的默认安装路径,如果修改过安装路径,请使用实际路径。 + +### 容器部署 + + 在`nebula-docker-compose`目录内执行如下命令停止Nebula Graph服务: + + ```bash + nebula-docker-compose]$ docker-compose down + Stopping nebula-docker-compose_graphd_1 ... done + Stopping nebula-docker-compose_graphd2_1 ... done + Stopping nebula-docker-compose_storaged0_1 ... done + Stopping nebula-docker-compose_storaged1_1 ... done + Stopping nebula-docker-compose_graphd1_1 ... done + Stopping nebula-docker-compose_storaged2_1 ... done + Stopping nebula-docker-compose_metad1_1 ... done + Stopping nebula-docker-compose_metad2_1 ... done + Stopping nebula-docker-compose_metad0_1 ... done + Removing nebula-docker-compose_graphd_1 ... done + Removing nebula-docker-compose_graphd2_1 ... done + Removing nebula-docker-compose_storaged0_1 ... done + Removing nebula-docker-compose_storaged1_1 ... done + Removing nebula-docker-compose_graphd1_1 ... done + Removing nebula-docker-compose_storaged2_1 ... done + Removing nebula-docker-compose_metad1_1 ... done + Removing nebula-docker-compose_metad2_1 ... done + Removing nebula-docker-compose_metad0_1 ... done + Removing network nebula-docker-compose_nebula-net + ``` + + >**说明**:命令`docker-compose down -v`将会**删除**所有本地Nebula Graph的数据。如果您使用的是developing或nightly版本,并且有一些兼容性问题,请尝试这个命令。 + +## 查看Nebula Graph服务 + +### 非容器部署 + + 执行如下命令查看Nebula Graph服务状态: + + ```bash + $ sudo /usr/local/nebula/scripts/nebula.service status all + ``` + + `/usr/local/nebula`是Nebula Graph的默认安装路径,如果修改过安装路径,请使用实际路径。 + + - 如果返回如下结果,表示Nebula Graph服务正常运行。 + + ```bash + [INFO] nebula-metad: Running as 26601, Listening on 9559 + [INFO] nebula-graphd: Running as 26644, Listening on 9669 + [INFO] nebula-storaged: Running as 26709, Listening on 9779 + ``` + + - 如果返回类似如下结果,表示Nebula Graph服务异常,可以根据异常的服务进一步排查。 + + ```bash + [INFO] nebula-metad: Running as 25600, Listening on 9559 + [INFO] nebula-graphd: Exited + [INFO] nebula-storaged: Running as 25646, Listening on 9779 + ``` + + Nebula Graph服务由Meta服务、Graph服务和Storage服务共同提供,这三种服务的配置文件都保存在安装目录的`etc`目录内,默认路径为`/usr/local/nebula/etc`,您可以检查相应的配置文件排查问题。 + +### 容器部署 + + 在`nebula-docker-compose`目录内执行如下命令查看Nebula Graph服务状态: + + ```bash + nebula-docker-compose]$ docker-compose ps + Name Command State Ports + --------------------------------------------------------------------------------------------------------------------------------------------------------------------- + nebula-docker-compose_graphd1_1 /usr/local/nebula/bin/nebu ... Up (healthy) 0.0.0.0:49223->19669/tcp, 0.0.0.0:49222->19670/tcp, 0.0.0.0:49224->9669/tcp + nebula-docker-compose_graphd2_1 /usr/local/nebula/bin/nebu ... Up (healthy) 0.0.0.0:49229->19669/tcp, 0.0.0.0:49228->19670/tcp, 0.0.0.0:49230->9669/tcp + nebula-docker-compose_graphd_1 /usr/local/nebula/bin/nebu ... Up (healthy) 0.0.0.0:49221->19669/tcp, 0.0.0.0:49220->19670/tcp, 0.0.0.0:9669->9669/tcp + nebula-docker-compose_metad0_1 ./bin/nebula-metad --flagf ... Up (healthy) 0.0.0.0:49212->19559/tcp, 0.0.0.0:49211->19560/tcp, 0.0.0.0:49213->9559/tcp, + 9560/tcp + nebula-docker-compose_metad1_1 ./bin/nebula-metad --flagf ... Up (healthy) 0.0.0.0:49209->19559/tcp, 0.0.0.0:49208->19560/tcp, 0.0.0.0:49210->9559/tcp, + 9560/tcp + nebula-docker-compose_metad2_1 ./bin/nebula-metad --flagf ... Up (healthy) 0.0.0.0:49206->19559/tcp, 0.0.0.0:49205->19560/tcp, 0.0.0.0:49207->9559/tcp, + 9560/tcp + nebula-docker-compose_storaged0_1 ./bin/nebula-storaged --fl ... Up (healthy) 0.0.0.0:49218->19779/tcp, 0.0.0.0:49217->19780/tcp, 9777/tcp, 9778/tcp, + 0.0.0.0:49219->9779/tcp, 9780/tcp + nebula-docker-compose_storaged1_1 ./bin/nebula-storaged --fl ... Up (healthy) 0.0.0.0:49215->19779/tcp, 0.0.0.0:49214->19780/tcp, 9777/tcp, 9778/tcp, + 0.0.0.0:49216->9779/tcp, 9780/tcp + nebula-docker-compose_storaged2_1 ./bin/nebula-storaged --fl ... Up (healthy) 0.0.0.0:49226->19779/tcp, 0.0.0.0:49225->19780/tcp, 9777/tcp, 9778/tcp, + 0.0.0.0:49227->9779/tcp, 9780/tcp + ``` + + 如果服务有异常,您可以先确认异常的容器名称(例如`nebula-docker-compose_graphd2_1`),然后执行`docker ps`查看对应的`CONTAINER ID`(示例为`2a6c56c405f5`),最后登录容器排查问题。 + + ```bash + nebula-docker-compose]$ docker ps + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + 2a6c56c405f5 vesoft/nebula-graphd:v2-nightly "/usr/local/nebula/b…" 36 minutes ago Up 36 minutes (healthy) 0.0.0.0:49230->9669/tcp, 0.0.0.0:49229->19669/tcp, 0.0.0.0:49228->19670/tcp nebula-docker-compose_graphd2_1 + 7042e0a8e83d vesoft/nebula-storaged:v2-nightly "./bin/nebula-storag…" 36 minutes ago Up 36 minutes (healthy) 9777-9778/tcp, 9780/tcp, 0.0.0.0:49227->9779/tcp, 0.0.0.0:49226->19779/tcp, 0.0.0.0:49225->19780/tcp nebula-docker-compose_storaged2_1 + 18e3ea63ad65 vesoft/nebula-storaged:v2-nightly "./bin/nebula-storag…" 36 minutes ago Up 36 minutes (healthy) 9777-9778/tcp, 9780/tcp, 0.0.0.0:49219->9779/tcp, 0.0.0.0:49218->19779/tcp, 0.0.0.0:49217->19780/tcp nebula-docker-compose_storaged0_1 + 4dcabfe8677a vesoft/nebula-graphd:v2-nightly "/usr/local/nebula/b…" 36 minutes ago Up 36 minutes (healthy) 0.0.0.0:49224->9669/tcp, 0.0.0.0:49223->19669/tcp, 0.0.0.0:49222->19670/tcp nebula-docker-compose_graphd1_1 + a74054c6ae25 vesoft/nebula-graphd:v2-nightly "/usr/local/nebula/b…" 36 minutes ago Up 36 minutes (healthy) 0.0.0.0:9669->9669/tcp, 0.0.0.0:49221->19669/tcp, 0.0.0.0:49220->19670/tcp nebula-docker-compose_graphd_1 + 880025a3858c vesoft/nebula-storaged:v2-nightly "./bin/nebula-storag…" 36 minutes ago Up 36 minutes (healthy) 9777-9778/tcp, 9780/tcp, 0.0.0.0:49216->9779/tcp, 0.0.0.0:49215->19779/tcp, 0.0.0.0:49214->19780/tcp nebula-docker-compose_storaged1_1 + 45736a32a23a vesoft/nebula-metad:v2-nightly "./bin/nebula-metad …" 36 minutes ago Up 36 minutes (healthy) 9560/tcp, 0.0.0.0:49213->9559/tcp, 0.0.0.0:49212->19559/tcp, 0.0.0.0:49211->19560/tcp nebula-docker-compose_metad0_1 + 3b2c90eb073e vesoft/nebula-metad:v2-nightly "./bin/nebula-metad …" 36 minutes ago Up 36 minutes (healthy) 9560/tcp, 0.0.0.0:49207->9559/tcp, 0.0.0.0:49206->19559/tcp, 0.0.0.0:49205->19560/tcp nebula-docker-compose_metad2_1 + 7bb31b7a5b3f vesoft/nebula-metad:v2-nightly "./bin/nebula-metad …" 36 minutes ago Up 36 minutes (healthy) 9560/tcp, 0.0.0.0:49210->9559/tcp, 0.0.0.0:49209->19559/tcp, 0.0.0.0:49208->19560/tcp nebula-docker-compose_metad1_1 + + nebula-docker-compose]$ docker exec -it 2a6c56c405f5 bash + [root@2a6c56c405f5 nebula]# + ``` + +## 启动和停止单个服务模块 + +您可以使用脚本`nebula.service`来控制单个模块的启停。 + +```bash +sudo /usr/local/nebula/scripts/nebula.service [-v] [-c ] +``` + +`/usr/local/nebula`是Nebula Graph的默认安装路径,如果修改过安装路径,请使用实际路径。 + +- `-v`:显示详细调试信息。 +- `-c`:指定配置文件路径,默认路径为`/usr/local/nebula/etc`。 \ No newline at end of file