管道符操作的相关问题

  • nebula 版本:2.6.1
  • 部署方式:分布式
  • 安装方式:RPM
  • 硬盘 500G x 2
  • CPU 16G x 2
  • 内存 64G x 2

问题描述

问题背景

当前我们的图建模可以简单地用 A->B->C->D->E 这样的模型来表示,其中ABCDE分别为性质不同的集合,ABDE集合有约2w个节点,C集合大约有6w个节点,边一共有大约100w条。

问题

现在我们已知A的子集A’和E的子集E’,想要找到从A’所有点到E’所有点的所有路径,根据目前的图建模,每条路径的形式必定是A->B->C->D->E这样的形式,最终结果需要体现路径中的全部5个点的名称或标签。

我们使用GO 语句和管道符进行查询,但是返回的时长很长,无法满足我们的要求,我们通过文档了解到通过管道符返回大量数据可能造成延时,但从官网的实例中我们看不出如何使用并发解决我们想要返回整条路径的问题。请问有没有示例用代码供参考?我们使用的是Python的客户端,这似乎对并发的支持也不是非常好。

代码

GO 1 STEPS FROM 'A1', 'A2' OVER edge1 
YIELD DISTINCT dst(edge) as B, src(edge) as A | 
GO 1 STEPS FROM $-.B OVER edge2 
YIELD DISTINCT dst(edge) as C, $-.A as A, $-.B as B | 
GO 1 STEPS FROM $-.C OVER edge3 
YIELD DISTINCT dst(edge) as D, $-.A as A, $-.B as B, $-.C as C | 
GO 1 STEPS FROM $-.D OVER edge4 
WHERE properties($$).vertex_code IN ['E1', 'E2'] 
YIELD DISTINCT $-.A as A, $-.B as B, $-.C as C, $-.D as D, dst(edge) as E

其中子集A‘和子集E’可能的数据量从10到万级不等

我请教一下我年轻帅气的曹同事。

FIND PATH - Nebula Graph Database 手册 该文档列出了一些使用子图和路劲的方法,您看看。我年轻帅气曹同事的解答。

我们使用过FIND PATH语句,但是实现同样功能的代码耗时也非常长,下面是截图
image

花了近3分钟?

这个注意到了。Find 这块近期两位同事做了优化,还没发布,下一个版本性能会提升。

明白了,另外我想请教一下,对于这种返回全量路径的搜索,你们推荐用于实时查询的场景吗?因为我们的设想是用于实时的查询,但是目前来说可能直接查询并不适合实时查询。

数据量完全内存放的下,为什么不用个lib?
NetworkX之类的

你好,networkX我们也尝试过,不过搜索路径的速度不满足我们的要求,后来使用igraph这个包提升了很多,配合先算大部分的数据,实时更新小部分数据的模式基本达标,但是现在由于内部一些原因需要探索Nebula的能力。

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