다음을 통해 공유


NoSQL 구체화된 뷰에 대한 Azure Cosmos DB를 구성하는 방법(미리 보기)

적용 대상: NoSQL

Important

NoSQL용 Azure Cosmos DB 구체화된 뷰는 현재 미리 보기로 제공됩니다. Azure Portal을 사용하여 이 기능을 사용하도록 설정할 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공됩니다. 현재는 구체화된 뷰를 프로덕션 워크로드에 사용하지 않는 것이 좋습니다. 이 미리 보기의 특정 기능은 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure 미리 보기에 대한 추가 사용 약관을 참조하세요.

구체화된 뷰는 다른 파티션 키 및/또는 데이터 모델을 사용하여 데이터의 뷰를 만들어 쿼리 성능을 최적화하고 애플리케이션 논리를 간소화하는 강력한 방법을 제공합니다. 이 문서에서는 구체화된 뷰를 만드는 방법과 이를 사용하여 파티션 간 쿼리를 효율적으로 처리하는 방법을 설명합니다.

필수 조건

구체화된 뷰를 사용하도록 설정

작성기를 프로비전하거나 뷰를 만들기 전에 Azure Cosmos DB 계정에 대해 구체화된 뷰 기능을 사용하도록 설정해야 합니다.

  1. Azure Portal에 로그인합니다.

  2. NoSQL용 Azure Cosmos DB 계정으로 이동합니다.

  3. 리소스 메뉴에서 설정을 선택합니다.

  4. 설정 아래의 기능 섹션에서 NoSQL API에 대한 구체화된 뷰(미리 보기) 옵션을 켜기로 전환합니다.

  5. 새 대화 상자에서 사용을 선택하여 이 기능을 해당 계정에 사용하도록 설정합니다.

구체화된 뷰 작성기 만들기

계정에 대해 구체화된 보기 기능을 사용하도록 설정하면 구체화된 뷰 작성기를 위한 Azure Portal의 설정 섹션에 새 페이지가 표시됩니다. 계정에서 보기를 만들기 전에 구체화된 뷰 작성기를 프로비전해야 합니다. 작성기는 뷰의 데이터를 자동으로 하이드레이션하고 원본 컨테이너와 동기화된 상태로 유지하는 작업을 담당합니다. 구체화된 뷰 작성기를 프로비전하는 옵션 에 대해 자세히 알아봅니다.

  1. Azure Portal에 로그인합니다.

  2. NoSQL용 Azure Cosmos DB 계정으로 이동합니다.

  3. 리소스 메뉴에서 구체화된 뷰 작성기를 선택합니다.

  4. 구체화된 뷰 작성기 페이지에서 작성기에 대한 SKU 및 인스턴스 수를 구성합니다.

    참고 항목

    이 리소스 메뉴 옵션 및 페이지는 구체화된 뷰 기능을 계정에 사용하도록 설정한 경우에만 표시됩니다.

  5. 저장을 선택합니다.

구체화된 뷰 만들기

기능을 사용하도록 설정하고 구체화된 뷰 작성기를 프로비전한 후 REST API를 사용하여 구체화된 뷰를 만들 수 있습니다.

  1. Azure Portal, Azure SDK, Azure CLI 또는 REST API를 사용하여 파티션 키 경로로 포함된 /customerId 원본 컨테이너를 만듭니다. 이 원본 컨테이너의 이름을 지정합니다 mv-src.

    참고 항목

    /customerId 필드는 이 문서의 예제로만 사용됩니다. 사용자 고유 컨테이너의 경우 솔루션에 적합한 파티션 키를 선택합니다.

  2. 몇 가지 항목을 원본 컨테이너에 삽입합니다. 이 문서에 표시된 예제를 따르려면 항목에 필드 customerIdemailAddress 있는지 확인합니다. 샘플 항목은 다음과 같습니다.

    {
      "id": "eaf0338e-2b61-4163-822f-7bef75bf51de",
      "customerId": "36c7cc3d-1709-45c6-819f-10e5586a6cb7",
      "emailAddress": "justine@contoso.com",
      "name": "Justine"
    }
    

    참고 항목

    이 예제에서는 뷰를 추가하기 전에 원본 컨테이너를 샘플 데이터로 채웁니다. 빈 원본 컨테이너에서 구체화된 뷰를 만들 수도 있습니다.

  3. 이제 원본 컨테이너와 다른 파티션 키 경로를 사용하여 mv-target이라는 구체화된 뷰를 만듭니다. 다음 예제에서 /emailAddressmv-target 컨테이너에 대한 파티션 키 경로로 지정합니다.

    1. 구체화된 뷰에 대한 정의 매니페스트를 만들고 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 데이터 모델을 결정하는 쿼리를 포함합니다. 구체화된 뷰 및 쿼리 제약 조건을 정의하는 방법에 대해 자세히 알아봅니다.

    구체화된 뷰 원본 컨테이너 및 정의 쿼리를 만든 후에는 변경할 수 없습니다.

  4. 다음으로 REST API를 호출하여 mv-definition.json 파일에 정의된 대로 구체화된 뷰를 만듭니다. Azure CLI를 사용하여 REST API를 만듭니다.

    1. 구체화된 뷰 및 원본 데이터베이스 이름에 대한 변수를 만듭니다.

      # 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>"
      
    2. 이러한 변수를 사용하여 리소스 ID를 생성합니다.

      $accountId = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.DocumentDB/databaseAccounts/$accountName"
      
    3. 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
      
    4. 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}"
      
  5. 구체화된 뷰를 만든 후 구체화된 뷰 작성기는 변경 내용을 원본 컨테이너와 자동으로 동기화합니다. 원본 컨테이너에서 만들기, 업데이트 및 삭제 작업을 실행해 봅니다. 구체화된 뷰 컨테이너에 동일한 변경 내용이 전파됩니다.

구체화된 뷰에서 데이터 쿼리

이 예제에서는 원본 컨테이너를 분할 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'"));

다음 단계