提问参考模版:
- nebula 版本:(为节省回复者核对版本信息的时间,首次发帖的版本信息记得以截图形式展示)
- 部署方式:单机
- 安装方式: RPM
- 是否为线上版本:N
- 硬件信息
- 磁盘( 推荐使用 SSD)
- CPU、内存信息
- 问题的具体描述
我单机环境上部署Nebula,自己造了一点最简单的数据,是基于担保关系的,人这个点上有2个属性: 姓名,年龄,边只有类型是担保,无属性
创建scheme:
CREATE SPACE `gr` (partition_num = 10, replica_factor = 1, vid_type = FIXED_STRING(64))
use gr;
CREATE TAG person(name string, age int);
CREATE EDGE grantee();
:sleep 20
insert vertex person(name,age) values "1":("小张", 42);
insert vertex person(name,age) values "2":("小李", 36);
insert vertex person(name,age) values "3":("老王", 65);
insert vertex person(name,age) values "4":("老邓", 42);
insert vertex person(name,age) values "5":("老蒋", 55);
insert vertex person(name,age) values "6":("小黑", 30);
insert vertex person(name,age) values "7":("老段", 55);
insert vertex person(name,age) values "8":("老钱", 61);
insert vertex person(name,age) values "9":("老孙", 68);
insert vertex person(name,age) values "10":("小吴", 21);
INSERT EDGE grantee () VALUES "1"->"2":();
INSERT EDGE grantee () VALUES "3"->"4":();
INSERT EDGE grantee () VALUES "4"->"3":();
INSERT EDGE grantee () VALUES "5"->"6":();
INSERT EDGE grantee () VALUES "6"->"7":();
INSERT EDGE grantee () VALUES "7"->"6":();
INSERT EDGE grantee () VALUES "6"->"5":();
-
想找到两两担保的,就是两个客户点,一个担保边,期望结果是 1–2(1给2做担保) ,3–4(3给4做担保) 这样的ngql 如何实现?
-
想找出两两互保,结果期望为3–4,4–3(3给4担保,4给3担保),这样的ngql 如何实现?
-
想找出整个担保链的,就是每个点以担保边往外扩散,一直扩散到结束,这样的语句如何实现?
-
找出循环担保链,也就是一个环,上面期望数据就是5–>6 6–>7, 7–> 6, 6–> 5 这样一个环,这样的Ngql 如何实现?
-
想找出一个点对应多有的入度或者出度点边,比如一个人给多个人担保,或者多个人给一个担保这样的一对多或多对一如何实现?
-
想找出图中金字塔形状的关系点边或者子图出来,比如一个担保人对应多个被担保人,多个被担保人本身也是担保人,又给其他人担保,就像一个金字塔状,这样使用Ngql 如何实现?
以上的6个问题,是目前将公司图库在切换到Nebula 之后,遇到的一些场景问题,切过来之后,因为对于Ngql 不是很熟悉,像上面的语句无法实现,也有些思考,但是就是不知道用ngql 如何表达:
- 简单担保: 条件1:边类型是担保, 条件2: 起始点出度=1 终止点出度=0
- 两两担保:匹配每个点出度为1,出度为1并且第一个点的出度==第二个点的入度
- 简单担保链: 按照边传递迭代下去,找到符合的点边 eg:
match (a)-[*3]->(b) return a,b - 循环担保: 简单担保链的特殊情况,起始点和终止点一样,也就是一个环,也就是如何实现环的检测
- 匹配每个点的入度,出度 > 1的点出来,没看到ngql如何求入度,出度
- 这个匹配点出度>1,然后扩展一直往外找
另外,这里有个小小的建议,目前Nebula 文档中列出来的这些Ngql 相关的语法,上面的语句能说明一下这句语句是什么意思么?看上面的例子都是以basketballplayer 为案例,希望能看着这个例子知道它业务上做了什么事情,另外,看了很多Nebula demo 演示这块的视频,大部分都是在讲场景,在演示的时候,语句就是执行一下,也不知道这语句为啥就是那样了,这是我们目前产品在切换到Nebula 的一些日常痛点,也一直在看Ngql 语法,但就是不知道咋写,Ngql 使用上这块介绍的内容较少,主要在语法文档上,这块建议能出一些demo视频或者文档上说明更完善,我们也在不断学习和适应Nebula 语法,希望更快能熟悉起来,谢谢