AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

db. 컬렉션.analyzeShardKey() (mongosh 메서드)

db.collection.analyzeShardKey(key, opts)

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

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

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

중요

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

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: } }, ... , { userId: , date: } ] }

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

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

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

다음은 7일간의 워크로드 에서 수집된 샘플링된 쿼리와 함께 일부 샤드 키 후보에 대해 db.collection.analyzeShardKey 지표 반환하는 지표의 예시 입니다.

참고

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

이 예시 db.collection.analyzeShardKey 메서드를 사용하여 social.post 컬렉션 의 { _id: 1 } 샤드 키 에 대한 지표 제공합니다.

다음 코드 차단 를 사용하여 쿼리 샘플링을 db.collection.configureQueryAnalyzer() 설정합니다.

use socialdb.post.configureQueryAnalyzer( { mode: "full", samplesPerSecond: 5 })

db.collection.configureQueryAnalyzer() 쿼리 샘플을 수집한 후 다음 코드 차단 db.collection.analyzeShardKey 메서드를 사용하여 10,000 문서를 샘플 하고 결과를 계산합니다.

use socialdb.post.analyzeShardKey( { _id: 1 }, { keyCharacteristics: true, readWriteDistribution: false, sampleSize: 10000 })

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

use socialdb.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 socialdb.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 컬렉션 의 { userId: 1 } 샤드 키 에 대한 지표 를 제공합니다.

use socialdb.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 }}