수백 또는 수천과 같이 고유한 값이 많은 파티션 키를 사용하는 것이 가장 좋습니다. 목표는 이러한 파티션 키 값과 연결된 항목에 데이터와 워크로드를 균등하게 분산하는 것입니다. 이러한 속성이 데이터에 없는 경우 가상 파티션 키를 생성할 수 있습니다.
이 문서에서는 Azure Cosmos DB 컨테이너에 대한 가상 파티션 키를 생성하기 위한 몇 가지 기본 기술을 설명합니다.
항목의 여러 속성 연결
여러 속성 값을 단일 인공 partitionKey 속성으로 연결하여 파티션 키를 형성할 수 있습니다. 이러한 키를 가상 키라고 합니다. 예를 들어 다음 예제 문서를 고려해 보세요.
{
"deviceId": "abc-123",
"date": 2018
}
이전 문서의 경우 한 가지 옵션은 /deviceId을 파티션 키 필드로 설정하는 것이고, 다른 하나는 /date을 파티션 키 필드로 설정하는 것입니다. 디바이스 ID 또는 날짜에 따라 컨테이너를 분할하려는 경우 이 옵션을 사용합니다. 또 다른 옵션은 파티션 키로 사용되는 가상 partitionKey 속성에 이러한 두 값을 연결합니다.
{
"deviceId": "abc-123",
"date": 2018,
"partitionKey": "abc-123-2018"
}
실제 시나리오에서는 데이터베이스에 수천 개의 항목을 가질 수 있습니다. 가상 키를 수동으로 추가하는 대신 값을 연결하고 Azure Cosmos DB 컨테이너의 항목에 가상 키를 삽입하는 클라이언트 쪽 논리를 정의합니다.
임의의 접미사가 있는 파티션 키 사용
워크로드를 더 균등하게 분산하는 또 다른 전략은 파티션 키 값의 끝에 난수를 추가하는 것입니다. 이러한 방식으로 항목을 배포하는 경우 파티션 간에 병렬 쓰기 작업을 수행할 수 있습니다.
예를 들어 파티션 키가 날짜를 나타내는 경우입니다. 1에서 400 사이의 난수를 선택한 다음 날짜에 접미사로 연결할 수 있습니다. 이 메서드는 2018-08-09.1, 2018-08-09.2 등의 값을 생성하는 방법으로, 2018-08-09.400까지 파티션 키 값을 만듭니다. 파티션 키를 임의로 지정하기 때문에 매일 컨테이너에 대한 쓰기 작업은 여러 파티션에 균등하게 분산됩니다. 이 메서드를 사용하면 병렬 처리량이 향상되고 처리량이 전반적으로 높아질 수 있습니다.
미리 계산된 접미사가 있는 파티션 키 사용
임의 접미사 전략은 쓰기 처리량을 크게 향상시킬 수 있지만 특정 항목을 읽기는 어렵습니다. 항목을 작성할 때 사용된 접미사 값을 알 수 없습니다. 개별 항목을 더 쉽게 읽을 수 있도록 미리 계산된 접미사 전략을 사용합니다. 난수를 사용하여 파티션 간에 항목을 분산하는 대신 쿼리하려는 항목을 기반으로 계산되는 숫자를 사용합니다.
컨테이너가 날짜를 파티션 키로 사용하는 이전 예제를 고려합니다. 이제 각 항목에 Vehicle-Identification-Number 액세스하려는 (VIN) 특성이 있다고 가정합니다. 또한 날짜 외에 VIN쿼리를 실행하여 항목을 찾는 경우가 많다고 가정합니다. 애플리케이션이 컨테이너에 항목을 쓰기 전에 VIN을 기반으로 해시 접미사를 계산하고 파티션 키 날짜에 추가할 수 있습니다. 계산은 균등하게 분산되는 1에서 400 사이의 숫자를 생성할 수 있습니다. 이 결과는 임의 접미사 전략 메서드에서 생성된 결과와 유사합니다. 그런 다음 파티션 키 값은 계산된 결과와 연결된 날짜입니다.
이 전략을 사용하면 쓰기가 파티션 키 값과 파티션 전체에 균등하게 분산됩니다. 특정 항목의 파티션 키 값을 계산할 수 있으므로 특정 Vehicle-Identification-Number항목과 날짜를 쉽게 읽을 수 있습니다. 이 방법의 이점은 단일 핫 파티션 키, 즉 모든 워크로드를 사용하는 파티션 키를 만들지 않도록 할 수 있다는 것입니다.
다음 단계
다음 문서에서 분할 개념에 대해 자세히 알아볼 수 있습니다.
- Azure Cosmos DB의 분할 및 수평적 크기 조정
- Azure Cosmos DB의 프로비전된 처리량 소개
- Azure Cosmos DB의 데이터베이스에 표준(수동) 처리량 프로비전
Azure Cosmos DB로 마이그레이션하기 위한 용량 계획을 수행하려고 하시나요? 용량 계획을 위해 기존 데이터베이스 클러스터에 대한 정보를 사용할 수 있습니다.
- 기존 데이터베이스 클러스터의 vcore 및 서버 수만 알고 있는 경우 vCore 또는 vCPU를 사용하여 요청 단위를 예측하는 방법에 대해 알아봅니다.
- 현재 데이터베이스 워크로드에 대한 일반적인 요청 비율을 알고 있는 경우 Azure Cosmos DB Capacity Planner를 사용하여 요청 단위 예측에 대해 읽어보세요.