find shortest path bidirect双向查询不出来路径

提问参考模版:

  • nebula 版本:2.0.1
  • 部署方式(分布式 / 单机 / Docker / DBaaS):分布式
  • 是否为线上版本: N
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述
  • 相关的 meta / storage / graph info 日志信息


箭头正向可以查询出来,使用双向查询为空

您好,请问这个问题是毕现的吗, 我在本地没有复现这个场景

毕现是什么意思?小明->单位,单位->小明,用的测试数据,关系就是这个

你把use 语句和 find path 语句分两步执行,看看结果怎么样

一样的,查询不出来结果

帮忙执行一下。go 语句 交叉验证一下
go from “d33bcd183a574252a3c51d31133adabd” over * bidirect

go from "28e8a " over * bidirect
这两个贴一下结果



从 28e8 到 d33bc。有一条 rc7e9的正向边
但是从 d33bc 到 28e8 没有反向边

正常情况下 在插入 a->b的边时候 会在存储层 同时插入一条 b->a的反向边
目前来看 应该是 d33bc 到 28e8 的反向边没有被插入

数据只插入了28e8aaef426f4dc098952d75a2e49feb->d33bcd183a574252a3c51d31133adabd正向边,bidirect应该可以查询出双向?

bidirect 可以查出双向的原因 是 插入a->b的同时 b->a的反向边自动被插入,所以双向查找时候可以通过反向边遍历。
你可以在把这条边 重新插入一次, 然后用go语句再验证一下

重新跑了次数据可以了

按照你们说的,我理解的是在查询层使用“BIDIRECT”关键词无效,需要在数据源把单向的边关系补充一个反向的关系,写入数据层,边的数据量是双倍的,是这样的吗?

insert. a->b 时候。storage会自动插入一条b->a的反向边
这是两个步骤,可能会出现 insert a->b 成功后。insert 反向边时失败了, 所以bidirect 无效
这时候 再插入一次 a->b 就可能成功了

那么问题来了,怎么知道哪些数据的反向插入失败了呢? 有几百亿行数据呢

desc space有个atomic_edge的选项,创建space的时候设置成true可以防止边插入不一致,不过会有一定性能损失

1 个赞

插入失败会报错的(但是只报到了 partition 级), 需要客户端重试一下(把整个 request 重试一下).

1 个赞