Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

db.collection.analyzeShardKey()

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 필드
  • 행동
  • 액세스 제어
  • 출력
  • 예시
  • 자세히 알아보기
db.collection.analyzeShardKey(key, opts)

샤딩되지 않은 컬렉션 또는 샤딩된 컬렉션 에 대한 샤드 키 를 평가하기 위한 지표 를 계산합니다. 지표는 샘플링된 쿼리를 기반으로 합니다. configureQueryAnalyzer 를 사용하여 컬렉션 에 대한 쿼리 샘플링을 구성할 수 있습니다.

이 메서드는 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

중요

이 명령은 M0, M2 및 M5 클러스터에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.

db.collection.analyzeShardKey() 에는 다음 구문이 있습니다.

db.collection.analyzeShardKey(
<shardKey>,
{
keyCharacteristics: <bool>,
readWriteDistribution: <bool>,
sampleRate: <double>,
sampleSize: <int>
}
)
필드
유형
필요성
설명

key

문서

필수 사항

분석할 샤드 키입니다. 이는 샤딩되지 않은 컬렉션 또는 샤딩된 컬렉션의 후보 샤드 키 또는 샤딩된 컬렉션의 현재 샤드 키일 수 있습니다.

기본값 은 없습니다.

opts.keyCharacteristics

부울

옵션

샤드 키 의 특성에 대한 지표 의 계산 여부입니다. 자세한 내용은 keyCharacteristics를 참조하세요.

기본값은 true입니다.

opts.readWriteDistribution

부울

옵션

읽기 및 쓰기 (write) 분포에 대한 지표 의 계산 여부입니다. 자세한 내용은 readWriteDistribution을 참조하세요.

기본값은 true입니다.

opts.sampleRate

double

옵션

샤드 키 의 특성에 대한 지표 를 계산할 때 샘플 할 컬렉션 의 문서 비율입니다. sampleRate 을 설정하다 하면 sampleSize 을 설정하다 수 없습니다.

0보다 크고 최대 1(을)를 포함해야 합니다.

기본값 은 없습니다.

opts.sampleSize

integer

옵션

샤드키 특성에 대한 지표를 계산할 때 샘플링할 문서 수입니다. sampleSize를 설정하면 sampleRate를 설정할 수 없습니다.

지정되지 않았으며sampleRate(을)를 지정하지 않으면 샘플 크기는 기본적으로 analyzeShardKeyCharacteristicsDefaultSampleSize(으)로 설정된 샘플 크기로 설정됩니다.

동작에 대해서는 analyzeShardKey 동작을 참조하세요.

자세한 내용은 analyzeShardKey 액세스 제어를 참조하세요.

샘플 출력은 analyzeShardKey 출력을 참조하세요.

간소화된 소셜 미디어 앱 버전을 생각해 보세요. 샤딩하려는 컬렉션은 post 컬렉션입니다.

post collection의 문서는 다음과 같은 스키마가 있습니다.

{
userId: <uuid>,
firstName: <string>,
lastName: <string>,
body: <string>, // the field that can be modified.
date: <date>, // the field that can be modified.
}
  • 이 앱의 사용자 수는 1500명입니다.

  • 성 30개, 이름 45개가 있으며, 일부는 다른 이름보다 더 일반적입니다.

  • 세 명의 유명인 사용자가 있습니다.

  • 각 사용자는 정확히 5명의 다른 사용자를 팔로우하며 적어도 한 명의 유명인을 팔로우할 가능성이 매우 높습니다.

  • 각 사용자는 하루에 약 2개 정도의 게시물을 무작위로 게시합니다. 각 게시물은 게시된 직후 한 번씩 수정됩니다.

  • 각 사용자는 6시간마다 로그인하여 지난 24시간 동안 자신의 프로필과 자신이 팔로우하는 사용자의 게시물을 읽습니다. 또한 지난 3시간 동안 임의의 게시물로 답장을 보냅니다.

  • 앱은 모든 사용자에 대해 3일이 지난 자정에 게시물을 제거합니다.

이 워크로드에는 다음과 같은 쿼리 패턴이 있습니다.

  • find 필터가 있는 명령 { userId: , firstName: , lastName: }

  • find 필터가 있는 명령 { $or: [{ userId: , firstName: , lastName:, date: { $gte: }, ] }

  • findAndModify 필터 { userId: , firstName: , lastName: , date: } 와 함께 명령을 입력하여 본문 및 날짜 필드를 업데이트합니다.

  • update 명령에 multi: false 및 필터 { userId: , firstName: , lastName: , date: { $gte: , $lt: } } 를 사용하여 본문 및 날짜 필드를 업데이트합니다.

  • delete multi: true 및 필터 { userId: , firstName: , lastName: , date: { $lt: } }가 포함된 명령

다음은 db.collection.analyzeShardKey 가 일부 후보 샤드 키에 대해 반환한 지표의 예시이며, 7일 동안의 워크로드에서 수집된 샘플링된 쿼리를 포함합니다.

참고

db.collection.analyzeShardKey 메서드를 실행하기 전에 지원 인덱스 섹션을 읽어보세요. 분석 중인 샤드 키에 대한 지원 인덱스가 필요한 경우 db.collection.createIndex() 메서드를 사용하여 인덱스를 생성합니다.

db.collection.analyzeShardKey 메서드는 social.post 컬렉션 의 { lastName: 1 } 샤드 키 에 대한 지표 를 제공합니다.

use social
db.post.analyzeShardKey(
{ lastName: 1 },
{
keyCharacteristics: true,
readWriteDistribution: false
}
)

이 명령의 출력은 다음과 유사합니다.

{
"keyCharacteristics": {
"numDocsTotal" : 9039,
"avgDocSizeBytes" : 153,
"numDocsSampled" : 9039,
"isUnique" : false,
"numDistinctValues" : 30,
"mostCommonValues" : [
{
"value" : {
"lastName" : "Smith"
},
"frequency" : 1013
},
{
"value" : {
"lastName" : "Johnson"
},
"frequency" : 984
},
{
"value" : {
"lastName" : "Jones"
},
"frequency" : 962
},
{
"value" : {
"lastName" : "Brown"
},
"frequency" : 925
},
{
"value" : {
"lastName" : "Davies"
},
"frequency" : 852
}
],
"monotonicity" : {
"recordIdCorrelationCoefficient" : 0.0771959161,
"type" : "not monotonic"
},
}
}

db.collection.analyzeShardKey 메서드는 social.post 컬렉션 의 { userId: 1 } 샤드 키 에 대한 지표 를 제공합니다.

use social
db.post.analyzeShardKey(
{ userId: 1 },
{
keyCharacteristics: true,
readWriteDistribution: false
}
)

이 메서드의 출력은 다음과 유사합니다.

{
"keyCharacteristics": {
"numDocsTotal" : 9039,
"avgDocSizeBytes" : 162,
"numDocsSampled" : 9039,
"isUnique" : false,
"numDistinctValues" : 1495,
"mostCommonValues" : [
{
"value" : {
"userId" : UUID("aadc3943-9402-4072-aae6-ad551359c596")
},
"frequency" : 15
},
{
"value" : {
"userId" : UUID("681abd2b-7a27-490c-b712-e544346f8d07")
},
"frequency" : 14
},
{
"value" : {
"userId" : UUID("714cb722-aa27-420a-8d63-0d5db962390d")
},
"frequency" : 14
},
{
"value" : {
"userId" : UUID("019a4118-b0d3-41d5-9c0a-764338b7e9d1")
},
"frequency" : 14
},
{
"value" : {
"userId" : UUID("b9c9fbea-3c12-41aa-bc69-eb316047a790")
},
"frequency" : 14
}
],
"monotonicity" : {
"recordIdCorrelationCoefficient" : -0.0032039729,
"type" : "not monotonic"
},
}
}

db.collection.analyzeShardKey 명령은 social.post collection의 { userId: 1 } 샤드 키에 대한 지표를 제공합니다.

use social
db.post.analyzeShardKey(
{ userId: 1 },
{
keyCharacteristics: false,
readWriteDistribution: true
}
)

이 메서드의 출력은 다음과 유사합니다.

{
"readDistribution" : {
"sampleSize" : {
"total" : 61363,
"find" : 61363,
"aggregate" : 0,
"count" : 0,
"distinct" : 0
},
"percentageOfSingleShardReads" : 50.0008148233,
"percentageOfMultiShardReads" : 49.9991851768,
"percentageOfScatterGatherReads" : 0,
"numReadsByRange" : [
688,
775,
737,
776,
652,
671,
1332,
1407,
535,
428,
985,
573,
1496,
...
],
},
"writeDistribution" : {
"sampleSize" : {
"total" : 49638,
"update" : 30680,
"delete" : 7500,
"findAndModify" : 11458
},
"percentageOfSingleShardWrites" : 100,
"percentageOfMultiShardWrites" : 0,
"percentageOfScatterGatherWrites" : 0,
"numWritesByRange" : [
389,
601,
430,
454,
462,
421,
668,
833,
493,
300,
683,
460,
...
],
"percentageOfShardKeyUpdates" : 0,
"percentageOfSingleWritesWithoutShardKey" : 0,
"percentageOfMultiWritesWithoutShardKey" : 0
}
}

돌아가기

db.collection.aggregate()