对于给定的遍历 gremlin 查询,如何在所有已访问的 nodes/edges 上应用静态步骤

How to apply a static has step on all the visited nodes/edges for a given traversal gremlin query

我们在每个节点和边上将用户权限标记为 属性(SET 基数)。想知道对给定遍历 gremlin 查询的所有已访问 nodes/edges 应用 has 步骤的最佳方法是什么。

就像一个非常简单的遍历查询: // 从伦敦希思罗机场 (LHR) 飞往美国机场的航班

g.V().has('code','LHR').out('route').has('country','US').values('code')

在使用上述查询遍历时,将has('permission', 'team1')添加到所有访问过的顶点和边。

您可以考虑两种方法。

  1. 写一个custom TraversalStrategy
  2. 开发一个Gremlin DSL

对于 TraversalStrategy,您可以开发一个类似于 SubgraphStrategyPartitionStrategy 的程序,它会获取您的用户构造权限,然后在之后自动注入必要的 has() 步骤out() / in() 排序步骤。这里的缺点是你的 TraversalStrategy 必须用 JVM 语言编写,如果使用 Gremlin Server 必须在服务器上安装。如果您打算以任何方式从 client-side 配置此 TraversalStrategy,则您需要构建自定义序列化程序才能实现。

对于 DSL,您将为 out() / in() 类步骤创建新的导航步骤,并且它们会插入导航步骤和 has() 步骤的适当组合。 DSL 方法很好,因为你可以用任何编程语言编写它并且它可以工作,但它不允许 server-side 配置,你必须始终确保客户端在查询图形时使用 DSL。

We are stamping user permission as a property (of SET cardinality) on each nodes and edges.

最后一点,我认为“SET 基数”是指 multi-properties。边不允许这些,因此您只能在顶点上标记这样的 属性。