컬렉션

Azure Cosmos DB 는 문서, 그래프 및 키-값 데이터 모델을 지원하는 전역적으로 분산된 다중 모델 데이터베이스입니다. 이 섹션의 내용은 REST를 통해 SQL API를 사용하여 컬렉션 리소스를 만들고, 쿼리하고, 관리하기 위한 것입니다.

REST API는 데이터베이스 계정의 리소스에 대한 기본 CRUD 작업을 지원합니다. 컬렉션은 JSON 문서와 관련 JavaScript 응용 프로그램 논리(예: 저장 프로시저, 트리거, 사용자 정의 함수 등)가 포함되는 컨테이너입니다. 이 항목에서는 문서 컬렉션을 관리하는 데 사용되는 REST 작업에 대해 간략하게 설명합니다.

참고

이러한 API 참조 문서에서는 Azure Cosmos DB 데이터 평면 API를 사용하여 리소스를 만드는 방법을 보여 줍니다. 데이터 평면 API를 사용하면 Cosmos DB SDK와 마찬가지로 인덱싱 정책, 파티션 키와 같은 기본 옵션을 구성할 수 있습니다. 모든 Azure Cosmos DB 리소스에 대한 완전한 기능 지원이 필요한 경우 Cosmos DB 리소스 공급자를 사용하는 것이 좋습니다.

컬렉션은 Azure Cosmos DB의 컨테이너에 매핑됩니다. 따라서 비용이 초당 요청 단위로 표현된 프로비전된 처리량에 의해 결정되는 청구 가능한 엔터티입니다. 컬렉션은 하나 이상의 파티션/서버에 걸쳐 처리량 측면에서 확장 및 축소할 수 있습니다. 컬렉션은 Azure Cosmos DB에서 하나 이상의 물리적 서버에 자동으로 분할됩니다.

컬렉션은 시스템 리소스이므로 스키마가 고정되어 있습니다. 컬렉션의 URI 경로는 리소스 모델의 colls로 표시됩니다.

다음 예제에서는 컬렉션의 JSON 정의를 보여 줍니다.

{  
  "id": "testcoll",  
  "indexingPolicy": {  
    "indexingMode": "consistent",  
    "automatic": true,  
    "includedPaths": [  
      {  
        "path": "/*",  
        "indexes": [  
          {  
            "kind": "Range",  
            "dataType": "String",  
            "precision": -1  
          },  
          {  
            "kind": "Range",  
            "dataType": "Number",  
            "precision": -1  
          }  
        ]  
      }  
    ],  
    "excludedPaths": []  
  },  
  "partitionKey": {  
    "paths": [  
      "/AccountNumber"  
    ],  
    "kind": "Hash"  
  },  
  "_rid": "PD5DALigDgw=",  
  "_ts": 1459200611,  
  "_self": "dbs/PD5DAA==/colls/PD5DALigDgw=/",  
  "_etag": "\"00005900-0000-0000-0000-56f9a2630000\"",  
  "_docs": "docs/",  
  "_sprocs": "sprocs/",  
  "_triggers": "triggers/",  
  "_udfs": "udfs/",  
  "_conflicts": "conflicts/"  
}  
  
속성 Description
id 새 컬렉션을 식별하는 고유한 이름입니다.
indexingPolicy 컬렉션에 대한 인덱싱 정책 설정입니다.
partitionKey 컬렉션에 대한 분할 구성 설정입니다.
_rid 시스템 생성 속성입니다. 리소스 ID(_rid)는 리소스 모델의 리소스 스택에 따라 계층적인 고유 식별자입니다. 사용 권한 리소스의 배치와 탐색용으로 내부적으로 사용됩니다.
_ts 시스템 생성 속성입니다. 리소스가 마지막으로 업데이트된 시간의 타임스탬프를 지정합니다. 값은 타임스탬프입니다.
_self 시스템 생성 속성입니다. 고유한 주소를 지정할 수 있는 리소스의 URI입니다.
_etag 낙관적 동시성 제어에 필요한 리소스 etag 를 나타내는 시스템 생성 속성입니다.
_문서 문서 리소스의 주소 지정 가능 경로를 지정하는 시스템 생성 속성입니다.
_sprocs 스프록스(저장 프로시저) 리소스의 주소 지정 가능 경로를 지정하는 시스템 생성 속성입니다.
_트리거 트리거 리소스의 주소 지정 가능 경로를 지정하는 시스템 생성 속성입니다.
_Udf udfs(사용자 정의 함수) 리소스의 주소 지정 가능 경로를 지정하는 시스템 생성 속성입니다.
_충돌 충돌 리소스의 주소 지정 가능 경로를 지정하는 시스템 생성 속성입니다. 컬렉션 내의 리소스에 대한 작업 중에 충돌이 발생하면 사용자는 충돌 URI 경로에 대해 GET을 수행하여 충돌하는 리소스를 검사할 수 있습니다.

인덱싱 정책 아래의 속성

속성 설명
자동 번역 자동 인덱싱의 설정 여부를 나타냅니다. 기본값은 True이므로 모든 문서가 인덱싱됩니다. 값을 False 로 설정하면 인덱싱 경로를 수동으로 구성할 수 있습니다.
indexingMode 기본적으로 인덱싱 모드는 일관성입니다. 즉, 문서를 삽입, 교체 또는 삭제하는 동안 인덱싱이 동기적으로 발생합니다. 인덱싱이 비동기식으로 수행되도록 하려면 인덱싱 모드를 lazy로 설정합니다.
includedPaths 인덱싱할 문서 경로를 포함하는 배열입니다. 기본적으로 두 개의 경로가 포함됩니다. 즉, 모든 문서 경로를 인덱싱할 것을 지정하는 /path와 타임스탬프 범위 비교를 위해 인덱싱하는 _ts 경로가 포함됩니다.
excludedPaths 인덱싱에서 제외할 문서 경로를 포함하는 배열입니다.

포함된 경로 아래의 속성

속성 설명
path 인덱싱 동작이 적용되는 경로입니다. 인덱스 경로는 루트(/)로 시작하고 일반적으로 ? 와일드카드 연산자로 끝나 접두사에 대해 가능한 값이 여러 개 있음을 나타냅니다. 예를 들어 SELECT * FROM Families F WHERE F.familyName = "Andersen"을 처리하려면 컬렉션의 인덱스 정책에 /familyName/?의 인덱스 경로를 포함해야 합니다.

또한 인덱스 경로에 * 와일드카드 연산자를 사용하여 접두사 아래에 재귀적으로 경로에 대한 동작을 지정할 수 있습니다. 예를 들어 /payload/*를 사용하여 인덱싱에서 페이로드 속성 아래에 있는 모든 항목을 포함할 수 있습니다.
dataType 인덱싱 동작이 적용되는 데이터 형식입니다. String, Number, Point, Polygon 또는 LineString일 수 있습니다. 부울 및 null은 자동으로 인덱싱됩니다.
kind 인덱스의 유형입니다. 해시 인덱스는 같음 비교에 유용하지만 범위 인덱스는 같음, 범위 비교 및 정렬에 유용합니다. 공간 인덱스는 공간 쿼리에 유용합니다.
전체 자릿수 인덱스의 전체 자릿수입니다. 최대 정밀도의 경우 -1로 설정하거나 Number의 경우 1-8, String의 경우 1-100 사이로 설정할 수 있습니다. Point, PolygonLineString 데이터 형식에는 적용되지 않습니다.

제외된 경로 아래의 속성

속성 설명
path 인덱싱에서 제외되는 경로입니다. 인덱스 경로는 루트(/)로 시작하고 일반적으로 * 와일드카드 연산자로 끝납니다. 예를 들어 /payload/*를 사용하여 페이로드 속성의 모든 항목을 인덱싱에서 제외할 수 있습니다.

파티션 키 아래의 속성

속성 설명
path 컬렉션 내에서 분할할 수 있는 데이터를 사용하는 경로 배열입니다. 경로에는 와일드카드 또는 후행 슬래시가 포함되어서는 안 됩니다. 예를 들어 JSON 속성 "AccountNumber"는 "/AccountNumber"로 지정됩니다. 배열에는 단일 값만 포함되어야 합니다.
kind 분할에 사용되는 알고리즘입니다. 해시만 지원됩니다.

인덱싱 정책

문서가 컬렉션에 추가되면 Cosmos DB는 기본적으로 문서를 자동으로 인덱싱하므로 문서를 쿼리할 수 있습니다. 컬렉션 수준에서 인덱싱 정책을 구성합니다. 이처럼 인덱싱 정책은 컬렉션 수준에서 설정되므로 데이터베이스 내의 각 컬렉션마다 인덱싱 정책이 다를 수 있습니다.

컬렉션에 대한 인덱싱 정책은 다음 옵션을 지정할 수 있습니다.

  • 자동: 컬렉션이 모든 문서를 자동으로 인덱싱할지 여부를 선택할 수 있습니다. 기본적으로 모든 문서는 자동으로 인덱싱되지만 이 기능을 해제하도록 선택할 수 있습니다. 인덱싱을 해제하면 자체 링크를 통해서나 ID를 사용한 쿼리로만 문서에 액세스할 수 있습니다.

  • 인덱싱 모드: 동기(일관성), 비동기(지연) 인덱스 업데이트 및 인덱싱 없음(없음) 중에서 선택할 수 있습니다. 기본적으로는 컬렉션의 문서에 대해 삽입, 바꾸기 또는 삭제 작업을 수행할 때마다 인덱스가 동기식으로 업데이트됩니다. 이 업데이트를 통해 쿼리는 인덱스가 따라잡을 수 있도록 지연 없이 문서 읽기와 동일한 일관성 수준을 적용할 수 있습니다.

  • 인덱스 형식 및 정밀도: 인덱스 항목에 사용되는 형식 또는 체계는 인덱스 스토리지 및 성능에 직접적인 영향을 줍니다. 높은 정밀도를 사용하는 체계일수록 대개 쿼리 실행 속도가 더 빠릅니다. 그러나 인덱스에 대한 저장소 오버헤드도 증가합니다. 낮은 정밀도를 선택하면 쿼리 실행 중에 더 많은 문서를 처리해야 할 수도 있지만 저장소 오버헤드는 감소합니다.

  • 인덱스 경로: 문서 내에서 인덱싱에서 포함하거나 제외해야 하는 경로를 선택할 수 있습니다. 그러면 쿼리 패턴이 미리 알려진 시나리오에 대해 향상된 쓰기 성능과 낮은 인덱스 스토리지를 제공할 수 있습니다.

다음 표에서 몇 가지 샘플 인덱싱 경로 및 쿼리 내에서 이를 사용하는 방법을 보여 줍니다.

속성 설명
/* 컬렉션의 기본 경로입니다. 재귀적이며 전체 문서 트리에 적용됩니다.
/prop/? 인덱스 경로는 다음과 같은 쿼리를 처리하는 데 필요합니다(각각 해시, 범위 유형이 포함되어 있음).

SELECT * FROM collection c WHERE c.prop = "value"

SELECT * FROM collection c WHERE c.prop > 5

SELECT * FROM collection c ORDER BY c.prop
/prop/* 지정된 레이블 아래의 모든 경로의 인덱스 경로입니다. 다음 쿼리와 함께 작동합니다.

SELECT * FROM collection c WHERE c.prop = "value"

SELECT * FROM collection c WHERE c.prop.subprop > 5

SELECT * FROM collection c WHERE c.prop.subprop.nextprop = "value"

SELECT * FROM collection c ORDER BY c.prop
/props/[]/? 같은 스칼라 배열에 대해 반복 및 JOIN 쿼리를 제공하는 데 필요한 인덱스 경로

["a", "b", "c"]:

SELECT tag FROM tag IN collection.props WHERE tag = "value"

SELECT tag FROM collection c JOIN tag IN c.props WHERE tag > 5
/props/[]/subprop/? 와 같은 개체 배열에 대해 반복 및 JOIN 쿼리를 제공하는 데 필요한 인덱스 경로

[{subprop: "a"}, {subprop: "b"}]:

SELECT tag FROM tag IN collection.props WHERE tag.subprop = "value"

SELECT tag FROM collection c JOIN tag IN c.props WHERE tag.subprop = "value"
/prop/subprop/? 인덱스 경로는 다음과 같은 쿼리를 처리하는 데 필요합니다(각각 해시 또는 범위 유형이 포함되어 있음).

SELECT * FROM collection c WHERE c.prop.subprop = "value"

SELECT * FROM collection c WHERE c.prop.subprop > 5

SELECT * FROM collection c ORDER BY c.prop.subprop

Cosmos DB 인덱싱 정책에 대한 자세한 내용은 Cosmos DB 인덱싱 정책을 참조하세요. REST API 설명서의 모든 예제에서는 자동 인덱싱을 사용합니다.

제안 및 성능 수준

컬렉션을 만들면 생성된 컬렉션을 참조하는 Offer 리소스도 만들어집니다. 제품 리소스에는 초당 요청 단위 및 분당 요청 단위의 컬렉션 처리량에 대한 구성 정보가 포함됩니다.

제품 바꾸기를 사용하여 컬렉션의 성능 수준을 변경할 수 있습니다.

작업

문서 컬렉션을 사용하여 다음을 수행할 수 있습니다.