Nebula图数据库常用 nGQL命令

1. 使用说明

图空间和 Schema

一个 NebulaGraph 实例由一个或多个图空间组成。每个图空间都是物理隔离的,用户可以在同一个实例中使用不同的图空间存储不同的数据集。

为了在图空间中插入数据,需要为图数据库定义一个 Schema。 NebulaGraph 的 Schema 是由如下几部分组成。

组成部分说明
点(Vertex)表示现实世界中的实体。一个点可以有 0 到多个标签。
标签(Tag)点的类型,定义了一组描述点类型的属性。
边(Edge)表示两个点之间有方向的关系。
边类型(Edge type)边的类型,定义了一组描述边的类型的属性。

异步实现创建和修改

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

  • CREATE
  • SPACE
  • CREATE TAG
  • CREATE EDGE
  • ALTER TAG
  • ALTER EDGE
  • CREATE TAG INDEX
  • CREATE EDGE INDEX

2. 创建和选择图空间

# 创建名为basketballplayer的图空间
CREATE SPACE basketballplayer(partition_num=15, replica_factor=1, vid_type=fixed_string(30));
# 检查分片的分布情况,确保平衡分布
SHOW HOSTS;
# 选择图空间
USE basketballplayer;
# 查看创建的图空间
SHOW SPACES;

3. 创建 Tag 和 Edge type

# 创建运动员标签
CREATE TAG player(name string, age int);
# 创建球队标签 
CREATE TAG team(name string);
# 创建X关注边
CREATE EDGE follow(degree int);
# 创建服役边
CREATE EDGE serve(start_year int, end_year int);

4. 插入数据

# 插入代表球员和球队的点
INSERT VERTEX player(name, age) VALUES "player100":("Tim Duncan", 42);
INSERT VERTEX player(name, age) VALUES "player101":("Tony Parker", 36);
INSERT VERTEX player(name, age) VALUES "player102":("LaMarcus Aldridge", 33);
INSERT VERTEX team(name) VALUES "team203":("Trail Blazers"), "team204":("Spurs");
# 插入代表球员和球队之间关系的边
INSERT EDGE follow(degree) VALUES "player101" -> "player100":(95);
INSERT EDGE follow(degree) VALUES "player101" -> "player102":(90);
INSERT EDGE follow(degree) VALUES "player102" -> "player100":(75);
INSERT EDGE serve(start_year, end_year) VALUES "player101" -> "team204":(1999, 2018),"player102" -> "team203":(2006,  2015);

5. 查询数据

  • GO 语句可以根据指定的条件遍历数据库。GO语句从一个或多个点开始,沿着一条或多条边遍历,返回YIELD子句中指定的信息
  • FETCH 语句可以获得点或边的属性
  • LOOKUP 语句是基于索引的,和WHERE子句一起使用,查找符合特定条件的数据
  • MATCH 语句是查询图数据最常用的,可以灵活的描述各种图模式,但是它依赖索引去匹配 NebulaGraph 中的数据模型,性能也还需要调优
# 从 VID 为player101的球员开始,沿着边follow找到连接的球员
GO FROM "player101" OVER follow YIELD id($$);
# 从 VID 为player101的球员开始,沿着边follow查找年龄大于或等于 35 岁的球员,并返回他们的姓名和年龄,同时重命名对应的列
GO FROM "player101" OVER follow WHERE properties($$).age >= 35 \
        YIELD properties($$).name AS Teammate, properties($$).age AS Age;
# 查询 VID 为player100的球员的属性
FETCH PROP ON player "player100" YIELD properties(vertex);

6. 更新操作

# 用UPDATE修改 VID 为player100的球员的name属性,然后用FETCH语句检查结果
UPDATE VERTEX "player100" SET player.name = "Tim";
# 用UPDATE修改某条边的degree属性,然后用FETCH检查结果
UPDATE EDGE ON follow "player101" -> "player100" SET degree = 96;
FETCH PROP ON follow "player101" -> "player100" YIELD properties(edge);
# 用INSERT插入一个 VID 为player111的点,然后用UPSERT更新它
INSERT VERTEX player(name,age) VALUES "player111":("David West", 38);
UPSERT VERTEX "player111" SET player.name = "David", player.age = $^.player.age + 11 \
        WHEN $^.player.name == "David West" AND $^.player.age > 20 \
        YIELD $^.player.name AS Name, $^.player.age AS Age;

7. 删除点和边

# 删除点
DELETE VERTEX "player111", "team203";
# 删除边
DELETE EDGE follow "player101" -> "team204";

8. 使用索引

# 为 name 属性创建索引 player_index_1
CREATE TAG INDEX IF NOT EXISTS player_index_1 ON player(name(20));
#  重建索引确保能对已存在数据生效
REBUILD TAG INDEX player_index_1
# 使用 LOOKUP 语句检索点的属性
LOOKUP ON player WHERE player.name == "Tony Parker" \
        YIELD properties(vertex).name AS name, properties(vertex).age AS age;
# 使用 MATCH 语句检索点的属性
MATCH (v:player{name:"Tony Parker"}) RETURN v;
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法小生Đ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值