【发布时间】:2019-02-24 12:12:31
【问题描述】:
虽然我了解 Bulking 的原理,但我很想知道机器是如何从您的编程角度实现这一点的。如何检测多个 Traverser 在同一个节点上,以决定对其进行合并和批量处理。用于检测特定情况需要批量的算法是否有任何描述。
另外,会触发批量的显式步骤是什么。是否有任何指令可以添加到遍历中,使批量显式发生?
【问题讨论】:
标签: gremlin
虽然我了解 Bulking 的原理,但我很想知道机器是如何从您的编程角度实现这一点的。如何检测多个 Traverser 在同一个节点上,以决定对其进行合并和批量处理。用于检测特定情况需要批量的算法是否有任何描述。
另外,会触发批量的显式步骤是什么。是否有任何指令可以添加到遍历中,使批量显式发生?
【问题讨论】:
标签: gremlin
膨胀通常与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)]
【讨论】:
在这里,在上面的@stephen 评论之后,我只想分享一个博客链接,其中深入解释了著名的LazyBarrierStrategy
【讨论】: