Neptune에서의 Gremlin 트랜잭션 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Neptune에서의 Gremlin 트랜잭션

Gremlin 트랜잭션이 실행되는 컨텍스트는 여러 가지가 있습니다. Gremlin을 사용할 때는 작업 중인 컨텍스트와 그 의미를 이해하는 것이 중요합니다.

  • Script-based   –   요청은 다음과 같은 텍스트 기반 Gremlin 문자열을 사용하여 이루어집니다.

    • Java 드라이버 및 Client.submit(string) 사용.

    • Gremlin 콘솔 및 :remote connect 사용.

    • HTTP API 사용.

  • Bytecode-based   –   요청은 Gremlin Language Variants(GLV)의 직렬화된 일반 Gremlin 바이트코드를 사용하여 이루어집니다.

    Java 드라이버 g = traversal().withRemote(...)를 사용하는 경우를 예로 들 수 있습니다.

위 컨텍스트 중 하나에는 세션 없이 또는 세션에 바인딩된 상태로 전송되는 요청의 추가 컨텍스트가 있습니다.

참고

Gremlin 트랜잭션은 항상 커밋되거나 롤백되어야 서버 측 리소스를 릴리스할 수 있습니다.

세션 없는 요청

세션이 없는 경우 요청은 단일 트랜잭션과 동일합니다.

스크립트의 경우 단일 요청으로 전송된 하나 이상의 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 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, .NET에서도 이 tx() 구문을 사용할 수 있습니다.

주의

세션 없는 읽기 전용 쿼리는 SNAPSHOT 격리 상태에서 실행되지만, 명시적 트랜잭션 내에서 실행되는 읽기 전용 쿼리는 SERIALIZABLE 격리 상태에서 실행됩니다. SERIALIZABLE 격리 상태에서 실행되는 읽기 전용 쿼리는 SNAPSHOT 격리 상태에서 실행되는 쿼리와 달리 높은 오버헤드를 유발하고 동시 쓰기를 차단하거나 이로 인해 차단될 수 있습니다.