【问题标题】:When are gremlin sessions better?gremlin 会话何时更好?
【发布时间】:2018-10-21 07:39:56
【问题描述】:

我了解无会话操作是使用 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)是否存在,如果不存在则创建它。

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

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

【问题讨论】:

    标签: gremlin titan janusgraph gremlin-server


    【解决方案1】:

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

    至于您的问题,我认为利用会话的唯一时间是,如果您有某种加载操作需要对事务进行显式控制,并且您没有使用基于 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(....
    

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2011-12-08
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 2012-06-26
      • 2011-04-05
      • 2021-12-03
      • 1970-01-01
      相关资源
      最近更新 更多