什么时候小鬼会议更好?



我知道无会话操作是使用 gremlin的首选方法。我想知道什么时候会话方法更好?

所以我可能会做类似的事情...

graph.addVertex("foo"(.property("name","bar"(

graph.traversal((.V((.has

("name","bar"(.as("f"(.addV("foo"(.property("name","baz"(.as("g"(.addE("test"(.from("f"(.to("g"(我经常做这种类型的操作。通常,事先还有一个查询(通常涉及合并(来检查节点(在我的示例中为 g(是否存在,如果不存在,则创建它。

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

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

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

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

执行基于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(....

最新更新