Azure Cosmos DB용 Azure Synapse Link의 사용자 지정 분할

적용 대상: NoSQL MongoDB Gremlin

사용자 지정 분할을 사용하면 분석 쿼리에서 일반적으로 필터로 사용되는 필드에서 분석 저장소 데이터를 분할할 수 있으므로 쿼리 성능이 개선됩니다.

이 문서에서는 분석 워크로드에 중요한 키를 사용하여 Azure Cosmos DB 분석 저장소에서 데이터를 분할하는 방법에 대해 알아봅니다. 파티션 정리를 사용하여 향상된 쿼리 성능을 활용하는 방법도 설명합니다. 또한 워크로드에 상당한 수의 업데이트 또는 삭제가 있을 때 사용자 지정 분할이 쿼리 성능을 개선하는 방법도 알아봅니다.

참고 항목

Azure Cosmos DB 계정 및 컨테이너에는 사용자 지정 분할을 활용하려면 Azure Synapse Link가 사용하도록 설정되어 있어야 합니다.

작동 방식

분석 저장소 분할은 트랜잭션 저장소 분할과 관련이 없습니다. 기본적으로 분석 저장소는 분할되지 않습니다. 날짜, 시간, 범주 등과 같은 필드를 기준으로 분석 저장소를 자주 쿼리하려는 경우 사용자 지정 분할을 사용하여 이러한 키를 기반으로 하여 별도의 분할 저장소를 만들 수 있습니다. 데이터 세트의 단일 필드 또는 필드 조합을 분석 저장소 파티션 키로 선택할 수 있습니다.

Azure Synapse Link를 사용하여 Azure Synapse Spark Notebook에서 분할을 트리거할 수 있습니다. 하루에 한두 번 백그라운드 작업으로 실행되도록 예약할 수 있지만 필요한 경우 더 자주 실행할 수 있습니다.

참고 항목

분할된 저장소는 Azure Synapse 작업 영역과 연결된 ADLS Gen2 기본 스토리지 계정을 가리킵니다.

Architecture of partitioned store in Azure Synapse Link for Azure Cosmos DB

분할된 저장소에는 분할 작업을 실행한 마지막 타임스탬프까지의 Azure Cosmos DB 분석 데이터가 포함됩니다. 파티션 키 필터를 사용하여 분석 데이터를 쿼리하면 Synapse Link는 분할된 저장소 데이터를 분석 저장소의 최신 변경 내용과 자동으로 병합합니다. 이렇게 하면 쿼리에 대한 최신 결과가 제공됩니다. 쿼리하기 전에 데이터를 병합하지만 델타는 분할된 저장소에 다시 기록되지 않습니다. 분석 저장소와 분할된 저장소의 데이터 간의 델타가 넓어짐에 따라 분할된 데이터에 대한 쿼리 시간이 달라질 수 있습니다. 분할 작업을 더 자주 트리거하면 이 델타가 줄어듭니다. 분할 작업을 실행할 때마다 전체 데이터 세트 대신 분석 저장소의 증분 변경 내용만 처리됩니다.

사용하는 경우

Azure Cosmos DB에서 분석 데이터를 쿼리할 때 분할된 저장소를 사용하는 것은 선택 사항입니다. 기존 분석 저장소에서 Synapse Link를 사용하여 동일한 데이터를 직접 쿼리할 수 있습니다. 다음 요구 사항이 있는 경우 분할된 저장소를 켜야 할 수 있습니다.

  • 파티션 열로 사용할 수 있는 일반적인 분석 쿼리 필터
  • 낮은 카디널리티 파티션 열
  • 파티션 열에서 파티션 간에 데이터를 균등하게 분산
  • 대량의 업데이트 또는 삭제 작업
  • 느린 데이터 수집

파티션 키와 다른 쿼리 필터를 사용하여 라이브 데이터를 쿼리하는 경우 분석 저장소를 직접 쿼리하는 것이 좋습니다.

이점

파티션 정리에서 데이터 검사 감소

각 고유 파티션 키에 해당하는 데이터는 분할된 저장소에 공동 배치되므로 파티션 키를 쿼리 필터로 사용하면 쿼리 실행에서 기본 데이터를 정리하고 필요한 데이터만 검사할 수 있습니다. 파티션 정리에서 제한된 데이터를 검사하여 분석 쿼리 성능을 향상시킵니다.

분석 데이터를 분할할 수 있는 유연성

여러 분할 전략을 지정된 분석 저장소 컨테이너에 사용할 수 있습니다. 쿼리 요구 사항에 따라 복합 또는 개별 파티션 키를 사용할 수 있습니다.

쿼리 성능 향상

파티션 정리의 향상된 쿼리 기능 외에도 사용자 지정 분할을 통해 다음 워크로드에 대한 쿼리 성능이 향상됩니다.

  • 과도한 워크로드 업데이트/삭제 - 분석 저장소에서 여러 버전의 레코드를 추적하고 각 쿼리 실행 중에 로드하는 대신 분할된 저장소에는 최신 버전의 데이터만 포함됩니다. 이 기능은 업데이트/삭제 워크로드가 많은 경우 쿼리 성능을 크게 개선합니다.

  • 느린 데이터 수집 워크로드 - 분할은 분석 데이터를 압축하므로 워크로드에 느린 데이터 수집이 있는 경우 이 압축을 통해 쿼리 성능이 향상될 수 있습니다.

트랜잭션 보장

사용자 지정 분할은 완전한 트랜잭션을 보장해야 합니다. 분할 실행이 진행되는 동안 쿼리 경로가 차단되지 않습니다. 각 쿼리 실행은 마지막으로 성공한 분할에서 분할된 데이터를 읽습니다. 분석 저장소에서 최신 데이터를 읽습니다. 따라서 분할된 저장소를 사용하는 경우 쿼리에서 항상 사용 가능한 최신 데이터를 반환할 수 있습니다.

보안

분석 저장소에 대해 관리 프라이빗 엔드포인트를 구성한 경우 분할된 저장소에도 관리 프라이빗 엔드포인트를 추가하는 것이 좋습니다. 분할된 저장소는 Synapse 작업 영역과 연결된 기본 스토리지 계정입니다.

마찬가지로 분석 저장소에서 고객 관리형 키를 구성한 경우 분할된 저장소인 Synapse 작업 영역 기본 스토리지 계정에서도 이러한 키를 직접 사용하도록 설정해야 합니다.

분할 전략

하나 이상의 파티션 키를 분석 데이터에 사용할 수 있습니다. 여러 파티션 키를 사용하는 경우 데이터를 분할하는 방법에 대한 몇 가지 권장 사항은 다음과 같습니다.

  • 복합 키 사용:

    Key1 및 Key2를 기준으로 자주 쿼리하려고 한다고 가정해 보겠습니다.

    예를 들어 "ReadDate = '2021-10-08'및 Location = 'Sydney'인 모든 레코드에 대해 쿼리"합니다.

    이 경우 복합 키를 사용하여 ReadDate와 일치하는 모든 레코드와 해당 ReadDate 내에서 Location과 일치하는 레코드를 조회하는 것이 더 효율적입니다.

    샘플 구성 옵션:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    이제 "위치" 필터를 기반으로 쿼리할 수 있습니다.

    • 분석 저장소를 직접 쿼리할 수 있습니다. 분할된 저장소는 먼저 ReadDate를 기준으로 모든 레코드를 검사한 다음 위치를 기준으로 검사합니다. 따라서 분석 데이터의 워크로드 및 카디널리티에 따라 분석 저장소를 직접 쿼리하여 더 나은 결과를 얻을 수 있습니다.
    • 다른 분할 작업을 실행하여 동일한 분할된 저장소의 "Location"을 기준으로 분할할 수도 있습니다.
  • 여러 키를 별도로 사용:

    예를 들어 때로는 'ReadDate'를 기준으로 쿼리하고 다른 시간에 'Location'을 기준으로 쿼리하려는 경우가 많습니다.

    예를 들면 다음과 같습니다.

    • ReadDate = '2021-10-08'인 모든 레코드에 대한 쿼리
    • Location = 'Sydney'인 모든 레코드에 대한 쿼리

    이 시나리오에 대해 아래에 정의된 파티션 키를 사용하여 두 개의 분할 작업을 실행합니다.

    작업 1:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    작업 2:

    .option("spark.cosmos.asns.partition.keys", "Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    이제 위의 분할에서 "ReadDate" 및 "Location" 필터 모두를 기준으로 자주 쿼리하는 것은 효율적이지 않습니다. 이 경우 복합 키를 사용하면 쿼리 성능이 향상됩니다.

제한 사항

  • 사용자 지정 분할은 Azure Synapse Spark에서만 사용할 수 있습니다. 사용자 지정 분할은 현재 서버리스 SQL 풀에 대해 지원되지 않습니다.

  • 현재 분할된 저장소는 Synapse 작업 영역과 연결된 기본 스토리지 계정만 가리킬 수 있습니다. 현재 사용자 지정 스토리지 계정 선택은 지원되지 않습니다.

  • 사용자 지정 분할은 Azure Cosmos DB의 API for NoSQL에만 사용할 수 있습니다. API for MongoDB, Gremlin 및 Cassandra는 현재 미리 보기 상태입니다.

가격 책정

사용자 지정 분할을 사용하는 경우 Azure Synapse Link 가격 책정 외에도 다음 요금이 발생합니다.

  • 분석 저장소에서 분할 작업을 실행하는 경우 Synapse Apache Spark 풀 사용에 대한 요금이 청구됩니다.

  • 분할된 데이터는 Azure Synapse Analytics 작업 영역과 연결된 기본 Azure Data Lake Storage Gen2 계정에 저장됩니다. ADLS Gen2 스토리지 및 트랜잭션 사용과 관련된 비용이 발생합니다. 이러한 비용은 분할된 분석 데이터와 Synapse에서 분석 쿼리를 위해 처리되는 데이터에 각각 필요한 스토리지에 따라 결정됩니다. 가격 책정에 대한 자세한 내용은 Azure Data Lake Storage 가격 페이지를 참조하세요.

자주 묻는 질문

사용자 지정 분할 작업을 얼마나 자주 실행해야 하나요?

사용자 지정 분할 작업을 실행할 수 있는 빈도를 결정하는 증분 데이터 볼륨, 쿼리 대기 시간 요구 사항 등과 같은 몇 가지 요소가 있습니다. 하루에 한 번 또는 몇 시간마다 한 번 실행할 수 있습니다. 들어오는 데이터 볼륨이 높고 예상 쿼리 대기 시간이 짧은 경우 분할 작업을 더 자주 예약할 수 있습니다. 또한 효과적인 파티션 정리를 위해 먼저 증분 데이터를 분석 저장소에 누적해야 합니다.

분할 작업이 진행되는 동안 최신 데이터가 쿼리 결과에 포함되나요?

예, 사용자 지정 분할은 완전한 트랜잭션 보장을 제공합니다. 따라서 특정 시점의 쿼리 결과는 기존의 분할된 데이터와 최신 분석 저장소 데이터 세트를 반환하는 꼬리 데이터를 결합합니다.

사용자 지정 분할이 Azure Synapse Analytics에서 연결된 서비스 인증을 사용할 수 있나요?

예, 연결된 서비스 인증은 분석 저장소 분할에 사용할 수 있습니다.

나중의 특정 시점에 지정된 컨테이너에 대한 파티션 키를 변경할 수 있나요?

예, 지정된 컨테이너에 대한 파티션 키는 변경할 수 있으며, 새 파티션 키 정의에서 새 분할된 저장소를 만들 수 있습니다.

참고 항목

파티션 키 정의는 분할된 저장소 경로의 일부입니다.

다른 파티션 키에서 동일한 BasePath를 가리킬 수 있나요?

예, 아래와 같이 여러 파티션 키를 동일한 분할된 저장소에 지정할 수 있습니다.

.option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
.option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \

다음 단계

자세히 알아보려면 다음 문서를 참조하세요