本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
支援 Gremlin 指令碼型工作階段
您可以在 Amazon Neptune 中使用 Gremlin 工作階段搭配隱含交易。如需 Gremlin 工作階段的相關資訊,請參閱 Apache 文件中的考慮工作階段
注意
此功能從 Neptune 引擎版本 1.0.1.0.200463.0開始可用。
從 Neptune 引擎 1.1.1.0 版和 3.5.2 TinkerPop 版開始,您也可以使用 Gremlin 交易。
重要
目前 Neptune 可保持指令碼型工作階段開啟的最長時間是 10 分鐘。如果不在此時前關閉工作階段,工作階段會逾時,並轉返其中所有內容。
Gremlin 主控台上的 Gremlin 工作階段
如果您在 Gremlin 主控台建立遠端連線,而沒有 session
參數,則遠端連線會以「無工作階段」模式建立。在此模式中,每個提交至伺服器的請求本身都會視為完整交易,而且請求之間不會儲存狀態。如果請求失敗,只會轉返該請求。
如果您建立確實會使用 session
參數的遠端連線,則您建立的指令碼型工作階段會持續到您關閉遠端連線為止。每個工作階段都會由UUID主控台產生並傳回給您的唯一 來識別。
以下是建立工作階段的主控台呼叫範例。提交查詢之後,另一個呼叫會關閉工作階段並遞交查詢。
注意
Gemlin 用戶端必須始終關閉才能釋出伺服器端資源。
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 支援的最長工作階段生命週期內關閉連線,則工作階段交易會失敗,並轉返其中所有查詢。
注意
Gemlin 用戶端必須始終關閉才能釋出伺服器端資源。
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(); } }