NoSQL 구체화된 뷰에 대한 Azure Cosmos DB를 구성하는 방법(미리 보기)
적용 대상: NoSQL
Important
NoSQL용 Azure Cosmos DB 구체화된 뷰는 현재 미리 보기로 제공됩니다. Azure Portal을 사용하여 이 기능을 사용하도록 설정할 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공됩니다. 현재는 구체화된 뷰를 프로덕션 워크로드에 사용하지 않는 것이 좋습니다. 이 미리 보기의 특정 기능은 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure 미리 보기에 대한 추가 사용 약관을 참조하세요.
구체화된 뷰는 다른 파티션 키 및/또는 데이터 모델을 사용하여 데이터의 뷰를 만들어 쿼리 성능을 최적화하고 애플리케이션 논리를 간소화하는 강력한 방법을 제공합니다. 이 문서에서는 구체화된 뷰를 만드는 방법과 이를 사용하여 파티션 간 쿼리를 효율적으로 처리하는 방법을 설명합니다.
필수 조건
- 기존 Azure Cosmos DB 계정.
- 기존 Azure 구독이 있는 경우 새 계정을 만듭니다.
- Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
- 또는 커밋하기 전에 Azure Cosmos DB 평가판을 사용해 볼 수 있습니다.
구체화된 뷰를 사용하도록 설정
작성기를 프로비전하거나 뷰를 만들기 전에 Azure Cosmos DB 계정에 대해 구체화된 뷰 기능을 사용하도록 설정해야 합니다.
Azure Portal에 로그인합니다.
NoSQL용 Azure Cosmos DB 계정으로 이동합니다.
리소스 메뉴에서 설정을 선택합니다.
설정 아래의 기능 섹션에서 NoSQL API에 대한 구체화된 뷰(미리 보기) 옵션을 켜기로 전환합니다.
새 대화 상자에서 사용을 선택하여 이 기능을 해당 계정에 사용하도록 설정합니다.
구체화된 뷰 작성기 만들기
계정에 대해 구체화된 보기 기능을 사용하도록 설정하면 구체화된 뷰 작성기를 위한 Azure Portal의 설정 섹션에 새 페이지가 표시됩니다. 계정에서 보기를 만들기 전에 구체화된 뷰 작성기를 프로비전해야 합니다. 작성기는 뷰의 데이터를 자동으로 하이드레이션하고 원본 컨테이너와 동기화된 상태로 유지하는 작업을 담당합니다. 구체화된 뷰 작성기를 프로비전하는 옵션 에 대해 자세히 알아봅니다.
Azure Portal에 로그인합니다.
NoSQL용 Azure Cosmos DB 계정으로 이동합니다.
리소스 메뉴에서 구체화된 뷰 작성기를 선택합니다.
구체화된 뷰 작성기 페이지에서 작성기에 대한 SKU 및 인스턴스 수를 구성합니다.
참고 항목
이 리소스 메뉴 옵션 및 페이지는 구체화된 뷰 기능을 계정에 사용하도록 설정한 경우에만 표시됩니다.
저장을 선택합니다.
구체화된 뷰 만들기
기능을 사용하도록 설정하고 구체화된 뷰 작성기를 프로비전한 후 REST API를 사용하여 구체화된 뷰를 만들 수 있습니다.
Azure Portal, Azure SDK, Azure CLI 또는 REST API를 사용하여 파티션 키 경로로 포함된
/customerId
원본 컨테이너를 만듭니다. 이 원본 컨테이너의 이름을 지정합니다mv-src
.참고 항목
/customerId
필드는 이 문서의 예제로만 사용됩니다. 사용자 고유 컨테이너의 경우 솔루션에 적합한 파티션 키를 선택합니다.몇 가지 항목을 원본 컨테이너에 삽입합니다. 이 문서에 표시된 예제를 따르려면 항목에 필드
customerId
가emailAddress
있는지 확인합니다. 샘플 항목은 다음과 같습니다.{ "id": "eaf0338e-2b61-4163-822f-7bef75bf51de", "customerId": "36c7cc3d-1709-45c6-819f-10e5586a6cb7", "emailAddress": "justine@contoso.com", "name": "Justine" }
참고 항목
이 예제에서는 뷰를 추가하기 전에 원본 컨테이너를 샘플 데이터로 채웁니다. 빈 원본 컨테이너에서 구체화된 뷰를 만들 수도 있습니다.
이제 원본 컨테이너와 다른 파티션 키 경로를 사용하여
mv-target
이라는 구체화된 뷰를 만듭니다. 다음 예제에서/emailAddress
를mv-target
컨테이너에 대한 파티션 키 경로로 지정합니다.구체화된 뷰에 대한 정의 매니페스트를 만들고 mv-definition.json JSON 파일에 저장합니다.
{ "location": "North Central US", "tags": {}, "properties": { "resource": { "id": "mv-target", "partitionKey": { "paths": [ "/emailAddress" ] }, "materializedViewDefinition": { "sourceCollectionId": "mv-src", "definition": "SELECT c.customerId, c.emailAddress FROM c" } }, "options": { "throughput": 400 } } }
Important
템플릿에서 파티션 키 경로가 .로
/emailAddress
설정되어 있는지 확인합니다. 뷰sourceCollectionId
의 원본 컨테이너를 정의하고 뷰의definition
데이터 모델을 결정하는 쿼리를 포함합니다. 구체화된 뷰 및 쿼리 제약 조건을 정의하는 방법에 대해 자세히 알아봅니다.구체화된 뷰 원본 컨테이너 및 정의 쿼리를 만든 후에는 변경할 수 없습니다.
다음으로 REST API를 호출하여 mv-definition.json 파일에 정의된 대로 구체화된 뷰를 만듭니다. Azure CLI를 사용하여 REST API를 만듭니다.
구체화된 뷰 및 원본 데이터베이스 이름에 대한 변수를 만듭니다.
# This should match the resource ID you defined in your json file $materializedViewName = "mv-target" # Database name for the source and view containers $databaseName = "<Database that contains source container>" # Azure Cosmos DB account name $accountName = "<Azure Cosmos DB account name>" # Resource name for your Azure Cosmos DB account $resourceGroupName = "<Resource group for Azure Cosmos DB account>" # Subscription id for your Azure Cosmos DB account $subscriptionId = "<Subscription id>"
이러한 변수를 사용하여 리소스 ID를 생성합니다.
$accountId = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.DocumentDB/databaseAccounts/$accountName"
REST API 호출을 수행하여 구체화된 뷰를 만듭니다.
az rest \ --method PUT \ --uri "https://management.azure.com$accountId/sqlDatabases/ \ $databaseName/containers/$materializedViewName/?api-version=2022-11-15-preview" \ --body @mv-definition.json \ --headers content-type=application/json
REST API를 사용하여 구체화된 뷰 컨테이너 만들기의 상태를 확인합니다.
az rest \ --method GET \ --uri "https://management.azure.com$accountId/sqlDatabases/ $databaseName/containers/$materializedViewName/?api-version=2022-11-15-preview" \ --headers content-type=application/json \ --query "{mvCreateStatus: properties.Status}"
구체화된 뷰를 만든 후 구체화된 뷰 작성기는 변경 내용을 원본 컨테이너와 자동으로 동기화합니다. 원본 컨테이너에서 만들기, 업데이트 및 삭제 작업을 실행해 봅니다. 구체화된 뷰 컨테이너에 동일한 변경 내용이 전파됩니다.
구체화된 뷰에서 데이터 쿼리
이 예제에서는 원본 컨테이너를 분할 customerId
하고 뷰를 분할합니다 emailAddress
. 뷰가 없으면 해당 쿼리만 포함하는 emailAddress
쿼리는 파티션 간이지만 이제는 뷰에 대해 실행하여 효율성을 높일 수 있습니다.
구체화된 뷰에서 데이터를 쿼리하는 것은 다른 컨테이너의 데이터를 쿼리하는 것과 유사합니다. Azure Portal, Azure SDK 또는 REST API를 사용하여 구체화된 뷰에서 데이터를 쿼리할 수 있습니다.
Container container = client.GetDatabase("mv-db").GetContainer("mv-target");
FeedIterator<MyClass> myQuery = container.GetItemQueryIterator<MyClass>(new QueryDefinition("SELECT * FROM c WHERE c.emailAddress = 'justine@contoso.com'"));