데이터베이스 파티셔닝

데이터 저장 방법 페이지에 설명된 대로 파티션된 데이터베이스를 사용하면 애플리케이션에서 문서 파티션 키를 사용하여 문서를 동일한 샤드에 문서를 공동 배치할 수 있습니다. 이 페이지에서는 데이터 모델이 데이터 모델이 파티션 데이터베이스와 함께 사용하기에 적합한지 확인하는 데 도움이 됩니다.

IBM® Cloudant® for IBM Cloud®는 두 가지 유형의 데이터베이스를 지원합니다.

  • 비파티션: 기본 유형입니다. 문서는 데이터베이스에 의해 자동으로 샤드에 할당되어 워크로드의 균형을 맞춥니다.
  • 파티션: 문서 ID에는 샤드에 데이터가 할당되는 방식에 영향을 주는 애플리케이션 지정 파티션 키가 포함되어 있습니다.

IBM Cloudant 데이터 모델상 문서를 여러 개(500개 이상)의 파티션으로 논리적으로 분할할 수 있는 경우에만 파티션화된 데이터베이스를 사용할 것을 권장합니다. 애플리케이션에서 파티션된 데이터베이스를 사용할 수 있는지 여부를 이해하는 데 도움이 필요하면 파티션된 데이터베이스 적합성 확인을 참조하세요.

애플리케이션 관점에서 볼 때, 파티션되지 않은 데이터베이스와 파티션된 데이터베이스의 주요 차이점은 데이터를 쿼리하는 방식입니다:

  • 파티션이 없는 데이터베이스에서는 글로벌 보조 인덱스만 생성 및 쿼리할 수 있습니다.
  • 분할된 데이터베이스를 사용하면 전역 및 분할된 보조 인덱스를 모두 생성하고 쿼리할 수 있습니다.

이 문서에는 각 인덱스 유형의 사용 사례에 대한 자세한 내용이 포함되어 있습니다.

분할된 데이터베이스에 대한 제한 사항

분할된 데이터베이스에는 인덱스 수와 동일한 파티션 키를 가진 모든 문서의 총 크기가 동일한 파티션 키를 가진 모든 문서에 제한이 있습니다.

파티션 범위 쿼리는 전역 쿼리보다 서비스 적용 시간 제한이 더 짧고 쿼리보다 서비스 강제 시간 제한이 짧고, 한 요청에서 검색할 수 있는 총 문서 수에 대한 제한이 HTTP 제한이 더 적습니다.

이러한 제한에 대한 자세한 내용은 IBM Cloudant 제한을 참조하세요.

분할 데이터베이스를 사용해야 하는 이유

파티션 데이터베이스는 애플리케이션이 관련 문서를 그룹화하여 이점을 얻고 예측 가능하고 확장 가능한 쿼리 성능이 필요한 경우에 이상적입니다.

파티션화된 데이터베이스는 파티션 범위 내 쿼리와 전역 쿼리 모두를 지원합니다. 파티션 범위 쿼리는 주어진 파티션 키를 가진 문서의 공동 위치를 활용해 문서의 공동 위치를 활용하여 보다 효율적이고 확장 가능한 쿼리 성능을 제공합니다. 파티션 키로 표현할 수 있는 워크로드의 경우, 이렇게 하면 쿼리 지연 시간을 크게 줄이고 비용을 절감할 수 있습니다.

파티셔닝은 애플리케이션에 예측 가능한 예측 가능한 성능이 필요할 때 특히 유용합니다. 인덱스를 효과적으로 사용하는 파티션 범위 쿼리 인덱스를 효과적으로 활용하는 쿼리는 데이터 세트가 증가하더라도 빠른 속도를 유지하며, 최대 64개의 샤드에 걸쳐 최대 64개의 샤드에 걸쳐 효율적으로 확장할 수 있습니다. 따라서 파티션 데이터베이스는 다음과 같은 경우에 적합합니다 처리량이 많고 지연 시간이 짧은 워크로드에 적합합니다.

일반적으로 데이터 집합에 많은 데이터베이스 샤드가 필요한 경우, 애플리케이션은 지연 시간에 민감한 작업을 위해 지연 시간에 민감한 작업에는 파티션 범위 쿼리를 사용하고, 전역 쿼리 는 배치 처리와 같이 시간이 덜 중요한 작업을 위해 예약되어 있습니다.

분할 데이터베이스가 적합하지 않은 이유

분할된 데이터베이스는 신중한 데이터 모델링이 필요하며 중복된 인덱스가 필요할 수 있습니다. 많은 사용 사례에서 이러한 추가 노력은 별다른 성과를 거두지 못합니다.

분할 데이터베이스는 적절하게 사용하면 성능 이점을 제공하지만, 모든 워크로드에 맞지 않을 수 있는 제약이 발생할 수 있습니다. 다음을 수행해야 합니다 애플리케이션에 의미 있는 파티션 키를 정의하여 관련 문서를 그룹화하고 문서를 그룹화하고 효율적인 쿼리를 지원하는 애플리케이션에 의미 있는 파티션 키를 정의해야 합니다. 각 문서에 고유 키가 있거나 파티션 키가 너무 적은 경우, 파티션된 데이터베이스는 파티션되지 않은 데이터베이스보다 성능이 성능이 저하될 가능성이 높습니다.

파티션 범위 쿼리를 사용하려면 파티션 인덱스를 만들어야 합니다. 이 경우 애플리케이션의 액세스 패턴에 따라 전역 인덱스와 파티션 인덱스를 모두 유지해야 할 수 있습니다 패턴에 따라 글로벌 인덱스와 분할 인덱스를 모두 유지해야 할 수도 있습니다.

파티션된 데이터베이스 적합성 결정

이제 파티션 데이터베이스의 장단점을 이해하셨습니다, 다음 단계는 데이터 모델이 분할된 데이터베이스에서 잘 작동하는지 여부를 이해하는 것입니다 파티션된 데이터베이스에서 잘 작동하는지 이해하는 것입니다.

다음 기준에 따라 데이터 모델 및 애플리케이션 요구 사항을 평가합니다 파티션 데이터베이스 적합성을 결정합니다:

  1. 파티션 키의 카디널리티가 높아야 합니다. 고유한 파티션 키의 수는 샤드 수보다 훨씬 많아야 합니다.
  2. 쿼리 부하가 균등하게 분산되어야 합니다. 대부분의 쿼리가 단일 파티션 키를 대상으로 하면 핫스팟이 발생하여 성능이 저하될 수 있습니다.
  3. 파티션 키는 관련 문서를 그룹화해야 합니다. 각 키가 하나의 문서에만 매핑되는 경우, 파티션은 별다른 이점이 없습니다.

좋은 파티션과 나쁜 파티션의 주요 예

이를 뒷받침하기 위해 몇 가지 사용 사례와 파티션 키의 좋은 선택과 나쁜 선택을 살펴보겠습니다 파티션 키의 사용 사례와 좋은 선택을 살펴보겠습니다.

파티션 키의 좋은 선택과 나쁜 선택
유스 케이스 파티션 키 좋음 또는 나쁨 이유
전자 상거래 시스템 - 주문 customer_id 양호 높은 카디널리티와 쿼리는 많은 고객에 걸쳐 분산되어 있습니다.
전자 상거래 시스템 - 주문 order_id 불량 파티션당 하나의 문서로, 그룹화하거나 재사용할 수 없습니다.
전자 상거래 시스템 - 주문 status 불량 상태 값(잠정, 결제, 환불, 취소)의 카디널리티가 낮으면 파티션이 너무 적게 생성됩니다.
전자 상거래 시스템 - 주문 country_code 불량 낮은 카디널리티; 몇몇 국가가 트래픽을 지배합니다.
IOT - 센서 표시값 device_id 양호 많은 디바이스가 데이터를 생성하여 부하를 고르게 분산시킵니다.
IOT - 센서 표시값 reading_id 불량 문서당 고유하며 파티션에는 하나의 항목만 포함됩니다.
IOT - 센서 표시값 date 불량 대부분의 쿼리는 최근 날짜를 대상으로 하여 핫스팟을 유발합니다.
IOT - 센서 표시값 region 불량 일부 지역이 트래픽을 독점하여 불균형을 초래할 수 있습니다.

파티션 키로 사용할 만한 적절한 선택지가 전혀 없는 사용 사례도 존재합니다. 이러한 상황에서는 파티션이 적용되지 않은 데이터베이스를 선택하는 것이 가장 좋습니다. 예를 들면 이메일 주소, 비밀번호 해시 및 마지막 로그인 날짜를 저장하는 사용자 데이터베이스가 있습니다. 이 필드들 중 어느 것도 적절한 파티션 키로 사용할 수 없으므로, 대신 파티션이 적용되지 않은 데이터베이스를 사용해야 합니다.

분할된 데이터베이스 및 인덱스 만들기

데이터베이스 생성 시점에 파티셔닝을 적용할지 여부를 결정해야 합니다. 데이터베이스를 작성할 때 partitioned 조회 문자열 매개변수를 사용하여 데이터베이스가 파티션되는지를 설정하십시오. partitioned 의 기본값은 false 입니다.

마찬가지로 인덱스는 전역 또는 파티션으로 설정할 수 있습니다 디자인 문서에서 partitioned 필드를 사용하여 인덱스를 생성할 때 설정합니다. 모든 디자인 문서의 인덱스는 디자인 문서의 partitioned 필드를 상속합니다 문서를 상속합니다. 분할 인덱스를 쿼리할 때는 파티션 범위 쿼리를 사용합니다 를 사용하여 쿼리할 파티션 키를 요청에 포함시킵니다.

인덱스 또는 데이터베이스의 파티셔닝 유형은 생성한 후에는 변경할 수 없습니다.

파티션 범위 쿼리는 파티션된 인덱스에 대해서만 수행할 수 있습니다. 마찬가지로 글로벌 쿼리는 글로벌 인덱스에 대해서만 수행할 수 있습니다.

쿼리

IBM Cloudant 는 전역 및 파티션 범위 쿼리를 모두 지원합니다. 두 유형을 모두 효과적으로 사용하려면 각 쿼리 범위마다 별도의 인덱스를 만들어야 합니다 각 쿼리 범위에 대해 별도의 인덱스를 생성해야 합니다.

전역 쿼리는 샤드 수가 적은 데이터베이스(16개 이하)에서 잘 수행됩니다, 하지만 샤드 수가 증가함에 따라 지연 시간에 민감한 작업에는 적합하지 않게 됩니다 샤드 수가 증가함에 따라 지연에 민감한 작업에는 적합하지 않습니다. 반면, 파티션 범위 쿼리는 샤드 수가 많을수록 효율적으로 확장되며 더 많은 샤드 수로 효율적으로 확장되며, 대규모 데이터 세트에 대해 예측 가능하고 대규모 데이터 세트에 대해 예측 가능하고 지연 시간이 짧은 성능을 필요로 하는 애플리케이션에 선호되는 옵션입니다.

파티션 범위 쿼리의 이점을 누리려면 대부분의 애플리케이션 쿼리는 는 특정 파티션 키를 대상으로 해야 합니다. 이를 통해 데이터베이스는 문서 코로케이션의 이점을 문서 코로케이션을 활용하고 대규모로 일관된 성능을 제공할 수 있습니다.

전역 및 파티션 범위 쿼리가 데이터베이스 작업의 성능에 미치는 영향에 대한 자세한 내용은 샤딩이 데이터베이스 성능에 미치는 영향을 참조하세요.

글로벌 조회

다음을 사용하여 전역 쿼리를 만들 수 있습니다:

글로벌 인덱스 생성이 기본값이지만 디자인 문서에서 "options.partitioned": false 을 사용하여 명시적으로 글로벌 인덱스를 생성할 수 있습니다:

{
  "options": {
    "partitioned": false
  },
  "views": {
    "by-device": {
      "map": "function(doc) { emit(doc.deviceID, doc.infrastructureID) }"
    }
  }
}

파티션 범위 쿼리

다음을 사용하여 파티션 범위 쿼리를 만들 수 있습니다:

파티션 범위 쿼리를 지원하는 파티션 인덱스를 만들려면 디자인 문서에 "options.partitioned": true 을 지정하세요:

{
  "options": {
    "partitioned": true
  },
  "views": {
    "by-device": {
      "map": "function(doc) { emit(doc.deviceID, doc.infrastructureID) }"
    }
  }
}

파티션된 데이터베이스 튜토리얼

분할된 데이터베이스는 초록에서 이해하기 어려울 수 있습니다. 다음 두 가지 예에서 개념이 실제로 작동하는 모습을 확인할 수 있습니다:

  1. 여러 프로그래밍 언어의 예제를 통해 파티션된 데이터베이스에 대해 자세히 알아보려면 파티션된 데이터베이스를 사용하여 IoT 역사가 만들기( 영문)를 읽어보세요.
  2. 이 블로그 게시물에서 파티션 데이터베이스와 Node.js 에 대해 알아보세요. 여기에는 파티션 데이터베이스 생성 방법, 검색, 뷰, 전역 인덱스에 대한 내용이 포함되어 있습니다.