Gremlin을 사용하여 Amazon Neptune의 그래프 데이터 액세스 - Amazon Neptune

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

Gremlin을 사용하여 Amazon Neptune의 그래프 데이터 액세스

Gremlin 콘솔을 사용하여 REPL(read-eval-print loop) 환경에서 TinkerPop 그래프 및 쿼리를 실험할 수 있습니다.

다음 자습서에서는 Gremlin 콘솔을 사용하여 Neptune 그래프에 버텍스, 엣지, 속성 등을 추가하는 방법을 안내하고 Neptune별 Gremlin 구현의 몇 가지 차이점을 강조합니다.

참고

이 예제에서는 다음을 완료했다고 가정합니다.

Gremlin 콘솔 사용
  1. 디렉터리를 Gremlin 콘솔 파일의 압축을 푼 폴더로 변경합니다.

    cd apache-tinkerpop-gremlin-console-3.7.2
  2. 다음 명령을 입력하여 Gremlin 콘솔을 실행합니다.

    bin/gremlin.sh

    다음 결과가 표시됩니다.

    \,,,/ (o o) -----oOOo-(3)-oOOo----- plugin activated: tinkerpop.server plugin activated: tinkerpop.utilities plugin activated: tinkerpop.tinkergraph gremlin>

    이제 gremlin> 프롬프트가 표시됩니다. 이 프롬프트에 나머지 단계를 입력합니다.

  3. gremlin> 프롬프트에 다음을 입력하여 Neptune DB 인스턴스에 연결합니다.

    :remote connect tinkerpop.server conf/neptune-remote.yaml
  4. gremlin> 프롬프트에 다음을 입력하여 원격 모드로 전환합니다. 그러면 모든 Gremlin 쿼리가 원격 연결로 전송됩니다.

    :remote console
  5. 레이블 및 속성이 포함된 버텍스를 추가합니다.

    g.addV('person').property('name', 'justin')

    버텍스에는 GUID가 포함된 string ID가 지정됩니다. Neptune에서 모든 버텍스 ID는 문자열입니다.

  6. 사용자 지정 id가 포함된 버텍스를 추가합니다.

    g.addV('person').property(id, '1').property('name', 'martin')

    id 속성은 따옴표로 묶여 있지 않습니다. 이 속성은 버텍스의 ID에 대한 키워드입니다. 여기에서 버텍스 ID는 숫자 1이 포함된 문자열입니다.

    일반적인 속성 이름은 따옴표로 묶여 있어야 합니다.

  7. 속성이 없는 경우 속성 변경 또는 속성을 추가합니다.

    g.V('1').property(single, 'name', 'marko')

    여기에서는 이전 단계의 버텍스에 대한 name 속성을 변경합니다. 이로써 name 속성에서 기존 값이 모두 제거됩니다.

    single을 지정하지 않았다면 그 대신에 name 속성에 값을 추가합니다(아직 추가하지 않은 경우).

  8. 속성에 이미 값이 있는 경우 속성을 추가합니다.

    g.V('1').property('age', 29)

    Neptune에서는 세트 카디널리티를 기본 작업으로 사용합니다.

    이 명령어를 실행하면 29라는 값이 포함된 age 속성이 추가되지만, 기존 값이 대치되는 것은 아닙니다.

    age 속성에 이미 값이 있는 경우 이 명령은 속성에 29를 추가합니다. 예를 들어 age 속성이 27이라면 새 값은 [ 27, 29 ]이 됩니다.

  9. 다음과 같이 여러 버텍스를 추가합니다.

    g.addV('person').property(id, '2').property('name', 'vadas').property('age', 27).iterate() g.addV('software').property(id, '3').property('name', 'lop').property('lang', 'java').iterate() g.addV('person').property(id, '4').property('name', 'josh').property('age', 32).iterate() g.addV('software').property(id, '5').property('name', 'ripple').property('lang', 'java').iterate() g.addV('person').property(id, '6').property('name', 'peter').property('age', 35)

    Neptune에 여러 문을 동시에 전송할 수 있습니다.

    문은 줄 바꿈('\n'), 공백(' ') 또는 세미콜론('; ')으로 구분할 수 있습니다. 또는 아무것도 사용하지 않아도 구분할 수 있습니다(예: g.addV(‘person’).iterate()g.V()는 유효함).

    참고

    Gremlin 콘솔은 모든 줄 바꿈('\n')마다 명령을 따로 전송하므로 이 경우 각 명령은 별도의 트랜잭션이 됩니다. 읽기 쉽도록 이 예제에서는 모든 명령이 별도의 줄로 나뉘어 있습니다. Gremlin 콘솔을 통해 단일 명령으로 전송하려면 줄 바꿈('\n') 문자를 제거합니다.

    마지막 문 이외의 모든 문은 .next() 또는 .iterate()와 같은 종료 단계로 끝나야 합니다. 그러지 않으면 실행되지 않습니다. Gremlin 콘솔에는 이러한 종료 단계가 필요하지 않습니다. 결과를 직렬화할 필요가 없을 때마다 .iterate를 사용하세요.

    함께 전송되는 모든 문은 단일 트랜잭션에 포함되어 있어 함께 성공하거나 실패합니다.

  10. 엣지 추가.

    g.V('1').addE('knows').to(__.V('2')).property('weight', 0.5).iterate() g.addE('knows').from(__.V('1')).to(__.V('4')).property('weight', 1.0)

    엣지를 추가하는 방법으로 다음 두 가지가 있습니다.

  11. 나머지 최신 그래프를 추가합니다.

    g.V('1').addE('created').to(__.V('3')).property('weight', 0.4).iterate() g.V('4').addE('created').to(__.V('5')).property('weight', 1.0).iterate() g.V('4').addE('knows').to(__.V('3')).property('weight', 0.4).iterate() g.V('6').addE('created').to(__.V('3')).property('weight', 0.2)
  12. 버텍스를 삭제합니다.

    g.V().has('name', 'justin').drop()

    name 속성이 justin인 버텍스를 제거합니다.

    중요

    여기서 중지합니다. 이제 Apache TinkerPop 최신 그래프가 모두 준비되었습니다. TinkerPop 설명서의 순회 섹션에 있는 예제에서는 최신 그래프를 사용합니다.

  13. 순회를 실행합니다.

    g.V().hasLabel('person')

    모든 person 버텍스를 반환합니다.

  14. 값(valueMap())으로 순회를 실행합니다.

    g.V().has('name', 'marko').out('knows').valueMap()

    marko가 "인식하는" 모든 버텍스의 키-값 페어를 반환합니다.

  15. 여러 레이블을 지정합니다.

    g.addV("Label1::Label2::Label3")

    Neptune은 버텍스 하나에 여러 레이블을 지원합니다. 레이블을 생성할 때 ::로 구분하여 여러 레이블을 지정할 수 있습니다.

    이 예제에서는 세 가지 레이블이 있는 버텍스를 추가합니다.

    hasLabel 단계는 세 가지 레이블인 hasLabel("Label1"), hasLabel("Label2"), hasLabel("Label3") 중 하나와 이 버텍스를 일치시킵니다.

    :: 구분 문자는 이 용도로만 사용됩니다.

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

  16. 시간/날짜를 지정합니다.

    g.V().property(single, 'lastUpdate', datetime('2018-01-01T00:00:00'))

    Neptune은 Java 날짜를 지원하지 않습니다. 대신 datetime() 함수를 사용합니다. datetime()의 경우 ISO8061 규격 datetime 문자열을 수락합니다.

    YYYY-MM-DD, YYYY-MM-DDTHH:mm, YYYY-MM-DDTHH:mm:SSYYYY-MM-DDTHH:mm:SSZ 형식을 지원합니다.

  17. 버텍스, 속성 또는 엣지를 삭제합니다.

    g.V().hasLabel('person').properties('age').drop().iterate() g.V('1').drop().iterate() g.V().outE().hasLabel('created').drop()

    다음은 drop 관련 몇 가지 예제입니다.

    참고

    .next() 단계는 .drop()과 연동되지 않습니다. 대신 .iterate()을 사용하세요.

  18. 완료했으면 다음을 입력하여 Gremlin 콘솔을 종료합니다.

    :exit
참고

세미콜론(;) 또는 줄 바꿈 문자(\n)를 사용하여 각 문장을 구분합니다.

최종 순회 이전의 각 순회는 실행할 iterate()로 끝나야 합니다. 최종 순회의 데이터만 반환됩니다.