有没有获取某个节点下游某个Tag的nGQL语句

  • nebula 版本:3.2.0
  • 部署方式:分布式
  • 安装方式:源码编译
  • 是否上生产环境:Y
  • 内存:32G
  • 存储:机械硬盘

有没有nGQL语句 / 算法 可以实现如下的需求:
需求1:求某个节点下游所有节点的数量(不只局限于1跳,可能很多跳,直到最末端节点)
需求2:求某个节点下游指定Tag下所有节点的数量(即在需求1的基础上,遍历出所有下游节点,再从中筛选出需要的Tag的节点数量)

看下这个。

  1. match (v:player)-[e*1…]->(v2) where id(v)==“player100” return count(distinct v2);
  2. match (v:player)-[e1…]->(v2:player) where id(v)==“player100” return count(distinct v2)
    以上供参考
    如果能知道深度或者机器配置比较低的时候,建议改成e
    1…N,N为查询最大深度

当我在官方案例basketball空间中执行这个语句的时候是可以运行的,

但是当我在自己的空间中执行该语句就总是报如下错误:

目前该Table节点下有十万个节点,与之直接关联的边有百万条。
不知道这个问题是什么原因呢?

table 的单引号去掉呢

反引号去掉也是同样的报错呢

这个不是语法的问题。

你可以用我们的nba数据集,在console中执行 :play basketballplayer

match (v:Table)-[e:INHERITED_BY*1..N]->(v2:Table) where id(v)==“tableName” return count(distinct v2)

请教大佬,我执行如上语句,当最大跳数N为4~5跳的时候,可以跑出来结果,但是当最大跳数N很大,如8~10跳甚至不设置,nebula集群会挂掉。应该是oom引起的。

我的空间设置:


(由于我直接用的库名+表名作为vid,导致会有很长的vid的情况)

Table节点的属性:
大约有20个属性,都为string类型,平均每条属性的 属性名 + 属性值 约 30个字节

数据量:


我的目的是计算出当前节点的所有下游节点数量(起点是Table, 边是INHERITED_BY,终点是Table)

我暂时想到的优化方式是:
1.vid使用table_id,减少vid长度,过长的vid使用md5加密,将空间的vid长度设置为fixed_string(32)
2.可能属性数量也会影响查询性能(其实并非每次查询都需要拿到所有属性),是否可以将内容过长的属性去掉或者关联到外部存储,或者采用分Tag?
3.现在集群为32G内存,机械硬盘。可以扩大内存,改为ssd

请教大佬我的优化思路是否正确,或者有没有其他的解决方式,这个需求目前应用于生产环境,比较紧急,还请大佬们给点建议,非常感谢!~

以上的优化个人认为是合适的。
另外,可以考虑用3.4版本,3.4版本在你这个case中应该能有一些提升。

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