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

时间:2019-07-04 08:46:55

标签: amazon-neptune

在Amazon Neptune中,我想在Java中将多个Gremlin命令作为单个事务运行。该文档说不支持tx.commit()和tx.rollback()。这建议-单笔交易中包含用分号(;)或换行符(\ n)分隔的多个语句。

文档中的示例显示了Java支持Gremlin,但我不理解如何“用分号分隔多个语句”

GraphTraversalSource g = traversal()。withRemote(DriverRemoteConnection.using(cluster));

    // 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();

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您所指的doc用于使用“字符串”模式进行查询提交。在您的方法中,通过使用图形遍历源的远程实例(“ g”对象)来使用“字节码”模式。相反,您应该通过客户端对象提交字符串脚本

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

答案 2 :(得分:0)

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()...