db.collection.analyzeShardKey()
定義
db.collection.analyzeShardKey(key, opts)
シャーディングされていないコレクションまたはシャーディングされたコレクションの シャードキー を評価するためのメトリクスを計算します。 メトリクスは、サンプリングされたクエリに基づいています。
configureQueryAnalyzer
を使用して、コレクションのクエリ サンプリングを構成できます。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、 「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
db.collection.analyzeShardKey()
の構文は次のとおりです。
db.collection.analyzeShardKey( <shardKey>, { keyCharacteristics: <bool>, readWriteDistribution: <bool>, sampleRate: <double>, sampleSize: <int> } )
フィールド
フィールド | タイプ | 必要性 | 説明 |
---|---|---|---|
key | ドキュメント | 必須 | 分析するシャードキー。 これは、シャーディングされていないコレクションまたはシャーディングされたコレクションの候補シャードキー、またはシャーディングされたコレクションの現在のシャードキーです。 デフォルト値はありません。 |
opts.keyCharacteristics | ブール値 | 任意 | シャードキーの特性に関するメトリクスを計算するかどうか。 詳細については、「 キーの特性 」を参照してください。 デフォルトは |
opts.readWriteDistribution | ブール値 | 任意 | 読み取りと書込みの分布に関するメトリクスを計算するかどうか。 詳しくは、「 readWriteDistribution 」を参照してください。 デフォルトは |
opts.sampleRate | double | 任意 | シャードキーの特性に関するメトリクスを計算するときにサンプリングするコレクション内のドキュメントの割合。
デフォルト値はありません。 |
opts.sampleSize | integer | 任意 | シャードキーの特性に関するメトリクスを計算するときにサンプリングするドキュメントの数。 指定されておらず、かつ |
動作
動作については、 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: }, ] }
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()
メソッドを使用してインデックスを作成します。
{ lastName: 1 } key characters
この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" }, } }
{ userId: 1 } key characters
この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" }, } }
{ userId: 1 } readWriteDistribution
このdb.collection.analyzeShardKey
コマンドは、 social.post
コレクションの{ 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 } }