다음을 통해 공유


Azure Cosmos DB의 데이터베이스, 컨테이너, 항목

Azure Cosmos DB는 완전 관리형 서비스(PaaS) 플랫폼입니다. Azure Cosmos DB를 사용하려면 구독의 Azure 리소스 그룹에 Azure Cosmos DB 계정을 만듭니다. 그리고, 계정 내에 데이터베이스 및 컨테이너를 생성합니다.

Azure Cosmos DB 계정에는 고유의 DNS(Domain Name System) 이름이 있습니다. DNS 이름은 다음을 비롯해 여러 도구를 사용하여 관리할 수 있습니다.

  • Azure portal
  • Azure 리소스 관리자 템플릿
  • Bicep 템플릿
  • Azure PowerShell
  • Azure CLI
  • Azure Management 소프트웨어 개발 키트 (SDK)
  • Azure REST API

여러 Azure 지역에 걸쳐 데이터 및 처리량을 복제하기 위해 언제든지 계정에 Azure 지역을 추가 및 제거할 수 있습니다. 계정에 단일 지역 또는 여러 개의 쓰기 지역을 구성할 수 있습니다. 자세한 내용은 Azure Portal을 사용하여 Azure Cosmos DB 계정 관리를 참조하십시오. 계정에서 기본 일관성 수준을 구성할 수도 있습니다.

Azure Cosmos 계정의 요소

현재 Azure 구독에 최대 250개의 Azure Cosmos DB 계정을 생성할 수 있습니다. 지원 요청을 제출하여 한도를 늘릴 수 있습니다.

단일 Azure Cosmos DB 계정을 이용해 무제한 데이터와 프로비전된 처리량을 가상으로 관리할 수 있습니다. 데이터 및 프로비저닝된 처리량을 관리하기 위해서는 계정 내 하나 이상의 데이터베이스를 생성한 후 데이터를 보관할 컨테이너를 1개 이상 생성할 수 있습니다.

다음 이미지에서는 Azure Cosmos DB 계정 내 요소의 계층구조를 나타냅니다.

계정, 데이터베이스, 컨테이너를 포함해 Azure Cosmos DB 계정의 계층구조 다이어그램.

다음 이미지는 Azure Cosmos DB 계정의 엔티티 계층 구조를 보여줍니다.

컨테이너와 항목 간 관계를 보여주는 다이어그램으로, 저장 프로시저, 사용자 정의 함수, 트리거 등 동급 엔티티도 포함합니다.

Azure Cosmos DB 데이터베이스

Azure Cosmos DB에서 데이터베이스는 네임스페이스와 유사합니다. 데이터베이스는 단순히 컨테이너 그룹입니다. 다음 표에서는 데이터베이스가 다양한 API 관련 엔티티에 어떻게 매핑되는지 보여줍니다.

Azure Cosmos DB 엔터티 API for NoSQL Apache Cassandra용 API MongoDB용 API Apache Gremlin용 API API for Table
Azure Cosmos DB 데이터베이스 데이터베이스 Keyspace 데이터베이스 데이터베이스 해당 없음

참고

Table API 계정을 사용하는 경우, Azure Cosmos DB의 테이블은 Azure Tables Storage와 호환성을 유지하기 위해 계정 수준에서 생성됩니다.

Azure Cosmos DB 컨테이너

Azure Cosmos DB 컨테이너는 데이터가 저장되는 위치입니다. 대부분 관계형 데이터베이스가 가상 머신 크기를 늘려 수직 확산하는 것과 달리, Azure Cosmos DB는 수평 확장합니다.

데이터는 파티션이라는 하나 이상 서버에 보관됩니다. 파티션을 늘리기 위해서는 처리량을 늘리거나, 스토리지가 증가하면 자동으로 늘어납니다. 이러한 관계는 컨테이너 처리량 및 스토리지를 무제한으로 제공합니다.

컨테이너를 생성할 때는 파티션 키를 제공해야 합니다. 파티션 키는 Azure Cosmos DB가 파티션에 걸쳐 데이터를 효율적으로 분배하도록 돕기 위해 사용자의 항목에서 선택하는 속성입니다. Azure Cosmos DB는 데이터를 작성, 업데이트 또는 삭제할 적절한 파티션으로 전달하기 위해 이 속성의 값을 사용합니다. 쿼리의 WHERE 절에 파티션 키를 사용하면 효율적인 데이터 검색도 가능합니다.

Azure Cosmos DB의 데이터에 기본 스토리지 메커니즘은 물리 파티션이라고도 부릅니다. 물리 파티션은 초당 최대 10,000 요청 단위의 처리량을 가질 수 있고, 데이터를 최대 50GB까지 저장할 수 있습니다. Azure Cosmos DB는 이 파티셔닝 개념을 논리 파티션으로 추상화하며, 논리 파티션은 최대 20GB까지 데이터를 저장할 수 있습니다.

논리 파티션은 파티션을 추가할 때마다 기본 실제 파티션에서 서비스는 더 높은 탄력성과 더 나은 데이터 관리를 허용합니다. 파티셔닝 및 파티션 키에 대한 자세한 내용은 Azure Cosmos DB의 파티셔닝 및 수평 확장을 참조하세요.

컨테이너를 만들 때 다음 모드 중 하나로 처리량을 구성합니다.

  • 전용 처리량: 컨테이너에 처리량은 해당 컨테이너 전용으로 예약됩니다. 전용 처리량에는 표준과 자동크기조정, 두 가지 종류가 있습니다. 자세한 내용은 Azure Cosmos DB 컨테이너에서 표준 (수동) 처리량 구성을 참조하세요.
  • 공유 처리량: 처리량은 데이터베이스 수준에서 지정된 이후 데이터베이스에서 최대 25개의 컨테이너와 공유됩니다. 처리량 공유 시 자체 전용 처리량으로 구성된 컨테이너는 제외시킵니다.

데이터베이스의 모든 컨테이너가 요청 및 스토리지 요구 사항이 모두 비슷하거나, 데이터에 예측 가능한 성능이 필요 없는 경우에는 공유 처리량이 좋은 선택입니다. 자세한 내용은 Azure Cosmos DB의 데이터베이스에 표준 (수동) 처리량 구성을 참조하세요.

참고

전용 처리량과 공유 처리량은 서로 전환할 수 없습니다. 공유 처리량 데이터베이스에서 생성한 컨테이너가 전용 처리량을 갖도록 업데이트할 수는 없습니다. 공유 처리량에서 전용 처리량으로 변경하기 위해서는 신규 컨테이너를 생성하고 그곳으로 데이터를 복사해야 합니다. Azure Cosmos DB의 컨테이너 복사 기능으로 이 프로세스가 더 수월해집니다.

컨테이너는 스키마에 영향을 받지 않습니다. 컨테이너 내 항목은 같은 파티션 키를 공유하는 한 임의의 스키마를 갖거나 다른 엔티티일 수 있습니다. 예를 들어, 컨테이너는 고객 프로필을 저장할 수 있습니다. 또한 해당 고객이 주문한 판매 주문마다 항목을 저장할 수 있습니다. 모든 고객에 대한 비슷한 정보를 동일한 컨테이너에 넣을 수도 있습니다.

사용자가 컨테이너에 추가한 모든 데이터는 명시적 인덱싱 없이 자동으로 인덱싱되는 것이 기본 설정입니다. 인덱싱 정책을 구성하여 컨테이너에 대한 인덱싱을 사용자 지정할 수 있습니다.

성능에 영향을 미치지 않도록, 컨테이너 내 선택된 항목이나 전체 컨테이너에서 TTL(Time to Live)을 설정하여, 사용되지 않는 처리량을 사용해 백그라운드에서 자동으로 항목을 삭제할 수 있습니다. 하지만 만료된 데이터가 삭제되지 않더라도 읽기 작업에 표시되지 않습니다. 자세한 내용은 Azure Cosmos DB에서 TTL(Time to Live) 구성을 참조합니다.

Azure Cosmos DB는 변경 데이터 캡처를 위해 change feed라는 기능을 기본으로 제공합니다. 이를 사용하여 컨테이너 내 데이터에 대한 모든 변경 내용을 구독할 수 있습니다.

저장 프로시저, 트리거, UDF(사용자 정의 함수), 컨테이너에 대한 병합 프로시저를 등록할 수 있습니다.

컨테이너 내 각 문서에는 해당 컨테이너에 대한 논리 키의 속성 값 내에 고유한 id 속성이 포함되어야 합니다. 명시적으로 정의하지 않고도 컨테이너 내에서 고유 제약을 제공하기 위해 이 속성의 조합을 사용할 수 있습니다.

하나 이상의 속성을 사용하는 Azure Cosmos DB 컨테이너에 대해 고유 키 제약을 지정할 수도 있습니다. 고유 키 제약은 논리 파티션 키당 1개 이상 값에 대해 고유성을 보장합니다. 고유 키 정책을 이용해 컨테이너를 생성할 때는 고유 키 제약에서 지정하는 값과 중복된 값을 가진 신규 또는 업데이트된 항목을 생성할 수 없습니다.

컨테이너는 다음 테이블에 표시한 바와 같이 API 관련 엔티티로 특수화됩니다.

Azure Cosmos DB 엔터티 API for NoSQL Cassandra용 API MongoDB용 API Gremlin용 API API for Table
Azure Cosmos DB 컨테이너 컨테이너 테이블 컬렉션 그래프 테이블

참고

대소문자를 다르게 한 동일한 이름의 컨테이너 2개를 생성하지 않도록 합니다. Azure 플랫폼의 일부 부분은 대소문자를 구분하지 않으므로 이러한 명명은 컨테이너에 대한 진단 데이터 및 작업의 혼동 또는 충돌을 야기할 수 있습니다.

Azure Cosmos DB 컨테이너의 속성

Azure Cosmos DB 컨테이너에는 시스템 정의 속성 세트가 있습니다. 사용하는 API에 따라 직접 노출되지 않는 속성도 있습니다. 다음 표는 시스템에서 정의한 속성을 설명합니다.

시스템 정의 속성 시스템에서 생성하거나 사용자가 구성 가능 목적 API for NoSQL Cassandra용 API MongoDB용 API Gremlin용 API API for Table
_rid 시스템에서 생성함 컨테이너의 고유 식별자. 아니요 아니요 아니요 아니요
_etag 시스템에서 생성함 낙관적 동시성 제어에 사용되는 엔티티 태그. 아니요 아니요 아니요 아니요
_ts 시스템에서 생성함 컨테이너의 최종 업데이트 타임스탬프. 아니요 아니요 아니요 아니요
_self 시스템에서 생성함 주소 지정 가능한 컨테이너의 URI. 아니요 아니요 아니요 아니요
id 사용자가 구성 가능함 컨테이너의 이름입니다.
indexingPolicy 사용자가 구성 가능함 컨테이너의 인덱스 빌드를 위한 정책. 아니요
TimeToLive 사용자가 구성 가능함 설정된 시간 이후 컨테이너에서 항목 자동 삭제. 세부 정보는 TTL(Time to Live)를 참조하세요. 아니요 아니요 아니요
changeFeedPolicy 사용자가 구성 가능함 컨테이너 내 항목의 변경 내용을 읽기 위한 정책. 자세한 내용은 피드 변경을 참조하십시오. 아니요 아니요 아니요
uniqueKeyPolicy 사용자가 구성 가능함 논리 파티션에 1개 이상 값의 고유성을 보장하기 위한 정책. 자세한 내용은 고유 키 제약을 참조하십시오. 아니요 아니요 아니요
AnalyticalTimeToLive 사용자가 구성 가능함 설정된 시간 경과 후 분석 저장소의 컨텍스트에서 컨테이너의 항목을 자동으로 삭제. 이 기능은 더 이상 사용되지 않습니다. 아니요 아니요 아니요

Azure Cosmos DB 항목

개별 데이터 엔티티는 사용하는 API에 따라 다양한 방식으로 표현될 수 있습니다.

Azure Cosmos DB 엔터티 API for NoSQL Cassandra용 API MongoDB용 API Gremlin용 API API for Table
Azure Cosmos DB 항목 항목 문서 노드 또는 에지 항목

항목의 속성

모든 Azure Cosmos DB 항목에는 다음과 같은 시스템 정의 속성이 있습니다. 사용하는 API에 따라 직접 노출되지 않는 속성도 일부 있습니다.

시스템 정의 속성 시스템에서 생성되거나 사용자가 정의함 목적 API for NoSQL Cassandra용 API MongoDB용 API Gremlin용 API API for Table
_rid 시스템에서 생성함 항목의 고유 식별자 아니요 아니요 아니요 아니요
_etag 시스템에서 생성함 낙관적 동시성 제어에 사용되는 엔티티 태그. 아니요 아니요 아니요 아니요
_ts 시스템에서 생성함 항목 마지막 업데이트 타임스탬프 아니요 아니요 아니요 아니요
_self 시스템에서 생성함 주소 지정 가능한 항목 URI 아니요 아니요 아니요 아니요
id 여기서는 논리 파티션 내 사용자가 정의한 고유 이름
임의 사용자 정의 속성 사용자 정의 JSON, 이진 JSON(BSON) 및 Cassandra 쿼리 언어(CQL)를 포함한 API 네이티브 표현 방식의 사용자 정의 속성

참고

id 속성의 고유성은 각 논리 파티션 내에서 적용됩니다. 다수의 문서에서 파티션 키 값은 다르지만 동일한 id 속성 값을 가질 수 있습니다.

항목에 대한 작업

Azure Cosmos DB 항목은 다음 작업을 지원합니다. 작업을 수행하기 위해 어떠한 Azure Cosmos DB API든 사용할 수 있습니다.

작업(Operation) API for NoSQL Cassandra용 API MongoDB용 API Gremlin용 API API for Table
삽입, 교체, 삭제, upsert, 읽기