对基于 Gremlin 脚本的会话的支持 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

对基于 Gremlin 脚本的会话的支持

您可以将 Gremlin 会话与 Amazon Neptune 中的隐式事务结合使用。有关 Gremlin 会话的信息,请参阅 Ap TinkerPop ache 文档中的考虑会话。以下各节描述了如何在 Java 中使用 Gremlin 会话。

注意

此特征从 Neptune 引擎版本 1.0.1.0.200463.0 开始推出。

从 Nep tune 引擎版本 1.1.0 和 3.5.2 TinkerPop 版本开始,你也可以使用。Gremlin 事务

重要

目前,Neptune 可以保持基于脚本的会话打开的最长时间为 10 分钟。如果您未在此时间之前关闭会话,会话超时,其中的所有内容将回滚。

Gremlin 控制台上的 Gremlin 会话

如果在 Gremlin 控制台上创建不带 session 参数的远程连接,则将以无会话模式创建远程连接。在这种模式下,提交到服务器的每个请求本身都被视为完整事务,并且请求之间不保存状态。如果某个请求失败,只回滚该请求。

如果您的确使用 session 参数创建远程连接,则您创建的基于脚本的会话会持续,直到您关闭远程连接。每个会话由控制台生成并返回给您的唯一 UUID 标识。

以下是创建会话的控制台调用的示例。提交查询后,新的调用将关闭该会话并提交查询。

注意

必须始终关闭 Gremlin 客户端才能释放服务器端资源。

gremlin> :remote connect tinkerpop.server conf/neptune-remote.yaml session . . . . . . gremlin> :remote close

有关更多信息和示例,请参阅 TinkerPop 文档中的会话

您在会话期间运行的所有查询构成一个事务,直到所有查询成功并且您关闭远程连接后,该事务才会提交。如果某个查询失败,或者如果您未在 Neptune 支持的最大会话生命周期内关闭连接,则不会提交会话事务,并回滚其中的所有查询。

Gremlin 语言变体中的 Gremlin 会话

在 Gremlin 语言变体 (GLV) 中,您需要创建 SessionedClient 对象,以便在单个事务中发出多个查询,如下面的示例所示。

try { // line 1 Cluster cluster = Cluster.open(); // line 2 Client client = cluster.connect("sessionName"); // line 3 ... ... } finally { // Always close. If there are no errors, the transaction is committed; otherwise, it's rolled back. client.close(); }

上一示例中的第 3 行根据为所讨论的集群设置的配置选项创建 SessionedClient 对象。您传递到连接方法的 sessionName 字符串成为会话的唯一名称。为避免冲突,请为名称使用 UUID。

客户端在初始化时启动会话事务。仅当您调用 client.close( ) 时,才会提交在构成该会话时运行的所有查询。同样,如果单个查询失败,或者如果您未在 Neptune 支持的最大会话生命周期内关闭连接,则会话事务失败,并回滚其中的所有查询。

注意

必须始终关闭 Gremlin 客户端才能释放服务器端资源。

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(); } finally { if (tx.isOpen()) { tx.rollback(); } }