Gremlin中的SideEffect是否有任何执行命令保证



我有一点Gremlin.Net代码,可以将一个顶点复制到一个新的顶点,将旧边标记为"结束",链接新顶点(克隆(并更新其中的一些属性。忽略片段中我自己的DSL代码,我的问题是,我能依赖这些SideEffects的顺序吗?我需要"更新"步骤来运行最后一个

...AddV().Property("label", __.Select<Vertex>("existing").Label()).As("clone") // new vertex
.SideEffect(__
.Select<Vertex>("existing").Properties<VertexProperty>().As("p")
.Select<Vertex>("clone")
.Property(__.Select<VertexProperty>("p").Key(), __.Select<VertexProperty>("p").Value<object>()))
.SideEffect(__
.Select<Vertex>("existing").InE(DbLabels.ComponentEdge).As("ine")
.MarkToDate(operationTime)
.AddE(linkedEdgeLabel).From("parent").To("clone")
.MarkFromDate(operationTime))
.SideEffect(__
.Select<Vertex>("clone").UpdateVertexPropertiesUnchecked(propertyDict));

如果不是,这样做更好吗?

我不确定是否有记录表明它们是按顺序执行的,但我认为这是一个合理的假设,因为像下面这样的查询绝对需要按sideEffect步骤顺序执行。我不确定是否存在GremlinStrategy可能重写/重新排序该查询的任何情况。如果我发现了什么,我会更新这个答案。

gremlin> g.V(44).values('runways')
==>3
gremlin> g.V(44).sideEffect(properties('runways').drop()).sideEffect(property(set,'runways',99)).values('runways')
==>99
gremlin> g.V(44).values('runways')
==>99     

在一天结束时,最好与您正在使用的图形存储的提供商联系。也就是说,在TinkerPop社区中,我们正在努力显著改进每个Gremlin步骤的语义文档,这肯定是我们应该澄清的。

最新更新