문서 메뉴
문서 홈
/
MongoDB Atlas
/

연합 데이터베이스 인스턴스 쿼리

이 페이지의 내용

  • S3에서 데이터 쿼리하기
  • Azure Blob 스토리지에서 데이터 쿼리하기
  • Atlas cluster에서 데이터 쿼리하기
  • Online Archive 및 데이터 레이크 데이터 집합에서 데이터 쿼리하기
  • 0}HTTP 또는 HTTPS URL에서데이터 쿼리하기
  • 연합 쿼리 실행
  • 쿼리 제한 구성
  • 문제 해결

Atlas Data Federation 에서 MongoDB 쿼리 언어(MQL)를 사용하여 데이터 저장소의 데이터를 쿼리하고 분석할 수 있습니다. Atlas Data Federation은 대부분의 표준 서버 명령을 지원하지만 전부를 지원하지는 않습니다. 지원되는 및 지원되지 않는 MongoDB Server 명령과 애그리게이션 파이프라인 단계에 대해 자세히 알아보려면 지원되는 MongoDB 명령을 참조하세요.

데이터 저장소의 데이터를 쿼리하려면 연합 데이터베이스 인스턴스 저장소 구성에 이를 정의하는 설정이 포함되어 있어야 합니다:

  • 연합 데이터베이스 인스턴스 저장소입니다.

  • 연합 데이터베이스 인스턴스 저장소에 매핑되는 연합된 데이터베이스 인스턴스 가상 데이터베이스 및 컬렉션입니다.

Atlas UI Visual Editor 또는 JSON Editor, Atlas Data Federation CLI 명령 및 Atlas Data Federation API 엔드포인트를 사용하여 데이터 저장소에 대한 연합 데이터베이스 인스턴스 저장소 구성 을 만들거나 업데이트할 수 있습니다. 연합 데이터베이스 인스턴스 저장소 구성에 대해 자세히 알아보려면 연합 데이터베이스 인스턴스에 대한 데이터 저장소 정의를 참조하세요.

Atlas Data Federation은 데이터 저장소의 데이터에 대해 연합 데이터베이스 인스턴스 구성에 지정한 가상 데이터베이스와 컬렉션을 생성합니다. Data Federation에 연결하여 쿼리를 실행하면 Atlas Data Federation이 데이터에 대한 쿼리를 실행하고 쿼리 결과를 반환합니다. 원하는 경우 Atlas Data Federation이 쿼리를 처리하는 데 드는 데이터 양에 한도를 설정해 비용을 관리할 수 있습니다.

참고

Atlas Data Federation은 문서 내의 필드 순서를 유지하지 않는 열 형식 저장소를 사용합니다. 따라서 Atlas Data Federation은 내장된 문서 동일성 쿼리 또는 문서 필드 정렬과 같이 필드 순서에 민감한 쿼리를 지원하지 않습니다.

연합 데이터베이스 인스턴스에 대해 쿼리를 실행하려면 데이터베이스 사용자가 다음 역할 중 하나를 가지고 있어야 합니다.

다음에 대해 연합 데이터베이스 인스턴스에서 최대 30개의 동시 쿼리를 실행할 수 있습니다.

  • S3 버킷 또는 Azure Blob Storage 컨테이너의 데이터.

  • MongoDB Atlas cluster의 문서.

  • Atlas Data Lake 데이터 세트에서 추출한 데이터.

  • 공개적으로 액세스할 수 있는 URL에 호스팅된 파일 내 데이터

참조:

다음 섹션에는 데이터 저장소의 데이터에 대해 쿼리를 실행하는 것과 관련된 정보가 포함되어 있습니다.

연합 데이터베이스 인스턴스를 배포 할 때 읽기 및 쓰기 권한이 모두 있는 S3 버킷 또는 AWS S3 s3:PutObject 권한이 있는 경우 를 사용하여 S3 버킷에 쿼리 $out 결과를 S 에3 저장할 수도 있습니다.

S3 데이터 저장소에 객체를 성공적으로 생성하거나 업데이트한 경우 Data Federation은 모든 후속 읽기 요청에 대해 해당 객체의 최신 버전을 반환하며 객체의 모든 목록 작업에도 변경 사항이 반영됩니다. 쿼리에 여러 단계가 포함된 경우 각 단계는 해당 단계가 처리될 때 데이터 저장소에서 사용 가능한 최신 데이터를 수신합니다.

기본적으로 Atlas Data Federation은 S3 데이터 저장소에 대한 Data Federation에 대한 쿼리에 대해 특정 순서로 문서를 반환하지 않습니다. Atlas Data Federation은 파티션을 동시에 읽으며, 쿼리에서 $sort 를 사용하여 순서를 정의하지 않는 한 기본 저장소 응답 순서에 따라 Atlas Data Federation이 가장 먼저 반환하는 문서가 결정됩니다. 예를 들어 동일한 findOne() 쿼리를 두 번 실행하면 서로 다른 문서가 표시될 수 있고, $skip 을(를) 사용하는 경우 쿼리에 $sort 이(가) 사용되지 않으면 다른 문서를 건너뛸 수도 있습니다.

Atlas Data Federation이 쿼리 결과를 반환하기 위해 처리하는 데이터의 양에 대한 '데이터 처리' 비용과 Atlas Data Federation이 반환하는 데이터의 양에 대한 '데이터 반환' 비용이 추가로 발생합니다. 예를 들어, 10GB 파일의 경우 '데이터 반환' 비용 외에 다음과 같은 '데이터 처리' 비용이 발생합니다.

  • 파티션이 없는 경우 Atlas Data Federation은 전체 파일을 읽어 쿼리 결과를 반환합니다. 따라서 10GB의 "데이터 처리" 비용이 발생합니다.

  • 각각 1GB씩 10개의 파티션이 있는 경우, Atlas Data Federation은 단일 파티션을 타겟팅하여 읽습니다. 따라서 1GB의 '데이터 처리' 비용이 발생합니다.

연합 데이터베이스 인스턴스별 및 프로젝트의 모든 연합 데이터베이스 인스턴스에 대해 쿼리 제한을 구성하여, 처리되는 데이터의 양을 제한할 수 있습니다. 자세히 알아보려면 Atlas Data Federation 쿼리 제한 관리를 참조하세요.

참고

데이터 분할은 데이터 처리 비용 절감을 보장하지 않습니다. 예를 들어, 모든 데이터를 쿼리하는 빈 $match 쿼리를 실행하는 경우, Atlas Data Federation은 파티션 수에 관계없이 쿼리에 대한 결과를 반환하기 위해 전체 컬렉션을 읽어야 합니다.

연합 데이터베이스 인스턴스를 배포할 때 읽기 및 쓰기 권한이 모두 있는 Azure Blob Storage 컨테이너를 지정할 수 있습니다.

Atlas Data Federation이 쿼리 결과를 반환하기 위해 처리하는 데이터의 양에 대한 '데이터 처리' 비용과 Atlas Data Federation이 반환하는 데이터의 양에 대한 '데이터 반환' 비용이 추가로 발생합니다. 예를 들어, 10GB 파일의 경우 '데이터 반환' 비용 외에 다음과 같은 '데이터 처리' 비용이 발생합니다.

  • 파티션이 없는 경우 Atlas Data Federation은 전체 파일을 읽어 쿼리 결과를 반환합니다. 따라서 10GB의 "데이터 처리" 비용이 발생합니다.

  • 각각 1GB씩 10개의 파티션이 있는 경우, Atlas Data Federation은 단일 파티션을 타겟팅하여 읽습니다. 따라서 1GB의 '데이터 처리' 비용이 발생합니다.

연합 데이터베이스 인스턴스별 및 프로젝트의 모든 연합 데이터베이스 인스턴스에 대해 쿼리 제한을 구성하여, 처리되는 데이터의 양을 제한할 수 있습니다. 자세히 알아보려면 Atlas Data Federation 쿼리 제한 관리를 참조하세요.

Data Federation를 통해 Atlas cluster에 대한 쿼리를 실행하는 경우, Atlas Data Federation은 클러스터를 쿼리할 때 연합 데이터베이스 인스턴스에 연결하는 데 사용한 appName을 기준으로 appName을 설정합니다. 예를 들어 appNamemyApp으로 설정하여 연합 데이터베이스 인스턴스에 연결하는 경우(예: appName = "myApp"), Atlas Data Federation은 클러스터에 연결할 때 appName을 다음으로 설정합니다.

atlas-data-federation|myApp

Atlas Data Federation에서 하나의 Atlas 컬렉션에만 매핑된 컬렉션을 쿼리하는 경우 Atlas Data Federation은 프록시 역할을 하며 쿼리를 Atlas에 전달합니다. 프록시 역할을 할 때 Atlas Data Federation은 쿼리를 처리하기 위해 데이터를 가상 컬렉션으로 스캔하지 않으므로 성능이 향상되고 비용이 절감됩니다. 여러 Atlas 컬렉션에 매핑된 Atlas Data Federation 컬렉션의 쿼리에는 이 최적화를 사용할 수 없습니다.

예제

다음과 같은 연합 데이터베이스 인스턴스 스토리지 구성을 고려하해 보겠습니다.

{
"stores" : [
{
"name" : "atlas-store",
"provider": "atlas",
"clusterName": "myCluster",
"projectId": "5e2211c17a3e5a48f5497de3"
}
],
"databases" : [
{
"name" : "atlas-db",
"collections" : [
{
"name" : "foo",
"dataSources" : [
{
"storeName" : "atlas-store",
"database" : "myFooData",
"collection" : "foo"
}
]
},
{
"name" : "barbaz",
"dataSources" : [
{
"storeName" : "atlas-store",
"database" : "myBarData",
"collection" : "bar"
},
{
"storeName" : "atlas-store",
"database" : "myBazData",
"collection" : "baz"
}
]
}
]
}
]
}

위의 저장소 구성에서, Atlas Data Federation은 foo 컬렉션에 대한 쿼리의 프록시 역할을 하며 쿼리를 Atlas로 전달합니다. barbaz가 여러 Atlas 컬렉션에 매핑되어 있기 때문에 이 성능 및 비용 최적화는 barbaz 컬렉션에 대한 쿼리에는 사용할 수 없습니다.

$out를 사용하여 쿼리 결과를 Atlas cluster에 저장할 수도 있습니다.

Atlas cluster에서 컬렉션의 문서를 성공적으로 만들거나 업데이트하면 이후의 모든 읽기 요청에 대해 Data Federation이 해당 문서의 최신 버전을 반환하고 컬렉션의 모든 목록 작업에도 변경 사항이 반영됩니다. 쿼리에 여러 단계가 포함된 경우 각 단계는 해당 단계가 처리될 때 데이터 저장소에서 사용 가능한 최신 데이터를 수신합니다.

Atlas는 Atlas cluster 감사 로그에 클러스터 데이터에 대한 쿼리를 기록합니다. 데이터베이스 사용자에 대한 로그 항목의 형식은 다음과 같습니다.

<SERVICE_NAME>-<CUSTOMER_DATA_LAKE_NAME>-<DATABASE_USER_NAME>

예를 들어, Atlas에서 "user" : "CN=atlasDataLake-DataLake0-test_datalake0"으로 구성된 데이터베이스 사용자의 경우 Atlas cluster 감사 로그의 로그 항목은 다음과 유사하게 표시됩니다.

{
"atype" : "authenticate",
"ts" : { "$date" : "2022-04-29T13:17:54.020+00:00" },
"local" : { "ip" : "XXXX", "port" : 27017 },
"remote" : { "ip" : "XXXXX", "port" : 10844 },
"users" : [ { "user" : "CN=atlasDataLake-DataLake0-test_datalake0", "db" : "$external" } ],
"roles" : [ { "role" : "backup", "db" : "admin" }, { "role" : "readWriteAnyDatabase", "db" : "admin" }, { "role" : "clusterMonitor", "db" : "admin" }, { "role" : "enableSharding", "db" : "admin" }, { "role" : "atlasAdmin", "db" : "admin" }, { "role" : "dbAdminAnyDatabase", "db" : "admin" } ],
"param" : { "user" : "CN=atlasDataLake-DataLake0-test_datalake0", "db" : "$external", "mechanism" : "MONGODB-X509" },
"result" : 0
}

참고

Atlas cluster 감사 로그에서 연결 메커니즘은 항상 MONGODB-X509입니다.

쿼리의 경우, Atlas Data Federation은 Atlas Online Archive 또는 Atlas Data Lake 파이프라인을 만드는 동안 필드에 만든 파티션을 사용합니다. 파티션의 필드 순서는 복합 인덱스 에서와 같은 방식으로 중요합니다. 데이터는 첫 번째 필드, 두 번째 필드 등을 기준으로 쿼리에 최적화됩니다. Atlas Data Federation은 파티션을 순서대로 구문 분석합니다. 쿼리에서 특정 파티션이 생략된 경우 Atlas Data Federation은 생략된 파티션 뒤에 오는 파티션을 사용하는 데 효율성이 떨어집니다.

Atlas Data Federation은 파티션이 없는 필드에 대한 쿼리 지원 성능이 떨어집니다. Atlas Data Federation은(는) Atlas Data Lake pipeline을(를) 만들 때 명시적으로 제외된 필드에 대한 쿼리를 지원하지 않습니다.

참고

미리 보기

HTTP 데이터 저장소에 대한 지원은 미리보기 기능으로 제공됩니다. 기능 및 해당 문서는 미리보기 단계 중에 언제든지 변경될 수 있습니다.

또한 Data Federation은 컬렉션의 각 URL에 대해 하나의 파티션을 생성합니다. 연합 데이터베이스 인스턴스에 연결하여 쿼리를 실행하면 Data Federation이 데이터에 대한 쿼리를 처리하고 쿼리 결과를 반환합니다.

Atlas Data Federation을 사용하여 Atlas cluster, S3 버킷 또는 Azure Blob Storage 컨테이너, HTTP URL, Data Lake 데이터세트에 있는 데이터의 통합 뷰를 쿼리하고 분석할 수 있습니다. 연합 쿼리의 경우, 연합 데이터베이스 인스턴스 스토리지 구성에는 다음을 정의하는 설정이 포함되어야 합니다.

  • S3 또는 Azure, Atlas, Atlas Data Lake, HTTP 저장소.

    참고

    Atlas Data Federation은 클라우드 제공자 전체에서 연합 쿼리를 지원하지 않습니다. 따라서 AWS S3 버킷 및 Azure Blob Storage 컨테이너에 저장된 데이터에 대해 연합 쿼리를 실행할 수 없습니다. Atlas cluster를 지원하는 클라우드 제공자에 관계없이 Atlas cluster와 AWS S3 버킷 또는 Azure Blob Storage 컨테이너의 데이터에 대해 연합 쿼리를 동시에 실행할 수 있습니다.

  • S3 또는 Azure, Atlas, Atlas Data Lake, HTTP 저장소에 매핑되는 가상 컬렉션을 포함하는 연합 데이터베이스 인스턴스.

Atlas UI 또는 , Atlas Data Federation CLI 명령 및 Atlas Data Federation API 엔드포인트를 사용하여 연합 데이터베이스 인스턴스 저장소 구성 을 만들거나 업데이트할 수 Visual Editor JSON Editor있습니다. 연합 데이터베이스 인스턴스 저장소 구성에 대해 자세히 알아보려면 연합 데이터베이스 인스턴스에 대한 데이터 저장소 정의를 참조하세요.

연합 데이터베이스 인스턴스에 연결하고 연합 쿼리를 실행하면 Data Federation이 Atlas cluster, S3 버킷 또는 Azure Blob Storage 컨테이너, Data Lake 데이터 세트, 가상 데이터베이스 및 컬렉션의 HTTP URL의 데이터를 결합하고 결과에 데이터 유니온을 반환합니다.

Atlas Data Federation이 쿼리를 처리하는 데 드는 데이터 양에 한도를 설정해 비용을 관리할 수 있습니다. Atlas Data Federation에서 쿼리에 대해 처리하는 데이터의 양을 제한하려면 연합 데이터베이스 인스턴스당 또는 프로젝트의 모든 연합 데이터베이스 인스턴스에 대해 쿼리 제한을 구성할 수 있습니다. 처리된 데이터의 용량이 설정된 해당 한도에 도달하면 Atlas Data Federation이 새 쿼리를 실행하지 않고, 한도에 도달했다는 내용의 오류를 클라이언트 애플리케이션으로 반환합니다. 자세한 내용은 Atlas Data Federation 쿼리 한도 관리를 참조하세요.

오류: 현재 Atlas Data Federation에 대한 쿼리 처리 대기 시간이 증가하고 있습니다. 엔지니어링 팀에서 조사 중입니다. 정상 서비스가 곧 다시 시작될 예정이니 다시 시도해 주세요.

Atlas Data Federation은 리소스 경합으로 인해 Atlas Data Federation이 쿼리를 실행할 수 없는 경우에만 이 오류를 반환합니다. 쿼리를 다시 실행하는 것이 좋습니다.

← 쿼리 로그 다운로드