FIND PATH Profile 疑问

提问参考模版:

  • nebula 版本:v2.6.1
  • 部署方式:分布式
  • 安装方式: RPM
  • 是否为线上版本:Y
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述

    上图是FIND PATH 的执行计划,下面是BFS 的一个结果集:

现在有两个疑惑:

  1. FIND PATH 目前是每层BFS 之后ConjunctPATH 判断是否有最短路径,还是五层遍历结束之后才比较呀?
  2. GetNeighbors,BFSShortest 哪里可以看到这些算子的实现逻辑的介绍 (源码c++ 没写过看起来很吃力)? 我的理解,GetNeighbors 是获得出发节点的邻居, 但是BFS 貌似也是做这个事情的?两者有什么区别吗?
1 个赞

由于你使用的是 单点最短路径
1、每一次的conjunctPath 都会判断是否有最短路径,如果有,则立即结束拓展,否则直到5步拓展完
2、BFS 是提取了 下一步要拓展的点 ,并且把当前的 边保存了下来

1 个赞

GetNeighbors 不也是获得下一跳(邻居)的节点吗?

getNeighbors 不仅仅获取下一跳的节点, 还可以获取 起始点的属性和边的属性

1 个赞

你好,假设有路径, 边都是相同的 edge
A → B ->C ->D
A ← E ->D->F
从A 出发,第一层的时候
BFS 是提取了 下一步要拓展的点 ,并且把当前的 边保存了下来 那BFS 是可以获取BE vid 并 保存edge 的vid ?
getNeighbors 不仅仅获取下一跳的节点, 还可以获取 起始点的属性和边的属性 是获取 A,B,E的属性信息?
是这样理解吗?

1 个赞

@jmq2020 ping…

比如 find shortest path from “A” to “F” over like yield path as p
因为是 双向BFS(从起点A 正向出发, 从终点F 方向出发)
第一步拓展时候 先getNeighbor 算子,然后 执行BFS 算子
getNeighbors 算子的输出是BFS算子的输入
正向拓展的 BFS 算子结果里 保存了 B(vid) 和 A->B (edge)
反向拓展的BFS 算子结果里 保存了 D(vid) 和 D->F (edge)
在BFS算子中, 会将 B(vid) 和 D(vid) 放入 getNeightbors算子的 输入中,这样第二步的时候,getNeightbors 就可以从b和d 分别进行拓展了

至于 BFS 算子中保存的 A->B (edge) 和 D->F(edge) 是为了在conjunctPath 算子中 拼接成路径使用的,如果 有交集,就拼接为一个完成的路径,否则就分别构造正向单边的路径和反向单边的路径,等下一步拓展后继续拼接

2 个赞

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。