gremlin 会议什么时候更好?

When are gremlin sessions better?

我了解 sessionless 操作是使用 gremlin 的首选方法。我想知道什么时候 sessioned 方法更好?

所以我可能会做类似...

graph.addVertex("foo").属性("name","bar")

graph.traversal().V().has("name","bar").as("f").addV("foo"). 属性("name","baz").as("g").addE("test").from("f").to("g")

我经常做这种手术。通常还有一个查询(通常涉及合并)预先检查节点(在我的示例中为 g)是否存在,如果不存在则创建它。

所以我想知道 session 是否可能更好,因为我可以持有以前顶点的句柄,只需将新节点附加到它们而无需查找费用。

随时告诉我为什么我在做的其他事情上是错的。我只是想让事情变得更快。

首先,我会避免使用 addVertex() 并坚持使用 addV() - 查看更多详细信息

关于您的问题,我认为利用会话的唯一时机是您有某种需要显式控制事务的加载操作,并且您没有使用基于 JVM 的语言。即便如此,我可能会考虑其他处理方法,完全避免会话。您最终会得到一个不太便携的解决方案,因为有许多图形系统甚至不直接支持它们(例如 Neptune)。

执行基于 T.id 的查找的成本应该非常快,因此在会话中保存请求之间的顶点确实不会大大提高性能。即使你在请求之间保留顶点,你仍然需要将顶点传递到你的遍历中,所以你仍然有查找 - 我不确定我看到那里的成本差异。

// first request
v = g.addV(...).property(...).next()

// second request
g.V(v).addE(....

// third request
g.V(v).addE(....

上面的应该不会比:

快多少
// first request - returns id=1
g.addV(...).property(...).id().next()

// second request - where "1" is just passed in on the next request as a parameter
g.V(1).addE(....

// third request
g.V(1).addE(....