对于给定的遍历 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')
添加到所有访问过的顶点和边。
您可以考虑两种方法。
对于 TraversalStrategy
,您可以开发一个类似于 SubgraphStrategy
或 PartitionStrategy
的程序,它会获取您的用户构造权限,然后在之后自动注入必要的 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。边不允许这些,因此您只能在顶点上标记这样的 属性。
我们在每个节点和边上将用户权限标记为 属性(SET 基数)。想知道对给定遍历 gremlin 查询的所有已访问 nodes/edges 应用 has 步骤的最佳方法是什么。
就像一个非常简单的遍历查询: // 从伦敦希思罗机场 (LHR) 飞往美国机场的航班
g.V().has('code','LHR').out('route').has('country','US').values('code')
在使用上述查询遍历时,将has('permission', 'team1')
添加到所有访问过的顶点和边。
您可以考虑两种方法。
对于 TraversalStrategy
,您可以开发一个类似于 SubgraphStrategy
或 PartitionStrategy
的程序,它会获取您的用户构造权限,然后在之后自动注入必要的 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。边不允许这些,因此您只能在顶点上标记这样的 属性。