图数据库nebula

2023-11-04

目录

1、查询方式

按需不需要基于索引查询,可以分为两类:

为什么有的需要索引?

go(依据路径查询属性) 

fetch (获取指定边、点的属性值) 

lookup 

match 


1、查询方式

nebula可以用来查询的语句关键字主要有:GO、FETCH、LOOKUP、MATCH、GET SUBGRAPH、FIND PATH。

按需不需要基于索引查询,可以分为两类:

  • 需要索引:LOOKUP、MATCH
  • 不需要索引:GO、FETCH、GET SUBGRAPH、FIND PATH。

为什么有的需要索引?

  • 因为nebula底层数据存储是基于RocksDB,是一种K-V的存储结构,nebula存储数据的时候,key是基于VID生成的,也就是点的唯一标识ID,而属性则经过序列化后存储到value里面了,所以正常情况下,是没有办法根据属性值过滤数据,因为属性根本不在key里面,也不可能全量扫描去反序列化属性值后再过滤,那样性能太差。
  • 创建索引的目的其实不是为了加快查询速度,创建索引其实是存储了一份以属性值为key的一份数据,这样才有可能根据属性是查找。

 其实从各自的查询语法定义就可以看出一些不一样:

  • GO、FETCH、GET SUBGRAPH、FIND PATH的语句都是开始需要指定VID,所以自然也就不需要依赖索引,
  • LOOKUP、MATCH没有要求必须指定VID,所以需要依赖索引才可以正常查询,没有索引的情况会直接返回错误。
    这样我们基本就可以区分了,如果你是需要基于属性值查询数据,你只能使用LOOKUP、MATCH,并且需要事先创建好索引。

  从业务场景来看,如果我们只是需要查看节点的属性,不关心节点的关系的化,我们可以使用GO、FETCH、LOOKUP、MATCH。

FETCH和LOOKUP的区别:

  • 如果只是简单的根据VID查询,我建议使用FETCH查询,直接根据VID查询节点或边的属性值
  • 如果是需要根据一些条件查询的话,我们就可以使用LOOKUP,可以支持各种查询条件的组合

go(依据路径查询属性) 

# 从 vid  为 player102 的点出发,并且通过边 server 相连的顶点,并依次输出边的属性,起点 vid,终点 vid,起点属性,终点属性
GO FROM "player102" OVER serve 
yield 
	properties(edge) as edge_prop ,
	src(edge) as start_vertex_id ,
	dst(edge) as end_vertex_id,
	properties($^) as start_vertex_prop,
	properties($$) as end_vertex_prop;

# 以 player101 为出发点,经过任意类型的边,且经过 1 - 2 跳,并输出所有边的标签,起点 vid,终点vid
go 1 to 2 steps from "player101" over * 
yield 
	type(edge)as edge_type,
	src(edge) as start_vertex_id ,
	dst(edge) as end_vertex_id;

# 由 player100 顶点出发,经过标签为 follow 的边,共两步,并输出边的起点和边的终点,以及终点边的 age 属性。然后将结果按照边的目的顶点进行分组。最后输出边的终点,起点和 age.
GO 2 STEPS FROM "player100" OVER follow 
YIELD 
	src(edge) AS src, 
	dst(edge) AS dst, 
	properties($$).age AS age 
| GROUP BY $-.dst 
YIELD 
	$-.dst AS dst, 
	collect_set($-.src) AS src, 
	collect($-.age) AS age;

fetch (获取指定边、点的属性值) 

#  获取点 player100 的所有属性
FETCH PROP ON player "player100";

# 获取 player100 的 name 属性
FETCH PROP ON player "player100" 
YIELD 
	properties(vertex).name AS name;

# 获取顶点标签不同,但是顶点 id 相同的两个顶点的属性,并且将结果合并输出
FETCH PROP ON player, t1 "player100";

# 获取任意标签下,id 为 player100, player106, team200 的属性。
FETCH PROP ON * "player100", "player106", "team200";

# 获取连接 player100 和 team204 的边 serve 的所有属性值。 
FETCH PROP ON serve "player100" -> "team204";

# 获取多条边的属性值
FETCH PROP ON serve "player100" -> "team204", "player133" -> "team202";

# 使用 rank  查询(默认会返回 rank 为 0 的边)
FETCH PROP ON serve "player100" -> "team204" @1;

lookup 

# 查询所有带标签为 tag_name 的顶点的 vid 和属性
lookup on tag_name 
yield 
	id(vertex) as vertex_id,
	properties(vertex);

# 按照属性查询顶点
lookup on tag_name 
	where tag_name.name=="vertex_src_name" 
yield 
	properties(vertex);

# 依据属性查询边
lookup on edge_name 
	where edge_name.name=="edge_name_1" 
yield 
	properties(edge).key as key;

# 查询属性为某几个值
lookup on player 
	where player.age in [45,40,35] 
yield 
	properties(vertex).name as name,
	properties(vertex).age as age;

# 设置输出的个数(从第一位开始输出,输出两条记录)
lookup on player 
	where player.age in [45,40,35] 
yield 
	properties(vertex).name as name,
	properties(vertex).age as age |
limit 0,2;

# 查询并按属性排序
lookup on player 
	where player.age >= 30 
	yield properties(vertex).name as name,
	properties(vertex).age as age 
| order by $-.age desc;

# 使用 group 语句对结果进行分组
lookup on player 
yield 
	properties(vertex).name as name,
	properties(vertex).age as age 
| group by 
	$-.age yield $-.age,
	count($-.age) as res_num 
| order by $-.res_num desc
| limit 3,7

match 

# 查询所有标签为 tag_name 的顶点
match (m:tag_name) 
return m;

# 查询 vid 为 "vertex_id" 的顶点
match (m:tag_name) 
	where id(m) == "vertex_id" 
return m;

# 依据属性查询顶点
 match (m:tag_name{name:"vertex_src_name"}) 
 return m;

# 匹配查询路径(双向 "--";单向 "-->" 或 "<--")
 match p=(m:tag_name)--(n:tag_name) 
 return p

# 也可写作(与 cypher 语法类似)
  match (m:tag_name)-[p]->(n:tag_name) 
  return p

2、概念理解

实体和表分为两类:

  1. vertex(顶点、实体):tag_name(表)
  2. edge(边,关系):edge_type(表)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图数据库nebula 的相关文章

  • 在 JTable 中移动行

    我使用 MVC 模式 并且有一个如下所示的 JTable List
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • 一种使用 Java Robot API 和 Selenium WebDriver by Java 进行文件上传的解决方案

    我看到很多人在使用 Selenium WebDriver 的测试环境中上传文件时遇到问题 我使用 selenium WebDriver 和 java 也遇到了同样的问题 我终于找到了解决方案 所以我将其发布在这里希望对其他人有所帮助 当我需
  • Microsoft Graph 身份验证 - 委派权限

    我可以使用 Microsoft Graph 访问资源无需用户即可访问 https developer microsoft com en us graph docs concepts auth v2 service 但是 此方法不允许我访问需
  • 迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告

    我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • 检查 protobuf 消息 - 如何按名称获取字段值?

    我似乎无法找到一种方法来验证 protobuf 消息中字段的值 而无需显式调用其 getter 我看到周围的例子使用Descriptors FieldDescriptor实例到达消息映射内部 但它们要么基于迭代器 要么由字段号驱动 一旦我有
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 【HDFS】EditLogTailer功能及原理(二)-- selectInputStreams细节详解

    HDFS EditLogTailer功能及原理 一 整体流程 HDFS EditLogTailer功能及原理 二 selectInputStreams细节详解 HDFS EditLogTailer功能及原理 三 loadEdits方法细节详
  • Javascript变量提升预解析的理解

    预解析 JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的 JavaScript解析器执行JavaScript代码的时候 分为两个过程 预解析过程和代码执行过程 预解析过程 把变量的声明提升到当前作用域的最前面
  • 使用python的pandas库把.data文件转化为csv文件

    1 问题引入 在数据分析 机器学习 深度学习中 我们经常会处理各种各样格式的数据 今天 博主在做房价预测时 采用波士顿房价数据集 从网上下载的数据集格式为 data 并不是我们喜闻乐见的csv格式 所以想采用pandas库将其转为为csv格
  • 【Redis】Redis 的学习教程(十)之使用 Redis 实现消息队列

    消息队列需要满足的要求 顺序一致 要保证消息发送的顺序和消费的顺序是一致的 不一致的话可能会导致业务上的错误 消息确认机制 对于一个已经被消费的消息 已经收到ACK 不能再次被消费 消息持久化 要具有持久化的能力 避免消息丢失 这样当消费者
  • linux怎么将磁盘剩余空间给分区,利用fdisk将硬盘剩余空间进行分区

    1 首先查看分区 发现300多G的硬盘 dev sdc1只使用了200多G而已 root local103 dbbackup df h Filesystem Size Used Avail Use Mounted on dev sda2 1
  • [黑科技] 使用Word和Excel自制题库自判断答题系统

    这篇文章是LZY老师告诉我的一个方法 如果你需要做题库 并且喜欢电子答题的方法 这篇文章或许会对你有所帮助 反正李老师班级的平均成绩高出其他班级的14分 这就是它的好处 希望这篇文章对我今后的学生有所帮助吧 注意 这篇文章涉及到Word特殊
  • 详解分布式共识(一致性)算法Raft

    分布式共识及Raft简介 所谓分布式共识 consensus 与CAP理论中的一致性 consistency 其实是异曲同工 就是在分布式系统中 所有节点对同一份数据的认知能够达成一致 保证集群共识的算法就叫共识算法 它与一致性协议这个词也
  • PyTorch 更改训练好的模型 继续训练

    目录 直接加载预训练模型 加载部分预训练模型 冻结部分参数 训练另一部分参数 微改基础模型预训练 微改基础模型 简单预训练 直接加载预训练模型 如果我们使用的模型和原模型完全一样 那么我们可以直接加载别人训练好的模型 my resnet M
  • SHADER学习笔记(一):Surface Shader

    Surface Shader是Unity为了方便shader编写提供的特殊功能 它对底层的vertex fragment shader做了封装 省去了一些重复代码编写的工作量 我的理解是它同时具有vertex fragment shader
  • [CISCN 2022 初赛]login_normal

    叠甲 菜 很菜 就是懂一点但是不多 可能涉及的错误会很多 有错误欢迎指出 同时对于这个疑问有解答的也欢迎留言 总之就是很菜 QAQ 这一道题 首先要考代码审计 来猜它这个 login 的格式 然后在通过它的 login 之后 通过传入可见字
  • 【Android】ViewModel原理分析

    概述 本文主要通过分析ViewModel源码解决以下两个疑问 1 ViewModel如何保证的唯一性 2 ViewModel如何保证数据不丢失的 为了解决这些问题 从ViewModel的构造开始 一般创建ViewModel的方法如下 Vie
  • 《消息队列高手课》内存管理:如何避免内存溢出和频繁的垃圾回收?

    不知道你有没有发现 在高并发 高吞吐量的极限情况下 简单的事情就会变得没有那么简单了 一个业务逻辑非常简单的微服务 日常情况下都能稳定运行 为什么一到大促就卡死甚至进程挂掉 再比如 一个做数据汇总的应用 按照小时 天这样的粒度进行数据汇总都
  • SQL Server用户登录失败

    SQL Server数据库中 如果我们忘记了 sa密码 又删除了jhyf kj administrators帐号 我们可以用下面的方法来修复 1 首先停止所有与SQLServer相关的服务 net stop SQL Server Integ
  • Spring Boot全面总结(超详细,建议收藏)

    前言 本文非常长 建议先mark后看 也许是最后一次写这么长的文章 说明 前面有4个小节关于Spring的基础知识 分别是 IOC容器 JavaConfig 事件监听 SpringFactoriesLoader详解 它们占据了本文的大部分内
  • 2021极客大挑战web部分wp

    Dark 看到url http c6h35nlkeoew5vzcpsacsidbip2ezotsnj6sywn7znkdtrbsqkexa7yd onion 发现后缀为 onion 为洋葱 下载后使用洋葱游览器访问 Welcome2021
  • git学习:github上传自己的代码到别人的仓库

    转载 原博客链接 总结 向别人贡献自己的代码 和传到自己仓库的区别 要先fork转化 clone仓库文件到电脑本地 然后进入文件夹 若想提交到非默认分支 要先git checkout到分支 pull分支下的最新代码 若还想创建新分支 用gi
  • 入門篇-耦合Coupling AC/DC/GND差別在哪

    摘自 https www strongpilab com p 156 示波器操作 入門篇 耦合Coupling AC DC GND差別在哪 2016 06 26 儀器 Instrument 示波器 Scope 0 示波器的Vertical選
  • Crested Ibis vs Monster——AT动态规划思想

    题目描述 Ibis is fighting with a monster The health of the monster is H Ibis can cast N kinds of spells Casting the i th spe
  • 对caffe2的一些初步体会(草稿)

    Caffe2的一些关键设计思想 所有运算都抽象为Operator Blob和Tensor的概念 Blob和Net都存放在Workspace中 一个Workspace中可以有多个Net 这些Net中使用到的相同名称的Blob实际对应于这个Wo
  • 图数据库nebula

    目录 1 查询方式 按需不需要基于索引查询 可以分为两类 为什么有的需要索引 go 依据路径查询属性 fetch 获取指定边 点的属性值 lookup match 1 查询方式 nebula可以用来查询的语句关键字主要有 GO FETCH