graph - 对于给定的遍历 gremlin 查询,如何在所有访问过的节点/边上应用静态步骤

标签 graph gremlin janusgraph gremlin-server

我们将用户权限标记为每个节点和边上的属性(SET 基数)。想知道对于给定的遍历 gremlin 查询,在所有访问过的节点/边上应用 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 的策略,它将获取您的用户构造权限,然后自动注入(inject)必要的权限has() 步骤在 out()/in() 种步骤之后。这里的缺点是您的 TraversalStrategy 必须用 JVM 语言编写,并且如果使用 Gremlin Server 则必须安装在服务器上。如果您打算以任何方式从客户端配置此 TraversalStrategy,您将需要构建自定义序列化器才能实现这一点。

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

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

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

关于graph - 对于给定的遍历 gremlin 查询,如何在所有访问过的节点/边上应用静态步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63684159/

相关文章:

c# - JanusGraph.net C#

algorithm - 多重图中的循环检测

algorithm - 树的每对顶点之间的最大流量之和

java - cpu/内存绑定(bind)环境中大图的最佳数据结构

javascript - jquery donut 饼图不显示页面

graph - 将Rexster(titan 0.4)查询迁移到Gremlin Server(Titan 1.0)查询

Javascript 如何从以 EnumValue 作为键的 Map 中检索值

gremlin 获取与给定节点直接或间接连接的所有节点

scala - Scala 中的 JanusGraph 索引

java - 对 gremlin 服务器使用 gremlin 遍历 (Tinkergraph)