查询5个点之间,两两之间是否存在边。不排除这5个点中有超大节点

nebula3.8.0版本,假如给定5个点,调查这5个点之间两两之间是否存在直接关系(两点之间是否存在边),不排除这5个点中存在一些超大节点(顶点边数量超过千万甚至更多),有什么好的办法查询

比较高效的 query 是自己组装 GO query,可以用 UNION 去合并一个query。

如果边类型有限,构造所有的 FETCH 边更高效

语义上用 MATCH 两边给 node list 是可以的,但是贵很多。

困扰我的不是查询语句,而是在面对超级节点时,直接查询会导致服务崩溃,更严重的导致服务器宕机
目前采用max_edge_returned_per_vertex=10000方式来自动截断结果输出量,但是不太清楚截断的结果输出是否是根据rank值排序后的
通过我自己的测试,使用match查询会根据rank值从小到大有序返回前10000条数据,但是官方文档中并没有找到相关信息。所以对自己测试结果不是百分百肯定
所以想确认下,面对超级节点的查询,利用max_edge_returned_per_vertex配置进行结果截断,截断的结果是否是根据rank值排序后的?在不同的语法上比如go,match 是否结果都一样?

如果有超级节点,不妨代码实现穷举可能性用 FETCH LIMIT 1 然后 UNION,来得到连接存在性

如之前另外一个帖子所说,截断是不保证排序的。
你现在实际测试情况是怎样的,配置是怎样的。

集群情况:3台graphd节点 3台meta节点12台storage节点
测试情况:空间分区一共120,20个点,5000万条边。每条边的from和to是随机的两个点,rank值为1000-50000之间随机值,max_edge_returned_per_vertex=9999
导入数据之后通过match进行查询,发现返回的数据全部都是rank值升序排列,无论出边还是入边,以及指定from和to返回的边都是rank从小到大排列

线上情况:
集群:3台graphd节点 3台meta节点12台storage节点
数据:300个分区,一亿个点,60亿条边,rank值自定义递增(根据数据产生时间先后),配置max_edge_returned_per_vertex=9999
线上查询情况:通过match查询,返回结果根据rank值递增,而且通过业务数据排查,返回数据和业务数据在时间线上是对的上的