Azure Cosmos DB의 데이터베이스, 컨테이너 및 항목
적용 대상: NoSQL MongoDB Cassandra Gremlin 테이블
Azure Cosmos DB는 완전 관리형 PaaS(Platform as a Service)입니다. Azure Cosmos DB를 사용하려면 구독의 Azure 리소스 그룹에 Azure Cosmos DB 계정을 만듭니다. 그런 다음, 계정 내에서 데이터베이스 및 컨테이너를 만듭니다.
Azure Cosmos DB 계정에는 고유한 DNS(Domain Name System) 이름이 포함되어 있습니다. 다음을 비롯한 여러 도구를 사용하여 DNS 이름을 관리할 수 있습니다.
- Azure Portal
- Azure Resource Manager 템플릿
- Bicep 템플릿
- Azure PowerShell
- Azure CLI
- Azure 관리 SDK
- Azure REST API
여러 Azure 지역에 걸쳐 데이터 및 처리량을 복제하기 위해 언제든지 계정에 Azure 지역을 추가 및 제거할 수 있습니다. 단일 지역 또는 여러 쓰기 지역을 갖도록 계정을 구성할 수 있습니다. 자세한 내용은 Azure Portal을 사용하여 Azure Cosmos DB 계정 관리를 참조하세요. 계정에서 기본 일관성 수준도 구성할 수 있습니다.
Azure Cosmos DB 계정의 요소
Azure 구독을 사용하면 현재 Azure Cosmos DB 계정을 최대 50개까지 만들 수 있습니다. 지원 요청을 하여 이 제한을 늘릴 수 있습니다.
단일 Azure Cosmos DB 계정을 사용하여 거의 무제한의 데이터 및 프로비전된 처리량을 관리할 수 있습니다. 데이터 및 프로비저닝된 처리량을 관리하려면 계정 내에 하나 이상의 데이터베이스를 만든 다음 데이터를 저장할 하나 이상의 컨테이너를 만듭니다.
다음 이미지에서는 Azure Cosmos DB 계정의 요소 계층 구조를 보여 줍니다.
다음 이미지는 Azure Cosmos DB 계정에서 엔터티의 계층 구조를 보여줍니다.
Azure Cosmos DB 데이터베이스
Azure Cosmos DB에서 데이터베이스는 네임스페이스와 유사합니다. 데이터베이스는 단순히 컨테이너 그룹입니다. 다음 테이블에서는 데이터베이스가 다양한 API 관련 엔터티에 매핑되는 방법을 보여줍니다.
Azure Cosmos DB 엔터티 | NoSQL용 API | Apache Cassandra용 API | MongoDB용 API | Apache Gremlin용 API | Table용 API |
---|---|---|---|---|---|
Azure Cosmos DB 데이터베이스 | 데이터베이스 | Keyspace | 데이터베이스 | 데이터베이스 | 해당 없음 |
참고 항목
API for Table 계정을 사용하면 Azure Table Storage와의 호환성을 유지하기 위해 Azure Cosmos DB의 테이블이 계정 수준에서 만들어집니다.
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는 변경 피드라는 변경 데이터 캡처를 위한 기본 제공 기능을 제공합니다. 이를 사용하여 컨테이너 내의 데이터에 대한 모든 변경 내용을 구독할 수 있습니다.
저장 프로시저, 트리거, UDF(사용자 정의 함수), 그리고 컨테이너에 대한 병합 프로시저를 등록할 수 있습니다.
컨테이너 내의 각 문서에는 해당 컨테이너에 대한 논리 키의 속성 값 내에서 고유한 id
속성이 있어야 합니다. 이 속성 조합을 사용하여 명시적으로 정의하지 않고도 컨테이너 내에서 고유한 제약 조건을 제공할 수 있습니다.
하나 이상의 속성을 사용하는 Azure Cosmos DB 컨테이너에 고유한 키 제약 조건을 지정할 수도 있습니다. 고유한 키 제약 조건은 논리 파티션 키당 하나 이상의 값의 고유성을 보장합니다. 고유 키 정책을 사용하여 컨테이너를 생성하는 경우 고유 키 제약 조건이 지정하는 값과 중복되는 값을 가진 새 항목이나 업데이트된 항목을 만들 수 없습니다.
컨테이너는 다음 테이블에 나와 있는 것처럼 API 관련 엔터티로 특수화됩니다.
Azure Cosmos DB 엔터티 | NoSQL용 API | API for Cassandra | MongoDB용 API | API for Gremlin | Table용 API |
---|---|---|---|---|---|
Azure Cosmos DB 컨테이너 | 컨테이너 | 테이블 | 컬렉션 | 그래프 | 테이블 |
참고 항목
이름이 같지만 대/소문자 구분이 다른 두 개의 컨테이너를 만들지 않도록 합니다. Azure 플랫폼의 일부는 대/소문자를 구분하지 않으며, 이러한 종류의 명명으로 인해 컨테이너에서 진단 데이터 및 작업이 혼동되거나 충돌할 수 있습니다.
Azure Cosmos DB 컨테이너의 속성
Azure Cosmos DB 컨테이너에는 시스템 정의 속성 세트가 있습니다. 사용하는 API에 따라 일부 속성은 직접 노출되지 않을 수도 있습니다. 다음 테이블에서는 시스템 정의 속성에 대해 설명합니다.
시스템 정의 속성 | 시스템 생성 또는 사용자 구성 가능 | 목적 | NoSQL용 API | API for Cassandra | MongoDB용 API | API for Gremlin | API for Table |
---|---|---|---|---|---|---|---|
_rid |
시스템 생성 | 컨테이너의 고유 식별자. | 예 | 아니요 | 아니요 | 아니요 | 아니요 |
_etag |
시스템 생성 | 낙관적 동시성 제어에 사용되는 엔터티 태그. | 예 | 아니요 | 아니요 | 아니요 | 아니요 |
_ts |
시스템 생성 | 컨테이너의 마지막 업데이트 타임스탬프. | 예 | 아니요 | 아니요 | 아니요 | 아니요 |
_self |
시스템 생성 | 컨테이너의 주소 지정 가능 URI. | 예 | 아니요 | 아니요 | 아니요 | 아니요 |
id |
사용자 구성 가능 | 컨테이너의 이름입니다. | 예 | 예 | 예 | 예 | 예 |
indexingPolicy |
사용자 구성 가능 | 컨테이너에 대한 인덱스를 작성하기 위한 정책입니다. | 예 | 아니요 | 예 | 예 | 예 |
TimeToLive |
사용자 구성 가능 | 설정된 기간 후에 컨테이너에서 항목을 자동으로 삭제합니다. 세부 정보는 TTL(Time to Live)를 참조하세요. | 예 | 아니요 | 아니요 | 아니요 | 예 |
changeFeedPolicy |
사용자 구성 가능 | 컨테이너의 항목에 대한 변경 내용을 읽기 위한 정책입니다. 세부 정보는 변경 피드를 참조하세요. | 예 | 아니요 | 아니요 | 아니요 | 예 |
uniqueKeyPolicy |
사용자 구성 가능 | 논리 파티션에 있는 하나 이상의 값의 고유성을 보장하기 위한 정책입니다. 자세한 정보는 고유 키 제약 조건을 참조하세요. | 예 | 아니요 | 아니요 | 아니요 | 예 |
AnalyticalTimeToLive |
사용자 구성 가능 | 분석 저장소의 컨텍스트에서 설정된 기간 후에 컨테이너에서 항목을 자동으로 삭제합니다. 자세한 내용은 분석 저장소를 참조하세요. | 예 | 아니요 | 예 | 아니요 | 아니요 |
Azure Cosmos DB 항목
사용하는 API에 따라 개별 데이터 엔터티는 다양한 방식으로 표시될 수 있습니다.
Azure Cosmos DB 엔터티 | NoSQL용 API | API for Cassandra | MongoDB용 API | API for Gremlin | Table용 API |
---|---|---|---|---|---|
Azure Cosmos DB 항목 | Item | Row | 문서 | 노드 또는 에지 | Item |
항목의 속성
모든 Azure Cosmos DB 항목에는 다음과 같은 시스템 정의 속성이 있습니다. 사용하는 API에 따라 일부는 직접 노출되지 않을 수 있습니다.
시스템 정의 속성 | 시스템 생성 또는 사용자 정의 | 목적 | NoSQL용 API | API for Cassandra | DB API for MongoDB | API for Gremlin | API for Table |
---|---|---|---|---|---|---|---|
_rid |
시스템 생성 | 항목의 고유 식별자 | 예 | 아니요 | 아니요 | 아니요 | 아니요 |
_etag |
시스템 생성 | 낙관적 동시성 제어에 사용되는 엔터티 태그 | 예 | 아니요 | 아니요 | 아니요 | 아니요 |
_ts |
시스템 생성 | 항목의 마지막 업데이트에 대한 타임스탬프 | 예 | 아니요 | 아니요 | 아니요 | 아니요 |
_self |
시스템 생성 | 항목의 주소 지정 가능 URI | 예 | 아니요 | 아니요 | 아니요 | 아니요 |
id |
여기서는 | 논리적 파티션의 사용자 정의 고유 이름 | 예 | 예 | 예 | 예 | 예 |
임의의 사용자 정의 속성 | 사용자 정의 | API 기본 표시의 사용자 정의 속성(JSON, BSON 및 CQL 포함) | 예 | 예 | 예 | 예 | 예 |
참고 항목
id
속성의 고유성은 각 논리 파티션 내에서 적용됩니다. 여러 문서에는 파티션 키 값이 서로 다른 동일한 id
속성 값이 있을 수 있습니다.
항목에 대한 작업
Azure Cosmos DB 항목은 다음 작업을 지원합니다. Azure Cosmos DB API를 사용하여 작업을 수행할 수 있습니다.
연산 | NoSQL용 API | API for Cassandra | MongoDB용 API | API for Gremlin | Table용 API |
---|---|---|---|---|---|
삽입, 바꾸기, 삭제, upsert, 읽기 | 예 | 예 | 예 | 예 | 예 |