파티션 키 값으로 항목 삭제 - NoSQL용 API(미리 보기)

적용 대상: NoSQL

이 문서에서는 Azure Cosmos DB SDK를 사용하여 논리 파티션 키 값으로 모든 항목을 삭제하는 방법을 설명합니다.

Important

파티션 키 값으로 항목 삭제는 퍼블릭 미리 보기로 제공됩니다. 해당 기능은 별도의 서비스 수준 규약 없이 이용할 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

기능 개요

파티션 키에 의한 삭제 기능은 Cosmos SDK를 사용하여 동일한 논리적 파티션 키 값을 가진 모든 문서를 삭제할 수 있는 비동기식 백그라운드 작업입니다.

삭제할 문서가 많을 수 있으므로 작업이 백그라운드에서 실행됩니다. 실제 삭제 작업은 백그라운드에서 실행되지만 삭제할 문서가 쿼리 또는 읽기 작업의 결과에 나타나지 않으므로 즉시 효과를 사용할 수 있습니다.

파티션 키에 의한 삭제 작업은 컨테이너에서 초당 사용 가능한 총 RU의 최대 10%를 사용하도록 제한됩니다. 이렇게 하면 이 백그라운드 작업에서 사용하는 리소스를 제한하는 데 도움이 됩니다.

시작하기

Azure CLI를 사용하여 "파티션 키에 의한 삭제" 기능을 사용하도록 설정하려면 Azure Cosmos DB 계정을 업데이트합니다.

  • 1단계: 셸 변수 설정합니다.

        $resourceGroupName = <azure_resource_group>
        $accountName = <azure_cosmos_db_account_name>
        $DeleteByPk = "DeleteAllItemsByPartitionKey"
    
  • 2단계: 계정의 기존 기능을 나열합니다.

       $cosmosdb = az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName
       $capabilities = ($cosmosdb | ConvertFrom-Json).capabilities 
    
  • 3단계: 아직 존재하지 않는 경우 기능 목록에 "파티션 키로 항목 삭제" 기능을 추가합니다.

    참고 항목

    기능 목록은 사용하도록 설정하려는 모든 기능을 항상 포괄적으로 지정해야 합니다. 여기에는 유지하려는 계정에 대해 이미 사용하도록 설정된 기능이 포함됩니다.

       $capabilities += $DeleteByPk
    
  • 4단계: "파티션 키로 항목 삭제" 기능을 사용하도록 설정하도록 Cosmos DB 계정을 업데이트합니다.

        az cosmosdb update --capabilities $capabilities \
         -n $accountName -g $resourceGroupName
    

샘플 코드

Azure Cosmos DB .NET SDK의 버전 3.25.0-미리 보기(또는 더 높은 미리 보기 버전)를 사용하여 파티션 키로 항목을 삭제합니다.

// Suppose our container is partitioned by tenantId, and we want to delete all the data for a particular tenant Contoso

// Get reference to the container
var container = cosmosClient.GetContainer("DatabaseName", "ContainerName");

// Delete by logical partition key
ResponseMessage deleteResponse = await container.DeleteAllItemsByPartitionKeyStreamAsync(new PartitionKey("Contoso"));

 if (deleteResponse.IsSuccessStatusCode) {
    Console.WriteLine($"Delete all documents with partition key operation has successfully started");
}

질문과 대답(FAQ)

파티션 키에 의한 삭제 작업의 결과는 즉시 반영되나요?

예, 파티션 키에 의한 삭제 작업이 시작되면 삭제할 문서가 쿼리 또는 읽기 작업의 결과에 나타나지 않습니다. 이는 또한 충돌을 일으키지 않고 삭제할 문서와 동일한 ID 및 파티션 키를 사용하여 새 문서를 작성할 수 있음을 의미합니다.

예외는 알려진 문제를 참조하세요.

파티션 키에 의한 삭제 작업을 실행한 다음 즉시 동일한 파티션 키로 새 문서를 작성하면 어떻게 되나요?

파티션 키에 의한 삭제 작업이 실행되면 해당 파티션 키 값을 가진 컨테이너에 존재하는 문서만 삭제됩니다. 새로 들어오는 문서는 삭제 대상이 아닙니다.

파티션 키에 의한 삭제 작업은 컨테이너에 대해 다른 작업 중에서 어떻게 우선 순위가 지정되나요?

기본적으로 파티션 키 값에 의한 삭제 작업은 리소스에 대한 전체 RU/s의 예약된 부분(0.1 또는 10%)까지 사용할 수 있습니다. 이 버킷에서 사용되지 않는 모든 RU(요청 단위)는 읽기, 쓰기 및 쿼리와 같이 백그라운드가 아닌 다른 작업에 사용할 수 있습니다.

예를 들어 컨테이너에 1000RU/s를 프로비전했다고 가정합니다. 5초 동안 100RU/s를 사용하는 파티션 키에 의한 삭제 작업이 진행 중입니다. 이 5초 동안 비백그라운드 데이터베이스 작업에 사용할 수 있는 900RU가 있습니다. 삭제 작업이 완료되면 이제 모든 1000RU/s를 다시 사용할 수 있습니다.

알려진 문제

일부 시나리오에서는 파티션 키에 의한 삭제 작업이 즉시 효과를 보장하지 못할 수 있으며 작업 중에 부분적인 표시 여부가 발생할 수 있습니다.

  • 인덱스를 사용하는 집계 쿼리(예: COUNT 쿼리)는 파티션 키에 의한 지속적인 삭제 작업 중에 실행되며 삭제할 문서의 결과가 포함될 수 있습니다. 삭제 작업이 완전히 완료될 때까지 발생할 수 있습니다.
  • 파티션 키에 의한 지속적인 삭제 작업 중에 분석 저장소에 대해 실행된 쿼리에는 삭제할 문서의 결과가 포함될 수 있습니다. 삭제 작업이 완전히 완료될 때까지 발생할 수 있습니다.
  • 지속적인 백업(특정 시점 복원) - 파티션 키에 의한 지속적인 삭제 작업 중에 트리거되는 복원에는 복원된 컬렉션에서 삭제할 문서의 결과가 포함될 수 있습니다. 지속적인 백업이 필요한 시나리오가 있는 경우 이 미리 보기 기능을 사용하지 않는 것이 좋습니다.

제한 사항

  • 계층적 파티션 키 삭제는 지원되지 않습니다. 이 기능을 사용하면 마지막 파티션 키 수준에 따라 항목을 삭제할 수 있습니다. 예를 들어 파티션 키가 국가, 주 및 도시의 세 가지 계층 구조 수준으로 구성된 시나리오를 고려해 보세요. 이 컨텍스트에서 파티션 키별 삭제 기능은 모든 수준, 즉 국가/주/도시를 포함하는 전체 파티션 키를 지정하여 효과적으로 사용할 수 있습니다. 국가/주 또는 단독 국가와 같은 중간 파티션 키를 사용하여 삭제하려고 하면 오류가 발생합니다.

피드백을 제공하거나 문제/버그를 보고하는 방법

  • 질문이나 피드백이 있는 경우 cosmosPkDeleteFeedbk@microsoft.com에 이메일을 보내주세요.

SDK 요구 사항

이 기능을 지원하는 최신 SDK 버전을 찾습니다.

SDK 지원되는 버전 패키지 관리자 링크
.NET SDK v3 >= 3.25.0-미리 보기(미리 보기 버전이어야 함) https://www.nuget.org/packages/Microsoft.Azure.Cosmos/
Java SDK v4 >= 4.19.0(API는 베타로 표시됨) https://mvnrepository.com/artifact/com.azure/azure-cosmos
Python SDK v4 >= 4..4.0b1(베타 버전이어야 함) https://pypi.org/project/azure-cosmos/4.4.0b1/

다른 SDK는 향후 지원될 계획입니다.

다음 단계

Azure Cosmos DB의 추가 SDK 작업에 대해 알아보려면 다음 문서를 참조하세요.