적용 대상: NoSQL
이 문서에서는 Azure Cosmos DB SDK를 사용하여 논리 파티션 키 값으로 모든 항목을 삭제하는 방법을 설명합니다.
중요
파티션 키 값 기능별 삭제 항목은 공개 미리 보기로 제공됩니다. 해당 기능은 별도의 서비스 수준 규약 없이 이용할 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
기능 개요
파티션 키별 삭제 기능은 Cosmos SDK를 사용하여 동일한 논리 파티션 키 값을 가진 모든 문서를 삭제할 수 있는 비동기 백그라운드 작업입니다.
삭제할 문서 수가 많을 수 있으므로 백그라운드에서 작업이 실행됩니다. 물리적 삭제 작업은 백그라운드에서 실행되지만 삭제할 문서가 쿼리 또는 읽기 작업의 결과에 표시되지 않으므로 효과를 즉시 사용할 수 있습니다.
파티션 키 작업별 삭제는 최상의 노력으로 컨테이너에서 사용 가능한 초당 총 요청 단위(RU/s)의 최대 10%을 사용하는 것을 목표로 합니다. 이렇게 하면 이 백그라운드 작업에서 사용하는 리소스를 제한할 수 있습니다.
시작하기
Azure CLI를 사용하여 파티션 키 기능별 삭제 를 사용하도록 Azure Cosmos DB 계정을 업데이트합니다.
셸 변수를 설정합니다.
$resourceGroupName = <azure_resource_group> $accountName = <azure_cosmos_db_account_name> $DeleteByPk = "DeleteAllItemsByPartitionKey"계정의 기존 기능을 나열합니다.
$cosmosdb = az cosmosdb show \ --resource-group $resourceGroupName \ --name $accountName $capabilities = ($cosmosdb | ConvertFrom-Json).capabilities아직 없는 경우 기능 목록에서 파티션 키 기능별로 항목 삭제 를 추가합니다.
참고
기능 목록은 사용하도록 설정하려는 모든 기능을 항상 포괄적으로 지정해야 합니다. 여기에는 유지하려는 계정에 대해 이미 사용하도록 설정된 기능이 포함됩니다.
$capabilities = $DeleteByPk파티션 키 기능별로 항목 삭제를 사용하도록 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는 향후 지원될 계획입니다.