Neptune 的 Gremlin 交易 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Neptune 的 Gremlin 交易

Gremlin 有几种背景交易执行。在使用 Gremlin 时,了解你正在处理的上下文以及它的影响是什么非常重要的:

  • Script-based— 请求使用基于文本的 Gremlin 字符串进行,如下所示:

    • 使用 Java 驱动程序和Client.submit(string).

    • 使用 Grelin 控制台和:remote connect.

    • 使用 HTTP API。

  • Bytecode-based— 请求使用序列化的 Gremlin 字节码(典型的Gremlin 语言变体(GLV)。

    例如,使用 Java 驱动程序,g = traversal().withRemote(...).

对于上述任何一种上下文,都有以无会话形式发送或绑定到会话的请求的附加上下文。

无会话请求

无会话时,请求等同于单笔交易。

对于脚本来说,这意味着在单个请求中发送的一个或多个 Gremlin 语句将作为单个事务提交或回滚。例如:

Cluster cluster = Cluster.open(); Client client = cluster.connect(); // sessionless // 3 vertex additions in one request/transaction: client.submit("g.addV();g.addV();g.addV()").all().get();

对于字节码,会为从中生成和执行的每个遍历发出无会话请求g

GraphTraversalSource g = traversal().withRemote(...); // 3 vertex additions in three individual requests/transactions: g.addV().iterate(); g.addV().iterate(); g.addV().iterate(); // 3 vertex additions in one single request/transaction: g.addV().addV().addV().iterate();

绑定到会话的请求

绑定到会话时,可以在单个事务的上下文中应用多个请求。

对于脚本来说,暗示不需要将所有图表操作连接到一个嵌入式字符串值中:

Cluster cluster = Cluster.open(); Client client = cluster.connect(sessionName); // session // 3 vertex additions in one request/transaction: client.submit("g.addV();g.addV();g.addV()").all().get(); client.close(); // 3 vertex additions in three requests, but one transaction: client.submit("g.addV()").all().get(); client.submit("g.addV()").all().get(); client.submit("g.addV()").all().get(); client.close();

对于字节码,之后 TinkerPop 3.5.x,可以明确控制交易,会话可以透明地管理。Gremlin 语言变体(GLV)支持 Gremlintx()语法commit()要么rollback()交易如下:

GraphTraversalSource g = traversal().withRemote(conn); Transaction tx = g.tx(); // Spawn a GraphTraversalSource from the Transaction. // Traversals spawned from gtx are executed within a single transaction. GraphTraversalSource gtx = tx.begin(); try { gtx.addV('person').iterate(); gtx.addV('software').iterate(); tx.commit(); } catch (Exception ex) { tx.rollback(); }

尽管上面的例子是用 Java 编写的,但你也可以使用它tx()Python、Javascript 和 .NET 中的语法。