【问题标题】:Gremlin Traversal Bulking (OLTP)Gremlin 遍历膨胀 (OLTP)
【发布时间】:2019-02-24 12:12:31
【问题描述】:

虽然我了解 Bulking 的原理,但我很想知道机器是如何从您的编程角度实现这一点的。如何检测多个 Traverser 在同一个节点上,以决定对其进行合并和批量处理。用于检测特定情况需要批量的算法是否有任何描述。

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

【问题讨论】:

    标签: gremlin


    【解决方案1】:

    膨胀通常与barrier() 步骤相关,并在 TinkerPop 的参考文档here 中进行了一些讨论。大多数人不会在他们的 Gremlin 写作中直接使用barrier()(尽管你可以),因为 TinkerPop 中内置的各种遍历策略(例如LazyBarrierStrategy)会尝试将它们自动注入到遍历中他们可能会做一些事情的地方好的。

    您可以通过在遍历中执行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)]
    

    【讨论】:

      【解决方案2】:

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

      【讨论】: