图数据库nebula
目录
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、概念理解
实体和表分为两类:
- vertex(顶点、实体):tag_name(表)
- edge(边,关系):edge_type(表)
图数据库nebula相关推荐
- model存数据_Jepsen 测试框架在图数据库 Nebula Graph 中的实践
在本篇文章中主要介绍图数据库 Nebula Graph 在 Jepsen 这块的实践. Jepsen 简介 Jepsen 是一款用于系统测试的开源软件库,致力于提高分布式数据库.队列.共识系统等的安全 ...
- 图数据库nebula——常用的nGQL
目录 1.图空间: (1)创建图空间: (2)查看图控件列表: (3)切换图空间: (4)删除图空间: (5)查看分片分布情况: (6)开始分片重新分布: (7)查看分片重新分布状态: (8)停止分片 ...
- 众测图数据库 Nebula Graph | 捉虫计划已开启,这项有礼
Nebulan Graph 捉虫计划 是开源的分布式图数据库 -- Nebula 发起的「找 Bug」活动,旨在发动开源社区的力量共建图数据库 Nebula. Nebula Graph:一个开源的分布 ...
- 国产图数据库--Nebula备份/恢复
nebula 图数据库的数据备份与恢复,首先查看文档说明 https://docs.nebula-graph.com.cn/3.1.0/backup-and-restore/nebula-br/3.b ...
- 亿万级图数据库 Nebula Graph 的数据模型和系统架构设计
Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可 ...
- GraphX 在图数据库 Nebula Graph 的图计算实践
不同来源的异构数据间存在着千丝万缕的关联,这种数据之间隐藏的关联关系和网络结构特性对于数据分析至关重要,图计算就是以图作为数据模型来表达问题并予以解决的过程. 一.背景 随着网络信息技术的飞速发展,数 ...
- 图数据库:Nebula Graph【开源的分布式图数据库】
Nebula Graph 是一个开源的图数据库,由杭州欧若数网科技有限公司(下文简称:欧若数网)自主研发维护.欧若数网研发人员来自阿里巴巴.Facebook.华为.IBM 等大厂. Nebula Gr ...
- 图数据库技术选型汇总
一.图数据库发展: https://blog.csdn.net/younger_china/article/details/127176768 二.关于NebulaGraph 1.1.美团实践 美团图 ...
- 直播预告 | Kubernetes 上的图数据库——本周四晚八点
云原生直播间第 3 期直播,敬请期待! 直播预告 本周四晚八点,将由 VEsoft inc.(欧若数网)开发者布道师古思为,为大家带来线上的分享. 本次分享将介绍 K8s 上的图数据库 Nebula ...
最新文章
- 【MATLAB】————拷贝指定文件路径下的有序文件(选择后),可处理固定规律的文件图片数据或者文件
- NSString 去掉前后空格或回车符
- 【数据库系统概论】考研重点章节分析【0】
- repo-话说软件详细设计工具
- 警告:Vista存高风险 不宜过早安装
- 评微软裁员测试:自动化测试并不能代替人工
- 跨计算机建立视图_解读 | 2019年10篇计算机视觉精选论文(上)
- 61850协议服务器端开发,基于IEC61850标准的服务端程序的设计与实现
- 右键添加cmd命令快捷键,右键cmd快捷键丢失
- 最简单的Hopper Disassembler玩转Mac逆向
- ffmpeg设置h264编码IDR间隔
- 学会吊打面试官之set
- 互联网技术架构——画龙点睛
- J2EE究竟是什么?
- Python爬虫:现学现用xpath爬取豆瓣音乐
- Codeforces Round #702 (Div. 3)——B
- 用优启通U盘安装Ghost版Win10系统教程
- Your Composer dependencies require a PHP version “>= 7.2.
- win10 21H1 无法连接到这个网络 修复记录
- mac双屏时,程序坞(dock)在主屏或者副屏显示的方法
热门文章
- 在否定句和疑问句使用have动词_26
- Excel2010基础-学习笔记
- jQuery轮播图(详细注释)
- Windows命令行常用命令
- C#使用System.Speech制作语音提示功能
- python爬虫十二:初步使用Scrapy框架爬取数据
- #Geek Talk# AI and FinTech,投资阿里巴巴的 Benson Tam 也会跟大家一起 Talk
- UVa 1616 - Caravan Robbers
- 蒲公英 · JELLY技术周刊 Vol.11 Lighthouse 测试报告生成
- 推荐一个牛逼的直播开源项目