Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

db.collection.analyzeShardKey()

項目一覧

  • 定義
  • 互換性
  • 構文
  • フィールド
  • 動作
  • アクセス制御
  • 出力
  • 詳細
db.collection.analyzeShardKey(key, opts)

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

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

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

注意

このコマンドは、すべての MongoDB 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
ブール値
任意

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

デフォルトは 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: }, ] }

  • 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コレクションの{ 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コレクションの{ 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