SERVICE 확장을 사용하는 Neptune의 SPARQL 페더레이션된 쿼리
Amazon Neptune은 SERVICE 키워드를 사용하는 SPARQL 페더레이션된 쿼리 확장을 전적으로 지원합니다 (자세한 내용은 SPARQL 1.1 연동 쿼리
참고
이 기능은 릴리스 1.0.1.0.200463.0(2019년 10월 15일)에서 사용할 수 있습니다.
SERVICE 키워드는 SPARQL 쿼리 엔진에게 원격 SPARQL 엔드포인트를 기준으로 쿼리의 일부분을 실행하여 최종 쿼리 결과를 구성하도록 지시합니다. READ 작업만 가능합니다. WRITE 및 DELETE 작업은 지원되지 않습니다. Neptune은 Virtual Private Cloud(VPC) 내에서 액세스할 수 있는 SPARQL 엔드포인트에 대해서만 페더레이션 쿼리를 실행할 수 있습니다. 그러나 VPC에서 리버스 프록시를 사용하여 VPC 내에서 외부 데이터 소스에 액세스할 수 있게 하는 것도 가능합니다.
참고
SPARQL SERVICE를 사용하여 동일한 VPC에 있는 2개 이상의 Neptune 클러스터에 쿼리를 페더레이션하는 경우 모든 Neptune 클러스터가 서로 통신할 수 있도록 보안 그룹을 구성해야 합니다.
중요
SPARQL 1.1 Federation은 외부 SPARQL 엔드포인트에 쿼리 및 파라미터를 전달할 때 사용자를 대신해 서비스 요청을 수행합니다. 외부 SPARQL 엔드포인트가 애플리케이션의 데이터 처리 및 보안 요구 사항을 충족하는지 확인하는 것은 사용자의 책임입니다.
Neptune 페더레이션 쿼리의 예제
다음은 SPARQL 연동 쿼리가 어떻게 작동하는지 보여주는 간단한 예제입니다.
고객이 http://neptune-1:8182/sparql에서 Neptune-1에 다음과 같은 쿼리를 보낸다고 가정해 보겠습니다.
SELECT * WHERE { ?person rdf:type foaf:Person . SERVICE <http://neptune-2:8182/sparql> { ?person foaf:knows ?friend . } }
Neptune-1은 첫 번째 쿼리 패턴(Q-1)인
?person rdf:type foaf:Person을 평가하고 결과를 바탕으로 Q-2(?person foaf:knows ?friend)에서?person을 해결한 다음, 결과 패턴을http://neptune-2:8182/sparql의 Neptune-2에 전달합니다.Neptune-2는 Q-2를 평가하고 그 결과를 Neptune-1에 다시 전송합니다.
Neptune-1은 두 패턴 모두에 대한 솔루션을 조인하여 결과를 고객에게 다시 전송합니다.
이 흐름은 다음 다이어그램에 나와 있습니다.
참고
기본적으로 옵티마이저는 SERVICE 명령이 실행되는 쿼리 실행 시점을 결정합니다. joinOrder 쿼리 힌트를 사용하여 이 배치를 재정의할 수 있습니다.
Neptune의 페더레이션 쿼리에 대한 액세스 제어
Neptune은 인증 및 권한 부여를 위해 AWS Identity and Access Management(IAM)를 사용합니다. 페더레이션 쿼리에 대한 액세스 제어에는 Neptune DB 인스턴스가 하나 이상 관여할 수 있습니다. 이들 인스턴스는 액세스 제어에 대한 요구 사항이 서로 다를 수 있습니다. 어떤 경우에는 이로 인해 연동 쿼리를 구성하는 능력이 제한될 수 있습니다.
이전 섹션에 제시된 간단한 예를 생각해 봅시다. Neptune-1은 호출에 사용한 것과 동일한 보안 인증 정보로 Neptune-2를 호출합니다.
Neptune-1에는 IAM 인증 및 권한 부여가 필요한데 Neptune-2에는 필요하지 않은 경우, Neptune-1이 페더레이션 쿼리를 수행할 수 있도록 적절한 IAM 권한만 있으면 됩니다.
Neptune-1 및 Neptune-2 모두에서 IAM 인증 및 권한 부여가 필요한 경우에는 두 데이터베이스 모두가 페더레이션 쿼리를 만들 수 있도록 IAM 권한을 연결해야 합니다. 두 클러스터 모두 동일한 AWS 계정과 동일한 리전에 있어야 합니다. 현재 교차 리전 및/또는 교차 계정 페더레이션된 쿼리 아키텍처는 지원되지 않습니다.
그러나 Neptune-1에서 IAM이 사용되지 않지만, Neptune-2에서 사용되는 경우에는 페더레이션 쿼리를 만들 수 없습니다. 왜냐하면 Neptune-1이 IAM 보안 인증 정보를 검색하고, 이를 Neptune-2에 전달하여 쿼리의 두 번째 부분에 대해 권한을 부여할 수 없기 때문입니다.