Skip to content

Latest commit

 

History

History
309 lines (236 loc) · 7.86 KB

1.get-started.md

File metadata and controls

309 lines (236 loc) · 7.86 KB

Quick Start

Docker 方式

试用 nebula 最简单的方式是使用 Docker。开始试用前,请确保:

  • 已安装最新版的 Docker
  • Nebula Docker Hub 获取最新的 nebula 镜像。如未获取,请使用如下命令获取:
> docker pull vesoft/nebula-graph:nightly

Docker 集群部署

试用 nebula 集群部署最简单的方式是使用 docker compose。详情参见 nebula docker 部署

启动服务

nebula 镜像下载完成后,运行容器:

> docker run -it vesoft/nebula-graph:nightly /bin/bash

进入容器后,默认在根目录下 / ,切换到 Nebula 主目录:

> cd /usr/local/nebula/

启动 metad,storaged 和 graphd 服务:

> scripts/nebula.service start all

查看服务状态:

> scripts/nebula.service status all

连接 Nebula Graph

> bin/nebula -u=user -p=password
  • -u 为用户名,默认值为 user
  • -p 为密码,用户 user 的默认密码为 password

此外,如果 console (bin/nebula) 与 graphd 不在同台服务器上,你需要指定 graphd 的 ip 和 port

> bin/nebula -u=user -p=password --addr={graphd ip} --port={graphd port}

在部署过程遇到的任何问题,欢迎前往 GitHub 向社区提 issue。

创建图数据

本节介绍如何构建图数据并进行查询。本示例基于下图构建:

image

示例数据有三种类型的标签(coursebuildingstudent),两种类型的边(choosefollow)。

创建图空间

Nebula 中的图存储于 SPACE 中,每个 Space 是一个物理隔离的空间。首先,需要创建一个 Space ,并使用该 Space 以完成之后的操作。

列出已有的 Space:

nebula> SHOW SPACES;

创建一个名为 test 的新 Space:

nebula> CREATE SPACE test(partition_num=1024, replica_factor=1);
-- 使用这个 space
nebula> USE test;
  • replica_factor 用来指定集群副本数。
  • partition_num 用来指定一个副本中的分区数量。

定义图数据 Schema

使用 CREATE TAG 语句定义带有标签类型和属性列表的标签:

nebula> CREATE TAG course(name string, credits int);
nebula> CREATE TAG building(name string);
nebula> CREATE TAG student(name string, age int, gender string);

使用 CREATE EDGE 语句定义边类型:

nebula> CREATE EDGE follow(likeness double);
nebula> CREATE EDGE choose(grade int);

查看上述创建的标签和边类型:

-- 查看标签列表
nebula> SHOW TAGS;
============
| Name     |
============
| building |
------------
| course   |
------------
| student  |
------------
-- 查看边类型列表
nebula> SHOW EDGES;
==========
| Name   |
==========
| choose |
----------
| follow |
----------

查看标签或边类型的属性:

-- 查看标签的属性
nebula> DESCRIBE TAG student;
===================
| Field  | Type   |
===================
| name   | string |
-------------------
| age    | int    |
-------------------
| gender | string |
-------------------
-- 查看边类型的属性
nebula> DESCRIBE EDGE follow;
=====================
| Field    | Type   |
=====================
| likeness | double |
---------------------

插入数据

根据上图,插入相应的点和边:

-- 插入点
nebula> INSERT VERTEX student(name, age, gender) VALUES 200:("Monica", 16, "female");
nebula> INSERT VERTEX student(name, age, gender) VALUES 201:("Mike", 18, "male");
nebula> INSERT VERTEX student(name, age, gender) VALUES 202:("Jane", 17, "female");
nebula> INSERT VERTEX course(name, credits),building(name) VALUES 101:("Math", 3, "No5");
nebula> INSERT VERTEX course(name, credits),building(name) VALUES 102:("English", 6, "No11");

-- 插入边
nebula> INSERT EDGE choose(grade) VALUES 200 -> 101:(5);
nebula> INSERT EDGE choose(grade) VALUES 200 -> 102:(3);
nebula> INSERT EDGE choose(grade) VALUES 201 -> 102:(3);
nebula> INSERT EDGE choose(grade) VALUES 202 -> 102:(3);
nebula> INSERT EDGE follow(likeness) VALUES 200 -> 201:(92.5);
nebula> INSERT EDGE follow(likeness) VALUES 201 -> 200:(85.6);
nebula> INSERT EDGE follow(likeness) VALUES 201 -> 202:(93.2);

更新数据

-- 更新点
nebula> UPDATE VERTEX 101 SET course.credits = $^.course.credits + 1, building.name = "No8"
-- 更新边
nebula> UPDATE EDGE 200 -> 101 OF choose SET grade = choose.grade +1

查看数据

查看更新点的数据

nebula> FETCH PROP ON course 101;
================================
| course.name | course.credits |
================================
| Math        | 4              |
--------------------------------
nebula> FETCH PROP ON choose 200 -> 101
================
| choose.grade |
================
| 6            |
----------------

删除数据

删除点

nebula> DELETE VERTEX $vid

查询示例

Q1. 查询点 201 关注的点:

nebula> GO FROM 201 OVER follow;
=============
| follow._dst |
=============
| 200       |
-------------
| 202       |
-------------

Q2. 查询点 201 关注的点,并筛选出年龄大于 17 岁的点,并返回其姓名,年龄,性别,将其重命名为 Friend,Age,Gender。

nebula> GO FROM 201 OVER follow WHERE $$.student.age >= 17 YIELD $$.student.name AS Friend, \
  $$.student.age AS Age, $$.student.gender AS Gender;
=========================
| Friend | Age | Gender |
=========================
|   Jane |  17 | female |
-------------------------

说明: 可以使用反斜杠(\)来换行

  • YIELD 用来指定返回信息。
  • $^ 为起始点。
  • $$ 为目标点。

Q3. 查询点 201 关注的点选择了哪些课程和其对应年级。

-- 使用管道
nebula> GO FROM 201 OVER follow yield follow._dst as id \
  | GO FROM $-.id OVER choose YIELD $^.student.name AS Student,\
  $$.course.name AS Course, choose.grade AS Grade;
=============================
| Student |  Course | Grade |
=============================
|  Monica |    Math |     6 |
-----------------------------
|  Monica | English |     3 |
-----------------------------
|    Jane | English |     3 |
-----------------------------

-- 使用临时变量
nebula> $var=GO FROM 201 OVER follow yield follow._dst as id;\
  GO FROM $var.id OVER choose YIELD $^.student.name AS Student,\
  $$.course.name AS Course, choose.grade AS Grade;
=============================
| Student |  Course | Grade |
=============================
|  Monica |    Math |     6 |
-----------------------------
|  Monica | English |     3 |
-----------------------------
|    Jane | English |     3 |
-----------------------------

说明:

  • | 表示管道操作,前一个子查询的结果传递给后一个子查询。
  • $- 表示输入流。

第二种方法使用了用户定义变量 $var,此变量可以在整个复合语句内使用。

提示

在测试过程中,通常需要多次修改 schema,因此可以将 schema 修改命令写入文件中来批量执行。

假设将如下操作命令保存为 schema.ngql,行尾使用分号断句。

DROP SPACE test; -- 删除无用的 space
CREATE SPACE test(partition_num=1024, replica_factor=1);
USE test;
CREATE TAG course(name string, credits int);
CREATE TAG building(name string);
CREATE TAG student(name string, age int, gender string);
CREATE EDGE like(likeness double);
CREATE EDGE select(grade int);

那么就可以批量写入

cat  schema.ngql | ./bin/nebula -u user -p password

同样的,也可以将待插入的数据语句批量写入到一个文件中,再如上操作。 此外也可以使用 csv 工具来导入。