翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Neptune での Gremlin トランザクション
Gremlin トランザクションが実行されるコンテキストはいくつかあります。Gremlin を使用する際には、作業対象となるコンテキストとその意味を理解することが重要です。
-
Script-based
— リクエストは、次のようなテキストベースの Gremlin 文字列を使用して行われます。Java ドライバーと
Client.submit(
の使用。string
)Gremlin コンソールと
:remote connect
の使用。の使用HTTPAPI。
-
Bytecode-based
– リクエストは、Gremlin 言語バリアント () に典型的なシリアル化された Gremlinバイトコードを使用して行われますGLV。 例えば、Java ドライバー
g = traversal().withRemote(
を使用する場合などです。...
)
上記のコンテキストのどちらでも、リクエストがセッションレスまたはセッションにバインドされた状態で送信されるという追加のコンテキストがあります。
注記
Gremlin トランザクションは、サーバー側のリソースを解放できるように、常にコミットまたはロールバックする必要があります。
セッションレスリクエスト
セッションレスの場合、リクエストは 1 回のトランザクションに相当します。
スクリプトの場合、1 回のリクエストで送信された 1 つ以上の Gremlin ステートメントが 1 つのトランザクションとしてコミットまたはロールバックされることを意味します。例:
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();
セッションにバインドされたリクエスト
セッションにバインドすると、1 つのトランザクションのコンテキスト内で複数のリクエストを適用できます。
スクリプトの場合、すべてのグラフ操作を連結して 1 つの埋め込み文字列値にする必要がないということです。
Cluster cluster = Cluster.open(); Client client = cluster.connect(sessionName); // session try { // 3 vertex additions in one request/transaction: client.submit("g.addV();g.addV();g.addV()").all().get(); } finally { client.close(); } try { // 3 vertex additions in three requests, but one transaction: client.submit("g.addV()").all().get(); // starts a new transaction with the same sessionName client.submit("g.addV()").all().get(); client.submit("g.addV()").all().get(); } finally { client.close(); }
バイトコードの場合、 の後 TinkerPop 3.5.x
、トランザクションを明示的に制御し、セッションを透過的に管理できます。Gremlin Language Variants (GLV) は、Gremlin の へのtx()
構文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(); } finally { if (tx.isOpen()) { tx.rollback(); } }
上記の例は Java で記述されていますが、Python、Javascript、および でこのtx()
構文を使用することもできますNET。
警告
セッションレス読み取り専用クエリはSNAPSHOT分離されて実行されますが、明示的なトランザクション内で実行される読み取り専用クエリはSERIALIZABLE分離されて実行されます。SERIALIZABLE
分離下で実行される読み取り専用クエリは、SNAPSHOT
分離下で実行されるクエリとは異なり、オーバーヘッドが大きくなり、同時書き込みによってブロックしたり、ブロックされたりする可能性があります。