다음을 통해 공유


Apache Cassandra용 Azure Cosmos DB의 구체화된 뷰(미리 보기)

적용 대상: Cassandra

Important

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

정의된 구체화된 뷰는 기본 키가 아닌 필터를 사용하여 기본 테이블(또는 Azure Cosmos DB의 컨테이너)을 효율적으로 쿼리하는 수단을 제공하는 데 도움이 됩니다. 사용자가 기본 테이블에 쓸 때 구체화된 뷰는 백그라운드에서 자동으로 빌드됩니다. 이 뷰에는 효율적인 조회를 위해 다른 기본 키가 포함될 수 있습니다. 또한 뷰에는 기본 테이블에서 명시적으로 예상된 열만 포함됩니다. 이 뷰는 읽기 전용 테이블이 됩니다.

보조 인덱스를 사용하여 파티션 키를 지정하지 않고 열 저장소를 쿼리할 수 있습니다. 그러나 카디널리티가 높거나 낮은 열에는 쿼리가 효과적이지 않습니다. 쿼리는 작은 결과 집합에 대한 모든 데이터를 검사할 수 있습니다. 이러한 쿼리는 결국에는 실수로 파티션 간 쿼리로 실행되기 때문에 비용이 많이 듭니다.

구체화된 뷰를 사용하면 다음을 수행할 수 있습니다.

  • 조회 또는 매핑 테이블로 사용하여 비용이 많이 드는 쿼리인 파티션 간 검사를 유지합니다.
  • 사전 조건을 충족하는 특정 열 및 데이터만 채우는 SQL 기반 조건 조건자를 제공합니다.
  • 변경 피드 트리거를 사용하여 일반적으로 별도의 컬렉션으로 저장되는 이벤트 기반 시나리오를 간소화하는 실시간 보기를 만듭니다.

구체화된 뷰의 이점

구체화된 뷰에는 다음과 같은 많은 이점이 있지만 이에 국한되지는 않습니다.

  • 구체화된 뷰를 사용하여 서버 쪽 비정규화를 구현할 수 있습니다. 서버 쪽 비정규화를 사용하면 클라이언트 애플리케이션에서 여러 독립 테이블과 계산적으로 복잡한 비정규화를 방지할 수 있습니다.
  • 구체화된 뷰는 기본 테이블과의 일관성을 유지하기 위해 뷰를 자동으로 업데이트합니다. 이 자동 업데이트는 일반적으로 기본 테이블과 보기에 대한 이중 쓰기를 수행하기 위해 사용자 지정 논리를 구현하는 클라이언트 애플리케이션의 책임을 추상화합니다.
  • 구체화된 뷰는 단일 뷰에서 읽어 읽기 성능을 최적화합니다.
  • 구체화된 뷰에 대한 처리량을 독립적으로 지정할 수 있습니다.
  • 구체화된 뷰 작성기 레이어를 구성하여 뷰를 하이드레이션하기 위한 요구 사항에 매핑할 수 있습니다.
  • 구체화된 뷰는 쓰기 작업이 기본 테이블에만 작성되어야 하므로 쓰기 성능을 향상시킵니다.
  • 또한 구체화된 뷰의 Azure Cosmos DB 구현은 끌어오기 모델을 기반으로 합니다. 이 구현은 쓰기 성능에 영향을 주지 않습니다.

구체화된 뷰 시작

기본 명령 또는 REST API 작업으로 구체화된 뷰 기능을 사용하도록 설정하려면 Azure CLI를 사용하여 Cassandra 계정용 새 API를 만듭니다.

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

  2. Cassandra용 API 계정으로 이동합니다.

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

  4. 설정 섹션에서 Cassandra API에 대한 구체화된 뷰(미리 보기)를 선택합니다.

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

    Azure Portal에서 사용하도록 설정되는 구체화된 뷰 기능의 스크린샷

기본적인 이해

Cassandra용 API는 구체화된 뷰 작성기 컴퓨팅 레이어를 사용하여 뷰를 유지 관리합니다.

뷰를 하이드레이션하기 위해 대기 시간 및 지연 요구 사항에 따라 뷰 작성기의 컴퓨팅 인스턴스를 구성할 유연성을 얻을 수 있습니다. 기술적인 관점에서 이 컴퓨팅 레이어는 데이터 크기가 크고 파티션 수가 많은 경우에도 더욱 효율적인 방식으로 파티션 간의 연결을 관리하는 데 도움이 됩니다.

컴퓨팅 컨테이너는 Azure Cosmos DB 계정 내의 모든 구체화된 뷰 간에 공유됩니다. 프로비전된 각 컴퓨팅 컨테이너는 기본 테이블 파티션에서 변경 피드를 읽고 데이터를 대상 구체화된 뷰에 쓰는 여러 작업을 생성합니다. 컴퓨팅 컨테이너는 계정의 각 구체화된 뷰에 대해 구체화된 뷰 정의당 데이터를 변환합니다.

구체화된 뷰 작성기 만들기

구체화된 뷰 작성기를 만들어 데이터를 자동으로 변환하고 구체화된 뷰에 씁니다.

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

  2. Cassandra용 API 계정으로 이동합니다.

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

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

    참고 항목

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

  5. 저장을 선택합니다.

구체화된 뷰 만들기

계정과 구체화된 뷰 작성기가 설정되면 CQLSH를 사용하여 구체화된 뷰를 만들 수 있습니다.

참고 항목

독립 실행형 CQLSH 도구를 아직 설치하지 않은 경우에는 CQLSH 도구 설치를 참조하세요. 또한 도구에서 연결 문자열을 업데이트해야 합니다.

구체화된 뷰를 만드는 몇 가지 샘플 명령은 다음과 같습니다.

  1. 먼저 키스페이스 이름 uprofile을 만듭니다.

    CREATE KEYSPACE IF NOT EXISTS uprofile WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 };
    
  2. 다음으로, 키스페이스 내에 user라는 테이블을 만듭니다.

    CREATE TABLE IF NOT EXISTS uprofile.USER (user_id INT PRIMARY KEY, user_name text, user_bcity text);
    
  3. 이제 동일한 키스페이스 내에 user_by_bcity라는 구체화된 뷰를 만듭니다. 쿼리를 사용하여 데이터가 기본 테이블에서 뷰로 예상되는 방식을 지정합니다.

    CREATE MATERIALIZED VIEW uprofile.user_by_bcity AS 
    SELECT
        user_id,
        user_name,
        user_bcity 
    FROM
        uprofile.USER 
    WHERE
        user_id IS NOT NULL 
        AND user_bcity IS NOT NULL PRIMARY KEY (user_bcity, user_id);
    
  4. 기본 테이블에 행을 삽입합니다.

    INSERT INTO
        uprofile.USER (user_id, user_name, user_bcity) 
    VALUES
        (
            101, 'johnjoe', 'New York' 
        );
    
    INSERT INTO
        uprofile.USER (user_id, user_name, user_bcity) 
    VALUES
        (
            102, 'james', 'New York' 
        );
    
  5. 구체화된 뷰를 쿼리합니다.

    SELECT * FROM user_by_bcity; 
    
  6. 구체화된 뷰의 출력을 관찰합니다.

     user_bcity | user_id | user_name 
    ------------+---------+----------- 
       New York |     101 |   johnjoe 
       New York |     102 |     james 
    
    (2 rows) 
    

필요에 따라 리소스 공급자를 사용하여 구체화된 뷰를 만들거나 업데이트할 수도 있습니다.

현재 제한 사항

구체화된 뷰의 Cassandra용 API의 미리 보기 구현에는 몇 가지 제한 사항이 있습니다.

  • 계정에서 구체화된 뷰에 대한 지원을 사용하도록 설정하기 전에 이미 있던 테이블에는 구체화된 뷰를 만들 수 없습니다. 구체화된 뷰를 사용하려면 이 기능을 사용하도록 설정한 후 새 테이블을 만듭니다.
  • 구체화된 뷰 정의의 WHERE 절에는 현재 IS NOT NULL 필터만 허용됩니다.
  • 기본 테이블에 대해 구체화된 뷰를 만든 후에는 기본 테이블의 스키마에서 ALTER TABLE ADD 작업이 허용되지 않습니다. ALTER TABLE APP은 구체화된 뷰가 정의에서 선택되지 않은 경우에만* 허용됩니다.
  • 파티션 키 크기(2Kb) 및 클러스터링 키 크기의 총 길이(1Kb)에는 제한이 있습니다. 이 크기 제한을 초과하면 책임 있는 메시지가 포이즌 메시지 큐로 종료됩니다.
  • 기본 테이블에 UDT(사용자 정의 유형)가 있고 구체화된 뷰 정의에 SELECT * FROM이 있거나 예상되는 열 중 하나에 UDT가 있는 경우에는 계정에서 UDT 업데이트가 허용되지 않습니다.
  • 구체화된 뷰는 자동 지역 장애 조치(failover) 후 일부 행에 대해 기본 테이블과 일치하지 않을 수 있습니다. 이러한 불일치를 방지하려면 장애 조치(failover) 후 구체화된 뷰를 다시 빌드합니다.
  • 32코어가 있는 구체화된 뷰 작성기 인스턴스 만들기는 지원되지 않습니다. 필요한 경우 코어 수가 적은 여러 작성기 인스턴스를 만들 수 있습니다.

위의 제한 사항 외에도 다음과 같은 추가 제한 사항을 고려합니다.

  • 가용성 영역
    • 가용성 영역이 사용하도록 설정된 지역이 있는 계정에서는 구체화된 뷰를 사용하도록 설정할 수 없습니다.
    • 계정에서 enableMaterializedViews가 true로 설정되면 가용성 영역이 있는 새 지역을 추가하는 기능은 지원되지 않습니다.
  • 정기 백업 및 복원
    • 구체화된 뷰는 복원 프로세스에서 자동으로 복원되지 않습니다. 복원 프로세스가 완료되면 고객이 구체화된 뷰를 다시 만들어야 합니다. 그런 다음, 구체화된 뷰 및 작성기를 다시 만들기 전에 복원된 계정에서 enableMaterializedViews를 구성해야 합니다.
  • Apache Cassandra
    • 구체화된 뷰에서 충돌 해결 정책을 정의하는 것은 허용되지 않습니다.
    • 구체화된 뷰에서 쓰기 작업은 허용되지 않습니다.
    • 구체화된 뷰에서 문서 간 쿼리 및 집계 함수 사용은 지원되지 않습니다.
    • 구체화된 뷰의 스키마는 만든 후에 수정할 수 없습니다.
    • 하나 이상의 구체화된 뷰가 정의된 경우에는 기본 테이블을 삭제할 수 없습니다. 먼저 모든 뷰를 삭제해야 기본 테이블을 삭제할 수 있습니다.
    • 컨테이너에서 정적 열이 있는 구체화된 뷰를 정의하는 작업은 허용되지 않습니다.

다음 단계