Gremlin 스크립트 기반 세션 지원 - Amazon Neptune

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

Gremlin 스크립트 기반 세션 지원

Amazon Neptune에서는 Gremlin 세션을 암시적 트랜잭션과 함께 사용할 수 있습니다. Gremlin 세션에 대한 자세한 내용은 TinkerPop Apache 설명서의 세션 고려를 참조하십시오. 아래 섹션에서는 Java에서 Gremlin 세션을 사용하는 방법을 설명합니다.

참고

이 기능은 Neptune 엔진 릴리스 1.0.1.0.200463.0부터 사용할 수 있습니다.

Neptune 엔진 릴리스 1.1.1.0 TinkerPop 및 버전 3.5.2부터 사용할 수도 있습니다. Gremlin 트랜잭션

중요

현재 Neptune에서 스크립트 기반 세션을 가장 길게 열어 둘 수 있는 시간은 10분입니다. 이 시간 전에 세션을 닫지 않으면 세션 시간이 초과되고 해당 세션 내 모든 것이 롤백됩니다.

Gremlin 콘솔의 Gremlin 세션

session 파라미터 없이 Gremlin 콘솔에서 원격 연결을 생성하는 경우에는 세션 없음 모드에서 원격 연결이 생성됩니다. 이 모드에서는 서버에 제출되는 각각의 요청이 그 자체로 완벽한 트랜잭션으로 처리되기 때문에 요청 간에 상태가 저장되지 않습니다. 요청이 실패하는 경우 해당 요청만 롤백됩니다.

session 파라미터를 사용하는 원격 연결을 생성하면 원격 연결을 종료할 때까지 지속되는 스크립트 기반 세션이 생성됩니다. 각 세션은 콘솔이 생성하고 사용자에게 반환하는 고유한 UUID로 식별됩니다.

다음은 세션을 생성하는 콘솔의 예제입니다. 쿼리가 제출되고 나면 또 다른 호출이 세션을 닫고 이러한 쿼리를 커밋합니다.

참고

서버 측 리소스를 릴리스하려면 Gremlin 클라이언트를 항상 닫아야 합니다.

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

자세한 내용 및 예제는 설명서의 세션을 참조하십시오. TinkerPop

세션 동안 실행되는 모든 쿼리는 쿼리가 성공적으로 수행되고 사용자가 원격 연결을 닫아야 커밋되는 단일 트랜잭션을 형성합니다. 쿼리가 실패하거나 사용자가 Neptune에서 지원하는 최대 세션 수명 내에 연결을 닫지 않으면 세션 트랜잭션이 커밋되지 않고 해당 트랜잭션 내 모든 쿼리가 롤백됩니다.

Gremlin Language Variant의 Gremlin 세션

다음 예제에서와 같이 GLV(Gremlin Language Variant)에서는 여러 쿼리를 단일 트랜잭션으로 발행하려면 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(); } }