Gremlin 中是否有 SideEffect 的执行顺序保证

Is there any execution order guarantee for SideEffect in Gremlin

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

...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 步骤顺序执行。我不确定是否存在 Gremlin Strategy 可能 rewrite/re-order 该查询的情况。如果我找到任何东西,我会更新这个答案。

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 步骤的语义的文档,这绝对是我们应该在那里澄清的事情。