如何 运行 多个 gremlin 命令作为一个事务?

How to run multiple gremlin commands as a single transaction?

在 Amazon Neptune 中,我想 运行 Java 中的多个 Gremlin 命令作为单个事务。该文件说 tx.commit() 和 tx.rollback() 不受支持。它暗示了这一点——由分号 (;) 或换行符 (\n) 分隔的多个语句包含在单个事务中。

文档中的示例显示 Java 支持 Gremlin,但我不明白如何 "Multiple statements separated by a semicolon"

GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using(簇));

    // Add a vertex.
    // Note that a Gremlin terminal step, e.g. next(), is required to make a request to the remote server.
    // The full list of Gremlin terminal steps is at https://tinkerpop.apache.org/docs/current/reference/#terminal-steps
    g.addV("Person").property("Name", "Justin").next();

    // Add a vertex with a user-supplied ID.
    g.addV("Custom Label").property(T.id, "CustomId1").property("name", "Custom id vertex 1").next();
    g.addV("Custom Label").property(T.id, "CustomId2").property("name", "Custom id vertex 2").next();

    g.addE("Edge Label").from(g.V("CustomId1")).to(g.V("CustomId2")).next();

你说的doc是使用"string"方式提交查询。在您的方法中,您通过使用图形遍历源("g" 对象)的远程实例来使用 "bytecode" 模式。相反,您应该通过客户端对象提交字符串脚本

Client client = gremlinCluster.connect();
client.submit("g.V()...iterate(); g.V()...iterate(); g.V()...");  

您还可以使用 SessionedClient,它会 运行 在 close() 时同一事务中的所有查询。

更多信息在这里:https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-sessions.html#access-graph-gremlin-sessions-glv

Gremlin sessions

Java Example

获取集群对象后,

String sessionId = UUID.randomUUID().toString();
Client client = cluster.connect(sessionId);
client.submit(query1);
client.submit(query2);
.
.
.
client.submit(query3);
client.close();

当你 运行 .close() 时,所有的突变都会被提交。

您还可以捕获来自查询的响应 reference

List<Result> results = client.submit(query);
results.stream()...