执行查询以查找所有可达节点

时间:2019-12-17 15:23:13

标签: graph-databases gremlin amazon-neptune

我正在与Gremlin研究AWS Neptune,以构建权限系统。 该系统基本上具有三种类型的顶点:用户,权限和组。

  • 一个组具有 0..n 权限
  • 用户可以具有 0..n 个组
  • 用户可以直接连接到 0..n 权限
  • 一个用户可以连接到另一个用户,在这种情况下,它“继承”了该用户权限的
  • 一个组可以在另一个组内,也可以在另一个组内...等等。

我正在寻找一种性能查询,以查找给定用户的所有权限。

此图可能会变得非常庞大,因此请强调一下,我建立了一个17kk用户顶点图,为每个顶点创建10个随机边,然后创建了一些权限。

然后我用来获取所有权限的查询永远永远运行... n_n'

我正在尝试的只是:

g.V('u01')
    .repeat(out())
    .until(hasLabel('Permission'))
    .simplePath()

是否有更好的查询来实现?也许对于这种情况甚至更好的建模?

我当时在想,也许我的10个随机边创建了很多“毫无意义”的循环和连接,这就是查询缓慢的原因。有道理吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可能正在圈子里奔跑。您应该这样写:

g.V('u01')
    .repeat(out().simplePath())
    .until(hasLabel('Permission'))

out步骤中使用特定标签也是可取的,以避免遍历不相关的路径。