gremlin - Tinkerpop3 DSE 中的交易

标签 gremlin tinkerpop3 datastax-enterprise-graph

这是一个通过 TinkerPop3 Java API 理解 DSE 图中事务语义的问题

据我了解,当您在单个事务中执行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()步骤“杀死”您要删除的遍历器,这意味着 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]

关于gremlin - Tinkerpop3 DSE 中的交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49254489/

相关文章:

javascript - gremlin javascript 中的 gremlin 查询相当于什么?

java - TP3 : Gremlin traversal and adding edges remotely with Java client

java - DSE 图更多线程导致响应时间变慢

java - 从遍历中获取顶点或路径时,Tinkerpop 非常慢

cassandra - 带 Java 驱动程序的 DSE 图,如何添加边

gremlin - 在 Gremlin 中的现有节点之间添加边

gremlin - 如何可视化图表数据?

datastax - Gremlin:在单个 gremlin 查询中添加边和删除边

titan - 如何使用 Gremlin/Tinkerpop 在 IBM Graph (TitanDB) 中检索用户源并对其进行分页

datastax - 从 Datastax 数据中心删除种子节点