nebula 版本:3.5.0
部署方式: 单机
安装方式:RPM
是否上生产环境: N
问题的具体描述
在做环路查询的相关问题的时候,利用graphtool的工具库已经完成了环路检测,查询完成后能够获得一个包含所有环路的list,这些环路中只有每个结点的vid,例如[1, 3, 4, 5]这四个结点能够构成一个环。
后续的工作要依赖于环路中的边上的一些属性,能否根据四个明确的vid查询出来具体的路径?
尝试使用过利用match语句
match p=(v1)--(v2)--(v3)--(v4)--(v1) \
where id(v1)==1 and id(v2)==3 and id(v3)==4 and id(v4) == 5 \
return p
但是这样跑的效率非常低,甚至无法完成查询,是否有其他方式能够完成?
想找到环路,并拿到属性可以用FIND ALL PATH, 知道step n 之后用
FIND ALL PATH WITH PROP FROM "v1" TO "v1" OVER * BIDIRECT UPTO n STEPS YIELD path AS p
3 个赞
可以把执行计划发出来看看,指定id按道理不应该很慢,不过这个能满足你的要求吗?路径的顺序一定是1,3,4,5这样?会不会有1,4,5,3这种情况?
我这边试了一下,确实能够查询到环路,但是这样的查询会把跳数<n的环路也查找进来,我们现在的应用场景主要需要跳数固定为4和6的环(只包含4个结点或6个结点的环),全查询出来后是否有方法能够对结果包含的结点数进行筛选?
先看看这个方法是否满足性能,如果满足可以在业务层用代码去过滤
1 个赞
刚刚尝试用这种方法去进行全图的环路检索,直接没法跑,现在可能考虑结合graph tool找出来的结点,用nebula find path的方法去找该结点所处的环路,再对环路去进行处理,这样的性能还可以。全部交给nebula没法跑,跑全图直接服务挂了
所以你一开始是没有起始点的是把,不知道你是什么业务,如果类似于实时的业务,可以用实时触发的点(比如交易的双方等),来找环路。环路记得设置下最大的跳数
1 个赞
yee
2023 年7 月 18 日 02:33
9
看了上面最初的语句计划,性能不好的原因是 filter 在中间的拓展的时候并没有下推,是优化器缺少类似的优化,目前可以考虑将路径拆开做些辅助的调优,类似下面语句:
match (v1)-[e1]-(v2), (v2)-[e2]-(v3), (v3)-[e3]-(v4), (v4)-[e4]-(v1) \
where id(v1)=="1" and id(v2)=="2" and id(v3)=="3" and id(v4) == "4" \
return [v1,e1,v2,e2,v3,e3,v4,e4,v1] as p
上面路径需要手动拼接一下,跟原来的 path 变量稍微有些出入,但是应该没有丢失信息。
2 个赞
system
关闭
2023 年8 月 17 日 02:34
10
此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。