Amazon Neptune에 사용되는 Gremlin 표준 규정 준수 - Amazon Neptune

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

Amazon Neptune에 사용되는 Gremlin 표준 규정 준수

다음 섹션에서는 Gremlin의 Neptune 구현에 대한 개요와 Apache 구현과 어떻게 다른지 설명합니다. TinkerPop

Neptune은 일부 Gremlin 단계를 엔진에서 기본적으로 구현하고 다른 단계는 TinkerPop Apache Gremlin 구현을 사용하여 처리합니다 (참조). Amazon Neptune의 네이티브 Gremlin 단계 지원

참고

Gremlin 콘솔 및 Amazon Neptune에 표시된 이러한 구현 차이에 대한 확실한 예제는 빠른 시작의 Gremlin을 사용하여 Amazon Neptune에서 그래프에 액세스 섹션을 참조하세요.

Gremlin에 적용 가능한 표준

스크립트의 변수 및 파라미터

사전 바인딩된 변수와 관련된 경우 순회 객체 g는 Neptune에서 사전 바인딩되며 graph 객체는 지원되지 않습니다.

Neptune은 스크립트에서 Gremlin 변수 또는 파라미터화를 지원하지 않지만, 인터넷에서 다음과 같은 변수 선언이 포함된 Gremlin 서버용 샘플 스크립트를 자주 볼 수 있습니다.

String query = "x = 1; g.V(x)"; List<Result> results = client.submit(query).all().get();

쿼리를 제출할 때 파라미터화(또는 바인딩)를 사용하는 예제도 많이 있습니다. 예를 들면 다음과 같습니다.

Map<String,Object> params = new HashMap<>(); params.put("x",1); String query = "g.V(x)"; List<Result> results = client.submit(query).all().get();

일반적으로 파라미터 예제는 가능한 경우 파라미터화하지 않는다면 성능이 저하된다는 경고와 관련이 있습니다. 이러한 예제를 접할 수 TinkerPop 있는 것은 매우 많으며, 이들 모두 파라미터화의 필요성에 대해 충분히 납득이 가는 것 같습니다.

그러나 변수 선언 기능과 매개 변수화 기능 (경고 포함) 은 모두 TinkerPop 의 Gremlin Server를 사용하는 경우에만 적용됩니다. GremlinGroovyScriptEngine Gremlin 서버가 Gremlin의 gremlin-language ANTLR 문법을 사용하여 쿼리를 구문 분석하는 경우에는 적용되지 않습니다. ANTLR 문법은 변수 선언이나 파라미터화를 지원하지 않으므로, ANTLR을 사용할 때 파라미터화 실패에 대해 걱정할 필요가 없습니다. ANTLR 문법은 의 TinkerPop 새로운 구성 요소이므로 인터넷에서 접할 수 있는 오래된 콘텐츠에는 일반적으로 이러한 구분이 반영되지 않습니다.

Neptune은 쿼리 처리 엔진에서 GremlinGroovyScriptEngine대신 ANTLR 문법을 사용하므로 변수, 파라미터화 또는 bindings 속성을 지원하지 않습니다. 따라서 파라미터화 실패와 관련된 문제는 Neptune에 적용되지 않습니다. Neptune을 사용하면 일반적으로 파라미터화하는 쿼리를 있는 그대로 제출해도 안전합니다. 따라서 다음과 같이 성능 저하 없이 이전 예제를 단순화할 수 있습니다.

String query = "g.V(1)"; List<Result> results = client.submit(query).all().get();

TinkerPop 열거형

Neptune은 열거 값용으로 정규화된 클래스 이름을 지원하지 않습니다. 예를 들어, Groovy 요청에서는 single을 사용해야 하며, org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single은 사용하면 안 됩니다.

열거 유형은 파라미터 유형으로 결정됩니다.

다음 표에는 허용된 열거 값과 관련된 정식 이름이 나와 있습니다. TinkerPop

Java 코드

Neptune은 지원되는 Gremlin API 이외의 임의 Java 또는 Java 라이브러리 호출로 정의되는 메서드에 대한 호출을 지원하지 않습니다. 예를 들어, java.lang.*, Date()g.V().tryNext().orElseGet()는 허용되지 않습니다.

엘리먼트의 프로퍼티

Neptune은 요소의 속성을 반환하기 materializeProperties 위해 TinkerPop 3.7.0에 도입된 플래그를 지원하지 않습니다. 따라서 Neptune은 여전히 꼭짓점이나 모서리만 AND만 있는 참조로 반환합니다. id label

스크립트 실행

모든 쿼리는 g, 순회 객체로 시작해야 합니다.

문자열 쿼리 제출 시 여러 순회를 세미콜론(;)이나 줄 바꿈 문자(\n)로 구분하여 발급할 수 있습니다. 실행하려면 마지막을 제외한 모든 문장이 .iterate() 단계로 끝나야 합니다. 최종 순회 데이터만 반환됩니다. 참고로 GLV 쿼리 제출에는 이 내용이 적용되지 않습니다. ByteCode

세션

Neptune 세션은 10분으로 제한됩니다. 자세한 내용은 TinkerPop세션 Gremlin 스크립트 기반 세션 참조를 참조하십시오.

트랜잭션

Neptune은 각 Gremlin 순회가 시작될 때 새로운 트랜잭션을 열고 순회가 성공적으로 완료되면 트랜잭션을 닫습니다. 오류가 있으면 트랜잭션이 롤백됩니다.

세미콜론(;) 또는 줄 바꿈 문자(\n)로 구분된 여러 문장이 단일 트랜잭션에 포함됩니다. 마지막을 제외한 각 문장은 실행할 next() 단계로 끝나야 합니다. 최종 순회 데이터만 반환됩니다.

tx.commit()tx.rollback()을 사용하는 수동 트랜잭션은 지원되지 않습니다.

중요

이는 Gremlin 쿼리를 텍스트 문자열로 보내는 메서드에만 적용됩니다(Gremlin 트랜잭션 참조).

버텍스 및 엣지 ID

Neptune Gremlin 버텍스 및 엣지 ID는 String 유형이어야 합니다. 이러한 ID 문자열은 유니코드 문자를 지원하며 크기가 55MB를 초과할 수 없습니다.

사용자가 제공하는 ID가 지원되지만, 일반 사용에서는 선택 사항입니다. 버텍스나 엣지를 추가할 때 ID를 제공하지 않으면 Neptune은 UUID를 생성하여 "48af8178-50ce-971a-fc41-8c9a954cea62"와 같은 형식의 문자열로 변환합니다. 이러한 UUID는 RFC 표준을 준수하지 않으므로, 표준 UUID가 필요한 경우 외부에서 생성하여 버텍스나 엣지를 추가할 때 제공해야 합니다.

참고

Neptune Load 명령을 사용하려면 Neptune CSV 형식의 ~id 필드를 통해 ID를 제공해야 합니다.

사용자가 제공하는 ID

사용자가 제공하는 ID가 Neptune Gremlin에서 허용되는 조건은 다음과 같습니다.

  • 제공되는 ID는 선택사항입니다.

  • 버텍스 및 엣지만 지원됩니다.

  • String 유형만 지원됩니다.

사용자 지정 ID로 새 버텍스를 생성하려면 g.addV().property(id, 'customid')라는 id 키워드가 있는 property 단계를 사용합니다.

참고

id 키워드를 인용 부호로 묶지 마십시오. T.id를 가리킵니다.

모든 버텍스 ID는 고유해야 하고, 모든 엣지 ID는 고유해야 합니다. 하지만 Neptune은 버텍스 및 엣지가 동일한 ID를 갖도록 허용합니다.

g.addV()를 사용하여 새 버텍스를 만들려고 하는 경우 이 ID가 있는 버텍스가 이미 있으면 작업이 실패합니다. 버텍스의 새 레이블을 지정할 경우만 예외적으로 작업에 성공하지만 새 레이블과 기존 버텍스에 지정된 추가 속성을 추가합니다. 아무것도 덮어쓰기되지 않습니다. 새 버텍스가 생성되지 않았습니다. 버텍스 ID는 변경되지 않고 고유한 채로 유지됩니다.

예를 들어, 다음 Gremlin 콘솔 명령이 잇따라 발생합니다.

gremlin> g.addV('label1').property(id, 'customid') gremlin> g.addV('label2').property(id, 'customid') gremlin> g.V('customid').label() ==>label1::label2

버텍스 속성 ID

버텍스 속성 ID가 자동으로 생성되고, 쿼리 시 양수 또는 음수로 표시될 수 있습니다.

버텍스 속성의 카디널리티

Neptune은 세트 카디널리티 및 단일 카디널리티를 지원합니다. 따로 지정하지 않은 경우 세트 카디널리티가 선택됩니다. 즉, 속성 값을 설정하면 속성에 새 값이 추가되지만 값 세트에 없는 경우에만 추가됩니다. 이 값은 Set의 Gremlin 열거 값입니다.

List는 지원되지 않습니다. 속성 카디널리티에 대한 자세한 내용은 Gremlin의 Vertex 항목을 참조하십시오. JavaDoc

버텍스 속성 업데이트

값 세트에 값을 추가하지 않고 속성 값을 업데이트하려면 property 단계에서 single 카디널리티를 지정합니다.

g.V('exampleid01').property(single, 'age', 25)

그러면 속성의 기존 값이 모두 제거됩니다.

레이블

Neptune은 버텍스 하나에 여러 레이블을 지원합니다. 레이블을 생성할 때 ::로 구분하여 여러 레이블을 지정할 수 있습니다. 예를 들어, g.addV("Label1::Label2::Label3")은 세 가지 레이블을 버텍스에 추가합니다. hasLabel 단계는 세 가지 레이블인 hasLabel("Label1"), hasLabel("Label2"), hasLabel("Label3") 중 하나와 이 버텍스를 일치시킵니다.

중요

:: 구분 문자는 이 용도로만 사용됩니다. hasLabel 단계에서 여러 레이블을 지정할 수 없습니다. 예를 들어, hasLabel("Label1::Label2")은 어떤 것도 일치시키지 않습니다.

이스케이프 문자

Neptune은 Apache Groovy 언어 설명서의 특수 문자의 이스케이프 처리 섹션에 나오는 모든 이스케이프 문자를 해결합니다.

Groovy 제한

Neptune은 g로 시작하지 않는 Groovy 명령은 지원하지 않습니다. 여기에는 수식(예: 1+1), 시스템 호출(예: System.nanoTime()), 변수 정의(예: 1+1)가 포함됩니다.

중요

Neptune은 정규화된 클래스 이름을 지원하지 않습니다. 예를 들어, Groovy 요청에서는 single을 사용해야 하며, org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single은 사용하면 안 됩니다.

직렬화

Neptune은 요청된 MIME 유형에 기반한 다음 직렬화를 지원합니다.

MIME 유형 직렬화 구성

application/vnd.gremlin-v1.0+gryo

GryoMessageSerializerV1 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1]

application/vnd.gremlin-v1.0+gryo-stringd

GryoMessageSerializerV1 serializeResultToString: true}
application/vnd.gremlin-v3.0+gryo GryoMessageSerializerV3 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3]

application/vnd.gremlin-v3.0+gryo-stringd

GryoMessageSerializerV3 serializeResultToString: true

application/vnd.gremlin-v1.0+json

GraphSONMessageSerializerGremlinV1 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1]

application/vnd.gremlin-v2.0+json

GraphSONMessageSerializerV2(에서만 작동) WebSockets ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2]

application/vnd.gremlin-v3.0+json

GraphSONMessageSerializerV3

application/json

GraphSONMessageSerializerV3 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3]

application/vnd.graphbinary-v1.0

GraphBinaryMessageSerializerV1

Neptune은 이러한 다양한 시리얼 라이저 유형을 지원하지만 사용 지침은 매우 간단합니다. HTTP를 통해 Neptune에 연결하는 경우 GraphSon 3 대체 버전에서 내장된 유형을 사용하면 작업이 복잡해지므로 우선 사용을 application/vnd.gremlin-v3.0+json;types=false 권장합니다. Apache TinkerPop 드라이버를 사용하는 경우 기본값인 를 사용하는 것과 같이 아무 것도 선택할 필요가 없을 것입니다. application/vnd.graphbinary-v1.0 레거시 이유로 인해 나머지 형식은 그대로 유지됩니다.

참고

여기에 표시된 시리얼 라이저 표는 3.7.0 기준의 이름 지정을 나타냅니다. TinkerPop 이 변경 사항에 대해 자세히 알아보려면 업그레이드 설명서를 참조하십시오. TinkerPop Gryo 직렬화 지원은 3.4.3에서 더 이상 사용되지 않으며 3.6.0에서 공식적으로 제거되었습니다. Gryo를 명시적으로 사용하거나 기본적으로 Gryo를 사용하는 드라이버 버전을 사용 중인 경우에는 드라이버로 전환하거나 업그레이드해야 합니다. GraphBinary

Lambda 단계

Neptune은 Lambda 단계를 지원하지 않습니다.

지원되지 않는 Gremlin 메서드

Neptune은 다음 Gremlin 메서드를 지원하지 않습니다.

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.program(org.apache.tinkerpop.gremlin.process.computer.VertexProgram)

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.sideEffect(java.util.function.Consumer)

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.from(org.apache.tinkerpop.gremlin.structure.Vertex)

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.to(org.apache.tinkerpop.gremlin.structure.Vertex)

예를 들어 g.V().addE('something').from(__.V().next()).to(__.V().next()) 등의 순회는 허용되지 않습니다.

중요

이는 Gremlin 쿼리를 텍스트 문자열로 보내는 메서드에만 적용됩니다.

지원되지 않는 Gremlin 단계

Neptune은 다음 Gremlin 단계를 지원하지 않습니다.

  • Gremlin io() 단계는 Neptune에서 부분적으로만 지원됩니다. g.io((url)).read()에서와 같이 읽기 컨텍스트에서 사용할 수 있지만, 쓰기에는 사용할 수 없습니다.

Neptune의 Gremlin 그래프 기능

Neptune의 Gremlin 구현으로 graph 객체가 노출되지 않습니다. 다음 표에는 Gremlin 기능이 나열되어 있으며 Neptune이 해당 기능을 지원하는지 여부가 나와 있습니다.

graph 기능에 대한 Neptune 지원

지원되는 경우 Neptune 그래프 기능은 graph.features() 명령에서 반환되는 것과 동일합니다.

그래프 기능 활성화 여부
Transactions true
ThreadedTransactions false
Computer false
Persistence true
ConcurrentAccess true

변수 기능에 대한 Neptune 지원

변수 기능 활성화 여부
Variables false
SerializableValues false
UniformListValues false
BooleanArrayValues false
DoubleArrayValues false
IntegerArrayValues false
StringArrayValues false
BooleanValues false
ByteValues false
DoubleValues false
FloatValues false
IntegerValues false
LongValues false
MapValues false
MixedListValues false
StringValues false
ByteArrayValues false
FloatArrayValues false
LongArrayValues false

버텍스 기능에 대한 Neptune 지원

버텍스 기능 활성화 여부
MetaProperties false
DuplicateMultiProperties false
AddVertices true
RemoveVertices true
MultiProperties true
UserSuppliedIds true
AddProperty true
RemoveProperty true
NumericIds false
StringIds true
UuidIds false
CustomIds false
AnyIds false

버텍스 속성 기능에 대한 Neptune 지원

버텍스 속성 기능 활성화 여부
UserSuppliedIds false
AddProperty true
RemoveProperty true
NumericIds true
StringIds true
UuidIds false
CustomIds false
AnyIds false
Properties true
SerializableValues false
UniformListValues false
BooleanArrayValues false
DoubleArrayValues false
IntegerArrayValues false
StringArrayValues false
BooleanValues true
ByteValues true
DoubleValues true
FloatValues true
IntegerValues true
LongValues true
MapValues false
MixedListValues false
StringValues true
ByteArrayValues false
FloatArrayValues false
LongArrayValues false

엣지 기능에 대한 Neptune 지원

엣지 기능 활성화 여부
AddEdges true
RemoveEdges true
UserSuppliedIds true
AddProperty true
RemoveProperty true
NumericIds false
StringIds true
UuidIds false
CustomIds false
AnyIds false

엣지 속성 기능에 대한 Neptune 지원

엣지 속성 기능 활성화 여부
Properties true
SerializableValues false
UniformListValues false
BooleanArrayValues false
DoubleArrayValues false
IntegerArrayValues false
StringArrayValues false
BooleanValues true
ByteValues true
DoubleValues true
FloatValues true
IntegerValues true
LongValues true
MapValues false
MixedListValues false
StringValues true
ByteArrayValues false
FloatArrayValues false
LongArrayValues false