편집

다음을 통해 공유


Azure Cosmos DB의 계층적 파티션 키에 대한 질문과 대답

적용 대상: NoSQL MongoDB Cassandra Gremlin 테이블

계층적 파티션 키 또는 하위 분할을 사용하면 파티션 키에 대해 최대 3개의 수준 계층 구조를 구성하여 데이터 배포를 더욱 최적화하고 더 높은 규모를 사용할 수 있습니다. 이 문서에서는 Azure Cosmos DB 계층적 파티션 키에 대한 일반적인 질문과 대답을 제공합니다.

기존 컨테이너에 계층적 파티션 키를 추가할 수 있나요?

기존 컨테이너에 계층적 파티션 키를 추가하는 것은 지원되지 않습니다. 그러나 원하는 계층적 파티션 키로 새 컨테이너를 만들고 컨테이너 복사 작업을 실행하여 기존 컨테이너에서 새 컨테이너로 데이터를 복사할 수 있습니다. 데이터 복사 방법에 대한 자세한 내용은 컨테이너 복사 작업을 참조하세요.

논리 파티션 키의 크기에 대한 스토리지 제한이 있나요?

예. 현재 Azure Cosmos DB와 마찬가지로 논리 파티션 크기는 여전히 20GB로 제한됩니다. 그러나 계층적 파티션 키를 사용하면 논리 파티션이 이제 전체 파티션 키 경로가 됩니다. 예를 들어 TenantId -> UserId로 파티션을 나눈 경우 예시적인 논리 파티션은 Contoso_Alice입니다. 하위 파티셔닝을 활용하면 파티션 키 값이 Contoso_Alice인 20GB의 데이터를 가질 수 있습니다. “Contoso”의 데이터에 허용되는 스토리지 양은 사실상 20GB * 테넌트 “Contoso”에 대한 고유한 UserId 수입니다.

실제 파티션에 대한 스토리지 및 RU/s 제한에 변경 사항이 있나요?

아니요. 현재 Azure Cosmos DB와 마찬가지로 실제 파티션은 50GB의 스토리지를 보유하고 최대 10,000RU/s를 제공할 수 있습니다. 그러나 계층적 파티션 키를 사용하면 특정 파티션 키 접두사(예: TenantId)에 대한 데이터가 여러 실제 파티션에 있는 경우, 하위 분할을 하면 단일 TenantId에 대해 달성 가능한 총 RU/s가 10,000RU/s를 초과할 수 있음을 의미합니다.

경로의 “중간”에서 파티션 키만 쿼리하고 지정하면 어떻게 되나요?

귀하의 쿼리는 파티션 간 쿼리입니다. 예를 들어 TenantId -> UserId로 파티션을 나누고 쿼리에 UserId만 제공하는 경우 이 쿼리는 모든 실제 파티션으로 팬아웃됩니다.

TenantId -> UserId 예제를 사용하여 효율적으로 라우트된 쿼리를 사용하려면 다음 두 가지 옵션이 있습니다.

  • TenantId를 제공합니다. 쿼리는 TenantId 데이터를 포함하는 모든 실제 파티션으로 이동합니다.
  • TenantId와 UserId를 모두 제공합니다. 쿼리는 TenantId 및 특정 UserId를 포함하는 단일 실제 파티션으로 이동합니다.

이 기능을 사용하려면 문서에 새 속성을 만들어야 하나요?

아니요. 컨테이너를 만드는 동안 사용할 파티션 키 경로의 계층 구조를 지정합니다. 예를 들어 TenantId -> UserId로 분할하는 경우 이러한 값이 연결된 새 속성을 만들 필요가 없습니다. 각 문서에 TenantId 속성과 UserId 속성이 있는지 확인합니다. 자세한 내용은 하위 분할 코드 예제를 참조하세요.

카디널리티가 많지 않은 키 계층 구조를 만들었습니다. 어떻게 해야 합니까?

워크로드가 모든 파티션 중 몇 개의 실제 파티션에만 영향을 주는 시나리오가 있을 수 있습니다. 이 시나리오는 계층적 파티션 키의 수준 하나 이상에 낮은 카디널리티가 있음을 의미할 수 있습니다. 시나리오 문제를 해결하려면 항상 계층적 파티션 키를 다시 만드는 것이 좋으며, DTS를 사용하여 키를 변경하고 컨테이너의 데이터를 새 컨테이너에 복사할 수 있습니다. 이 단계가 불가능할 경우, 데이터의 균일한 배포를 보장하는 두 가지 해결 방법이 있습니다.

  • 방법 1:
  1. 10,000RU 미만의 컨테이너를 만들어 실제 파티션이 하나만 있도록 할 수 있습니다.
  2. 파티션 분할이 없도록 약 5GB의 데이터를 수집합니다.
  3. 원하는 RU로 스케일 업하고, 데이터를 계속 수집하면 Azure Cosmos DB가 실제 파티션이 균일하게 분할되도록 합니다.
  • 방법 2:
  1. 총 제안을 더 많은 수의 RU로 늘리고 모든 데이터를 수집할 수 있습니다.
  2. 그런 다음, 파티션 병합을 수행하여 워크로드의 파티션이 조각화되지 않고 균등하게 분배되도록 합니다.
  3. 병합이 완료되면 원래 원하는 RU 수로 다시 스케일 다운합니다.

각 파티션의 처리량을 더 효과적으로 제어하려면 처리량 재분배를 사용하여 워크로드에서 사용하는 파티션에 향후 요청을 위해 충분한 RU가 있는지 확인할 수도 있습니다.

다음 단계