• Quick Start
    • Docker 方式
    • 硬件资源需求(推荐)
    • Docker 集群部署
      • 启动服务
      • 连接 Nebula Graph
    • 创建图数据
      • 创建图空间
      • 定义图数据 Schema
      • 插入数据
      • 更新数据
      • 查看数据
      • 删除数据
      • 查询示例
      • 提示

    Quick Start

    Docker 方式

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

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

    硬件资源需求(推荐)

    建议使用 SSD,并预留 50GB 以上的空间,内存建议在 8GB 以上。如果配置过低,有可能导致服务非正常退出。

    Docker 集群部署

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

    启动服务

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

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

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

    1. > cd /usr/local/nebula/

    启动 metad,storaged 和 graphd 服务:

    1. > scripts/nebula.service start all

    查看服务状态:

    1. > scripts/nebula.service status all

    连接 Nebula Graph

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

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

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

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

    创建图数据

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

    image

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

    创建图空间

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

    列出已有的 Space:

    1. nebula> SHOW SPACES;

    创建一个名为 test 的新 Space:

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

    定义图数据 Schema

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

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

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

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

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

    1. -- 查看标签列表
    2. nebula> SHOW TAGS;
    3. ============
    4. | Name |
    5. ============
    6. | building |
    7. ------------
    8. | course |
    9. ------------
    10. | student |
    11. ------------
    12. -- 查看边类型列表
    13. nebula> SHOW EDGES;
    14. ==========
    15. | Name |
    16. ==========
    17. | choose |
    18. ----------
    19. | follow |
    20. ----------

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

    1. -- 查看标签的属性
    2. nebula> DESCRIBE TAG student;
    3. ===================
    4. | Field | Type |
    5. ===================
    6. | name | string |
    7. -------------------
    8. | age | int |
    9. -------------------
    10. | gender | string |
    11. -------------------
    12. -- 查看边类型的属性
    13. nebula> DESCRIBE EDGE follow;
    14. =====================
    15. | Field | Type |
    16. =====================
    17. | likeness | double |
    18. ---------------------

    插入数据

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

    1. -- 插入点
    2. nebula> INSERT VERTEX student(name, age, gender) VALUES 200:("Monica", 16, "female");
    3. nebula> INSERT VERTEX student(name, age, gender) VALUES 201:("Mike", 18, "male");
    4. nebula> INSERT VERTEX student(name, age, gender) VALUES 202:("Jane", 17, "female");
    5. nebula> INSERT VERTEX course(name, credits),building(name) VALUES 101:("Math", 3, "No5");
    6. nebula> INSERT VERTEX course(name, credits),building(name) VALUES 102:("English", 6, "No11");
    7. -- 插入边
    8. nebula> INSERT EDGE choose(grade) VALUES 200 -> 101:(5);
    9. nebula> INSERT EDGE choose(grade) VALUES 200 -> 102:(3);
    10. nebula> INSERT EDGE choose(grade) VALUES 201 -> 102:(3);
    11. nebula> INSERT EDGE choose(grade) VALUES 202 -> 102:(3);
    12. nebula> INSERT EDGE follow(likeness) VALUES 200 -> 201:(92.5);
    13. nebula> INSERT EDGE follow(likeness) VALUES 201 -> 200:(85.6);
    14. nebula> INSERT EDGE follow(likeness) VALUES 201 -> 202:(93.2);

    更新数据

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

    查看数据

    查看更新点的数据

    1. nebula> FETCH PROP ON course 101;
    2. ================================
    3. | course.name | course.credits |
    4. ================================
    5. | Math | 4 |
    6. --------------------------------
    7. nebula> FETCH PROP ON choose 200 -> 101
    8. ================
    9. | choose.grade |
    10. ================
    11. | 6 |
    12. ----------------

    删除数据

    删除点

    1. nebula> DELETE VERTEX $vid

    查询示例

    Q1. 查询点 201 关注的点:

    1. nebula> GO FROM 201 OVER follow;
    2. =============
    3. | follow._dst |
    4. =============
    5. | 200 |
    6. -------------
    7. | 202 |
    8. -------------

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

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

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

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

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

    1. -- 使用管道
    2. nebula> GO FROM 201 OVER follow yield follow._dst as id \
    3. | GO FROM $-.id OVER choose YIELD $^.student.name AS Student,\
    4. $$.course.name AS Course, choose.grade AS Grade;
    5. =============================
    6. | Student | Course | Grade |
    7. =============================
    8. | Monica | Math | 6 |
    9. -----------------------------
    10. | Monica | English | 3 |
    11. -----------------------------
    12. | Jane | English | 3 |
    13. -----------------------------
    14. -- 使用临时变量
    15. nebula> $var=GO FROM 201 OVER follow yield follow._dst as id;\
    16. GO FROM $var.id OVER choose YIELD $^.student.name AS Student,\
    17. $$.course.name AS Course, choose.grade AS Grade;
    18. =============================
    19. | Student | Course | Grade |
    20. =============================
    21. | Monica | Math | 6 |
    22. -----------------------------
    23. | Monica | English | 3 |
    24. -----------------------------
    25. | Jane | English | 3 |
    26. -----------------------------

    说明:

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

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

    提示

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

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

    1. DROP SPACE test; -- 删除无用的 space
    2. CREATE SPACE test(partition_num=100, replica_factor=1);
    3. USE test;
    4. CREATE TAG course(name string, credits int);
    5. CREATE TAG building(name string);
    6. CREATE TAG student(name string, age int, gender string);
    7. CREATE EDGE like(likeness double);
    8. CREATE EDGE select(grade int);

    那么就可以批量写入

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

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