Tinkerpop3 DSE 中的交易
Transactions in Tinkerpop3 DSE
这是一个通过 TinkerPop3 理解 DSE 图中交易语义的问题 Java API
据我了解,当您有 DseSession.executeGraph(String query)
时,是在单个事务中执行的。
但是使用 TinkerPop3 Java API 实现相同目标的机制是什么?
假设我想添加一个顶点,然后删除一些边,然后添加一个新的顶点等,
我试过了
g.V("{~label=company, id=12345}").drop().addV("company").property("id", "1").next()
这没有按我的预期工作。 (在一次交易中删除公司并添加公司)。第一个顶点确实被删除了,但是从未创建新公司。
我遇到了以下异常
Exception in thread "main" java.util.NoSuchElementException
at com.datastax.dse.graph.internal.DseRemoteTraversal.nextTraverser(DseRemoteTraversal.java:60)
drop()
步骤 "kills" 您正在删除的遍历器,这意味着 drop()
没有返回任何内容。你可以看到,如果你试试这个:
gremlin> g.V().has('name','marko').drop().next()
java.util.NoSuchElementException
Type ':help' or ':h' for help.
Display stack trace? [yN]
如果没有遍历器,就没有任何东西可以提供给您接下来的 addV()
步骤。可能有更好的方法来执行此操作,但您可以通过使用 inject()
添加一个一次性值作为遍历器来解决该问题,该遍历器将馈送到您的 addV()
中。在这种情况下,您删除了一个东西,因此您需要将一个遍历器放回原处以触发对 addV()
的单个调用,因此:
gremlin> g.V().has('name','marko').drop().
......1> inject(1).
......2> addV('person').property('name','stephen').next()
==>v[13]
我也想知道这是否是一个很好的方法:
gremlin> g.V().has('name','marko').
......1> union(drop(),
......2> addV('person').property('name','stephen'))
==>v[13]
这是一个通过 TinkerPop3 理解 DSE 图中交易语义的问题 Java API
据我了解,当您有 DseSession.executeGraph(String query)
时,是在单个事务中执行的。
但是使用 TinkerPop3 Java API 实现相同目标的机制是什么? 假设我想添加一个顶点,然后删除一些边,然后添加一个新的顶点等,
我试过了
g.V("{~label=company, id=12345}").drop().addV("company").property("id", "1").next()
这没有按我的预期工作。 (在一次交易中删除公司并添加公司)。第一个顶点确实被删除了,但是从未创建新公司。
我遇到了以下异常
Exception in thread "main" java.util.NoSuchElementException
at com.datastax.dse.graph.internal.DseRemoteTraversal.nextTraverser(DseRemoteTraversal.java:60)
drop()
步骤 "kills" 您正在删除的遍历器,这意味着 drop()
没有返回任何内容。你可以看到,如果你试试这个:
gremlin> g.V().has('name','marko').drop().next()
java.util.NoSuchElementException
Type ':help' or ':h' for help.
Display stack trace? [yN]
如果没有遍历器,就没有任何东西可以提供给您接下来的 addV()
步骤。可能有更好的方法来执行此操作,但您可以通过使用 inject()
添加一个一次性值作为遍历器来解决该问题,该遍历器将馈送到您的 addV()
中。在这种情况下,您删除了一个东西,因此您需要将一个遍历器放回原处以触发对 addV()
的单个调用,因此:
gremlin> g.V().has('name','marko').drop().
......1> inject(1).
......2> addV('person').property('name','stephen').next()
==>v[13]
我也想知道这是否是一个很好的方法:
gremlin> g.V().has('name','marko').
......1> union(drop(),
......2> addV('person').property('name','stephen'))
==>v[13]