Gremlin 小精灵遍历扩展(OLTP)

Gremlin 小精灵遍历扩展(OLTP),gremlin,Gremlin,虽然我理解膨胀的原理,但我很想知道机器是如何从编程的角度实现这一点的。如何检测多个遍历器位于同一节点上,以决定合并和批量它们。是否有关于用于检测特定情况需要批量的算法的描述 另外,什么是会触发批量的explicits步骤。是否有任何可以添加到遍历中的指令可以使批量显式发生?批量通常发生在barrier()步骤中,并在TinkerPop的参考文档中进行了讨论。大多数人不会在他们的小精灵写作中直接使用barrier()(尽管你可以),因为TinkerPop中内置了各种遍历策略(例如Lazybrier

虽然我理解膨胀的原理,但我很想知道机器是如何从编程的角度实现这一点的。如何检测多个遍历器位于同一节点上,以决定合并和批量它们。是否有关于用于检测特定情况需要批量的算法的描述


另外,什么是会触发批量的explicits步骤。是否有任何可以添加到遍历中的指令可以使批量显式发生?

批量通常发生在
barrier()
步骤中,并在TinkerPop的参考文档中进行了讨论。大多数人不会在他们的小精灵写作中直接使用
barrier()
(尽管你可以),因为TinkerPop中内置了各种遍历策略(例如
LazybrierStrategy
),它们会尝试在可能有好处的地方自动将它们注入遍历

通过在遍历过程中执行
explain()
,您可以看到在何处/何时插入
barrier()
步骤:

gremlin> g.V().out().both().explain()
==>Traversal Explanation
=======================================================================================================================================
Original Traversal                 [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]

ConnectiveStrategy           [D]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
IncidentToAdjacentStrategy   [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
MatchPredicateStrategy       [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
RepeatUnrollStrategy         [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
PathRetractionStrategy       [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
FilterRankingStrategy        [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
InlineFilterStrategy         [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
AdjacentToIncidentStrategy   [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
CountStrategy                [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
LazyBarrierStrategy          [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]
TinkerGraphCountStrategy     [P]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]
TinkerGraphStepStrategy      [P]   [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]
ProfileStrategy              [F]   [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]
StandardVerificationStrategy [V]   [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]

Final Traversal                    [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]

膨胀通常与
barrier()
步骤有关,TinkerPop的参考文档中对此进行了讨论。大多数人不会在他们的小精灵写作中直接使用
barrier()
(尽管你可以),因为TinkerPop中内置了各种遍历策略(例如
LazybrierStrategy
),它们会尝试在可能有好处的地方自动将它们注入遍历

通过在遍历过程中执行
explain()
,您可以看到在何处/何时插入
barrier()
步骤:

gremlin> g.V().out().both().explain()
==>Traversal Explanation
=======================================================================================================================================
Original Traversal                 [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]

ConnectiveStrategy           [D]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
IncidentToAdjacentStrategy   [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
MatchPredicateStrategy       [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
RepeatUnrollStrategy         [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
PathRetractionStrategy       [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
FilterRankingStrategy        [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
InlineFilterStrategy         [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
AdjacentToIncidentStrategy   [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
CountStrategy                [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), VertexStep(BOTH,vertex)]
LazyBarrierStrategy          [O]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]
TinkerGraphCountStrategy     [P]   [GraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]
TinkerGraphStepStrategy      [P]   [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]
ProfileStrategy              [F]   [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]
StandardVerificationStrategy [V]   [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]

Final Traversal                    [TinkerGraphStep(vertex,[]), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex)]

在这里,在上面的@stephen comment之后,我只想分享一个指向一个博客的链接,其中一个深入解释著名的

在这里,在上面的@stephen comment之后,我只想分享一个指向一个博客的链接,其中一个深入解释著名的