Amazon Neptune의 네이티브 Gremlin 단계 지원 - Amazon Neptune

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

Amazon Neptune의 네이티브 Gremlin 단계 지원

Gremlin 쿼리 조정에서 설명한 것처럼 Amazon Neptune 엔진은 현재 모든 Gremlin 단계를 기본적으로 완벽하게 지원하지는 않습니다. 현재 지원은 4가지 범주로 나뉩니다.

항상 네이티브 Neptune 엔진 작업으로 변환할 수 있는 Gremlin 단계

다음 조건을 충족하는 경우 많은 Gremlin 단계를 네이티브 Neptune 엔진 작동으로 변환할 수 있습니다.

  • 쿼리에서 이들 단계 앞에는 변환할 수 없는 단계가 포함되지 않습니다.

  • 상위 단계(있는 경우)를 변환할 수 있습니다.

  • 모든 하위 순회(있는 경우)를 변환할 수 있습니다.

다음 Gremlin 단계는 해당 조건을 충족하는 경우 항상 네이티브 Neptune 엔진 작업으로 변환됩니다.

경우에 따라 네이티브 Neptune 엔진 작업으로 변환할 수 있는 Gremlin 단계

일부 Gremlin 단계는 상황에 따라 네이티브 Neptune 엔진 작업으로 변환될 수 있지만, 다른 상황에서는 변환되지 않습니다.

  • addE( )   –   순회를 키로 포함하는 property() 단계가 바로 뒤에 오는 경우를 제외하고는 일반적으로 addE() 단계를 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

  • addV( )   –  순회를 키로 포함하는 property() 단계가 바로 뒤에 오거나 여러 레이블이 할당되지 않는 한, 일반적으로 addV() 단계를 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

  • aggregate( )   –   단계가 하위 순회 또는 하위 수준 순회에 사용되지 않는 경우 또는 저장되는 값이 버텍스, 엣지, id, 레이블 또는 속성값이 아닌 경우에는 일반적으로 aggregate() 단계를 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

    아래 예에서는 aggregate()가 하위 순회에 사용되어 변환되지 않습니다.

    g.V().has('code','ANC').as('a') .project('flights').by(select('a') .outE().aggregate('x'))

    이 예제에서는 저장된 값이 값의 min()이므로, aggregate()가 변환되지 않습니다.

    g.V().has('code','ANC').outE().aggregate('x').by(values('dist').min())
  • barrier( )   –   다음 단계가 변환되지 않는 한, barrier() 단계는 일반적으로 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

  • cap( )   –   cap() 단계를 unfold() 단계와 결합하여 버텍스, 엣지, id 또는 속성값 집합을 펼친 버전을 반환하는 경우에만 단계가 변환됩니다. 이 예제에서 cap().unfold() 다음에 오기 때문에 변환됩니다.

    g.V().has('airport','country','IE').aggregate('airport').limit(2) .cap('airport').unfold()

    그러나 .unfold()를 제거하면 cap()은 변환되지 않습니다.

    g.V().has('airport','country','IE').aggregate('airport').limit(2) .cap('airport')
  • coalesce( ) - coalesce() 단계가 변환되는 유일한 경우는 TinkerPop 레시피 페이지에서 권장하는 Upsert 패턴을 따르는 경우입니다. 다른 coalesce() 패턴은 허용되지 않습니다. 모든 하위 순회가 변환될 수 있고, 모든 하위 순회가 출력값과 동일한 유형(버텍스, 엣지, id, 값, 키 또는 레이블)을 생성하고, 전부 새 요소를 순회하고, repeat() 단계를 포함하지 않는 경우로 변환이 제한됩니다.

  • constant( )   –   constant() 단계는 현재 다음과 같이 일정한 값을 할당하기 위해 순회의 sack().by() 부분 내에서 사용되는 경우에만 변환됩니다.

    g.V().has('code','ANC').sack(assign).by(constant(10)).out().limit(2)
  • cyclicPath( ) - cyclicPath() 단계가 , by() from()또는 to() 모듈레이터와 함께 사용되지 않는 한, 단계는 일반적으로 네이티브 Neptune 엔진 작업으로 변환될 수 있습니다. 예를 들어, 다음 쿼리에서는 cyclicPath()가 변환되지 않습니다.

    g.V().has('code','ANC').as('a').out().out().cyclicPath().by('code') g.V().has('code','ANC').as('a').out().out().cyclicPath().from('a') g.V().has('code','ANC').as('a').out().out().cyclicPath().to('a')
  • drop( )   –   sideEffect() 또는 optional() 단계 내에서 단계를 사용하지 않는 한, drop() 단계는 일반적으로 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

  • fold( ) - fold() 단계를 변환할 수 있는 상황은 두 가지뿐입니다. 레시피 TinkerPop 페이지에서 권장하는 Upsert 패턴에 사용할 때와 다음과 같은 group().by() 컨텍스트에서 사용할 때입니다.

    g.V().has('code','ANC').out().group().by().by(values('code', 'city').fold())
  • id( )   –   다음과 같이 속성에 사용하지 않는 한 id() 단계가 변환됩니다.

    g.V().has('code','ANC').properties('code').id()
  • mergeE() - 파라미터(병합 조건, onCreate 및 )가 일정하면(의 null, 상수 Map또는 onMatch) 이 mergeE() 단계를 기본 Neptune 엔진 작업으로 변환select()할 수 있습니다Map. 업서팅 엣지의 모든 예제를 변환할 수 있습니다.

  • mergeV() – 파라미터(병합 조건, onCreate 및 )가 일정하면(select()null, 상수 Map또는 ) mergeV(onMatch) 단계를 기본 Neptune 엔진 작업으로 변환할 수 있습니다Map. 업서팅 꼭짓점의 모든 예제를 변환할 수 있습니다.

  • order( )   –   다음 중 하나에 해당하지 않는 한 order() 단계를 일반적으로 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

    • order() 단계는 다음과 같이 중첩된 하위 순회 내에 있습니다.

      g.V().has('code','ANC').where(V().out().order().by(id))
    • 가령 order(local)와 같이 로컬 주문이 사용되고 있습니다.

    • 사용자 지정 비교기가 by() 변조에서 순서를 지정하는 데 사용됩니다. sack()을 사용하는 경우를 예로 들 수 있습니다.

      g.withSack(0). V().has('code','ANC'). repeat(outE().sack(sum).by('dist').inV()).times(2).limit(10). order().by(sack())
    • 동일한 요소에 여러 개의 순서가 있습니다.

  • project( )   –   다음과 같이 project() 뒤에 오는 by() 문 수가 지정된 레이블 수와 일치하지 않는 경우를 제외하고는 일반적으로 project() 단계를 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

    g.V().has('code','ANC').project('x', 'y').by(id)
  • range( )   –   범위의 하한이 0인 경우(예: range(0,3))에만 range() 단계가 변환됩니다.

  • repeat( )   –   repeat() 단계는 다음과 같이 다른 repeat() 단계에 중첩되지 않는 한 일반적으로 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

    g.V().has('code','ANC').repeat(out().repeat(out()).times(2)).times(2)
  • sack( )   –   sack() 단계는 다음과 같은 경우를 제외하고 일반적으로 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

    • 숫자가 아닌 sack 연산자를 사용하는 경우.

    • +, -, mult, div, min, max 이외의 숫자형 sack 연산자를 사용하는 경우.

    • 다음과 같이 sack 값을 기준으로 필터링하는 where() 단계 내에서 sack()을 사용하는 경우.

      g.V().has('code','ANC').sack(assign).by(values('code')).where(sack().is('ANC'))
  • sum( )   –   sum() 단계는 일반적으로 네이티브 Neptune 엔진 작업으로 변환될 수 있지만, 다음과 같이 전역 합계를 계산하는 데 사용할 때는 변환되지 않습니다.

    g.V().has('code','ANC').outE('routes').values('dist').sum()
  • union( )   –   union() 단계는 터미널 단계를 제외하고 쿼리의 마지막 단계인 경우 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

  • unfold( ) – 이 unfold() 단계는 TinkerPop 레시피 페이지에서 권장하는 Upsert 패턴에 사용되고 다음과 cap() 같이 함께 사용되는 경우에만 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

    g.V().has('airport','country','IE').aggregate('airport').limit(2) .cap('airport').unfold()
  • where( )   –   where() 단계는 다음과 같은 경우를 제외하고 일반적으로 네이티브 Neptune 엔진 작업으로 변환할 수 있습니다.

    • 다음과 같이 by() 변조를 사용하는 경우.

      g.V().hasLabel('airport').as('a') .where(gt('a')).by('runways')
    • eq, neq, within, without 이외의 비교 연산자를 사용하는 경우.

    • 사용자 제공 집계를 사용하는 경우.

네이티브 Neptune 엔진 작업으로 변환되지 않는 Gremlin 단계

다음 Gremlin 단계는 Neptune에서 지원되지만, 네이티브 Neptune 엔진 작업으로 변환되지는 않습니다. 대신 Gremlin 서버에서 실행됩니다.

Neptune에서 전혀 지원되지 않는 Gremlin 단계

다음 Gremlin 단계는 Neptune에서 전혀 지원되지 않습니다. 대부분의 경우 GraphComputer가 필요하기 때문인데, Neptune은 이를 현재 지원하지 않습니다.

io() 단계는 에서 로 사용할 수 URL 있지만 read()로 사용할 수는 없으므로 실제로 부분적으로 지원됩니다write().