evaluationStrategy SPARQL 쿼리 힌트 - Amazon Neptune

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

evaluationStrategy SPARQL 쿼리 힌트

evaluationStrategy 쿼리 힌트는 Amazon Neptune 쿼리 엔진에 주석이 달린 쿼리 조각을 독립적인 단위로 상향식으로 평가해야 함을 알려줍니다. 이는 이전 평가 단계의 솔루션을 사용하여 쿼리 조각을 계산하지 않음을 의미합니다. 쿼리 조각은 독립 단위로 평가되며 생성된 솔루션은 계산 후 나머지 쿼리와 조인됩니다.

evaluationStrategy 쿼리 힌트를 사용하는 것은 차단(파이프라인되지 않은) 쿼리 계획을 의미합니다. 즉, 쿼리 힌트가 주석으로 달려 있는 조각의 솔루션이 실체를 갖추고 주 메모리에 버퍼링된다는 뜻입니다. 이 쿼리 힌트를 사용하면 특히 주석 처리된 쿼리 조각이 많은 수의 결과를 계산할 경우 쿼리를 평가하는 데 필요한 주 메모리의 양이 크게 늘어날 수 있습니다.

evaluationStrategy SPARQL 힌트 구문

evaluationStrategy 쿼리 힌트는 SPARQL 쿼리에 포함된 트리플 패턴으로 지정됩니다.

명료함을 위해 다음 구문에서는 쿼리에 정의되고 포함된 hint 접두사를 사용하여 Neptune 쿼리 힌트 네임스페이스를 지정합니다.

PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> hint:SubQuery hint:evaluationStrategy "BottomUp" .
사용 가능한 범위
  • hint:SubQuery

참고

이 쿼리 힌트는 중첩된 하위 쿼리에서만 지원됩니다.

쿼리 힌트 범위에 대한 자세한 내용은 Neptune의 SPARQL 쿼리 힌트 범위 단원을 참조하십시오.

evaluationStrategy SPARQL 힌트 예제

이 단원에서는 evaluationStrategy 쿼리 힌트 및 관련 최적화를 사용하거나 사용하지 않고 작성된 쿼리를 보여줍니다.

이 예제의 경우 데이터 세트에 다음 특성이 포함되어 있다고 가정합니다.

  • :connectedTo이라는 레이블로 지정된 1,000개의 엣지를 포함합니다.

  • component 노드는 평균 100개의 다른 component 노드에 연결됩니다.

  • 노드 사이의 4홉 주기의 연결 수는 약100입니다.

쿼리 힌트 없음

다음 SPARQL 쿼리는 4개의 홉을 통해 서로 주기적으로 연결된 모든 component 노드를 추출합니다.

PREFIX : <https://example.com/> PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> SELECT * { ?component1 :connectedTo ?component2 . ?component2 :connectedTo ?component3 . ?component3 :connectedTo ?component4 . ?component4 :connectedTo ?component1 . }

Neptune 쿼리 엔진의 접근 방식은 다음 단계를 사용하여 이 쿼리를 평가하는 것입니다.

  • 그래프에서 1,000개의 connectedTo 엣지를 모두 추출합니다.

  • 100x(component2에서 발신 connectedTo 엣지의 수)로 확장합니다.

    중간 결과: 100,000개 노드

  • 100x(component3에서 발신 connectedTo 엣지의 수)로 확장합니다.

    중간 결과: 10,000,000개 노드

  • 주기가 끝날 때까지 10,000,000개의 노드를 스캔합니다.

이 결과 주 메모리가 일정한 스트리밍 쿼리 계획이 생성됩니다.

쿼리 힌트 및 하위 쿼리

계산을 가속화하기 위해 메인 메모리 공간의 균형을 유지하고 싶을 수도 있습니다. evaluationStrategy 쿼리 힌트로 쿼리를 다시 작성하여 엔진이 더 작고 구체화된 하위 집합 두 개 사이의 조인을 계산하도록 할 수 있습니다.

PREFIX : <https://example.com/> PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> SELECT * { { SELECT * WHERE { hint:SubQuery hint:evaluationStrategy "BottomUp" . ?component1 :connectedTo ?component2 . ?component2 :connectedTo ?component3 . } } { SELECT * WHERE { hint:SubQuery hint:evaluationStrategy "BottomUp" . ?component3 :connectedTo ?component4 . ?component4 :connectedTo ?component1 . } } }

다음 트리플 패턴의 결과를 반복적으로 사용하면서 트리플 패턴을 순서대로 평가하는 대신 evaluationStrategy 힌트를 사용하면 두 개의 하위 쿼리를 독립적으로 평가할 수 있습니다. 두 하위 쿼리 모두 중간 결과를 위해 100,000개의 노드를 생성한 후에는 최종 결과를 형성하기 위해 함께 조인됩니다.

특히 더 큰 인스턴스 유형에서 Neptune을 실행할 때 이 2개의 100,000개 하위 세트를 주 메모리에 임시로 저장하면 평가 속도가 크게 빨라져 메모리 사용이 늘어납니다.