AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

db.コレクション.analyzeShardKey()(mongoshメソッド)

db.collection.analyzeShardKey(key, opts)

シャーディングされていないコレクションまたはシャーディングされたコレクションの シャードキー を評価するためのメトリクスを計算します。 メトリクスは、サンプリングされたクエリに基づいています。 configureQueryAnalyzerを使用して、コレクションでクエリ サンプリングを構成できます。

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

重要

このコマンドは、M0 および Flex クラスターではサポートされていません。詳細については、「 サポートされていないコマンド 」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

db.collection.analyzeShardKey() の構文は次のとおりです。

db.collection.analyzeShardKey( <shardKey>, { keyCharacteristics: <bool>, readWriteDistribution: <bool>, sampleRate: <double>, sampleSize: <int> } )
フィールド
タイプ
必要性
説明

key

ドキュメント

必須

分析するシャードキー。 これは、シャーディングされていないコレクションまたはシャーディングされたコレクションの候補シャードキー、またはシャーディングされたコレクションの現在のシャードキーです。

デフォルト値はありません。

opts.keyCharacteristics

ブール値

任意

シャードキーの特性に関するメトリクスを計算するかどうか。 詳細については、「 キーの特性 」を参照してください。

デフォルトは true です。

opts.readWriteDistribution

ブール値

任意

読み取りと書込みの分布に関するメトリクスを計算するかどうか。 詳しくは、「 readWriteDistribution 」を参照してください。

デフォルトは true です。

opts.sampleRate

double

任意

シャードキーの特性に関するメトリクスを計算するときにサンプリングするコレクション内のドキュメントの割合。 sampleRateを設定した場合、 sampleSizeは設定できません。

01より大きく、 以下である必要があります。

デフォルト値はありません。

opts.sampleSize

integer

任意

シャードキーの特性に関するメトリクスを計算するときにサンプリングするドキュメントの数。 sampleSizeを設定した場合、 sampleRateは設定できません。

指定されておらず、かつsampleRateが指定されていない場合、サンプル サイズはデフォルトでanalyzeShardKeyCharacteristicsDefaultSampleSizeで設定されたサンプル サイズになります。

動作については、 analyzeShardKey の動作 を参照してください。

詳細については、「 analyzeShardKey アクセス制御 」を参照してください。

出力の例については、「 analyzeShardKey 出力 」を参照してください。

ソーシャル メディア アプリの簡素化されたバージョンを検討してください。 シャーディングしようとしているコレクションはpostコレクションです。

postコレクション内のドキュメントには次のスキーマがあります。

{ 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 件あり、一部は他のユーザーよりも一般的です。

  • 3 人のプライベートユーザーがいます。

  • 各ユーザーは他の 5 人のユーザーに依存し、少なくとも 1 人のアイドルユーザーに従う可能性が非常に高くなります。

  • 各ユーザーは 1 日に約 2 回の投稿をランダムに書き込みます。 彼らは各投稿が送信された直後に、1 回編集します。

  • 各ユーザーは 6 時間ごとにログを記録して、自分のプロファイルと過去 24 時間から追跡するユーザーによる投稿を読み取ります。 過去 3 時間のランダムな投稿 でも応答します。

  • アプリはすべてのユーザーに対して、3 日以上経過した投稿を午前 0 時に削除します。

このワークロードには次のクエリ パターンがあります。

  • 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 }}