Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

db.collection.analyzeShardKey()

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 字段
  • 行为
  • 访问控制
  • 输出
  • 示例
  • 了解详情
db.collection.analyzeShardKey(key, opts)

计算用于评估未分片或分分片的集合的分片分片键的指标。 指标基于采样的查询。 您可以使用 configureQueryAnalyzer在集合上配置查询采样。

此方法可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

重要

M 0 、M 2和 M 5集群不支持此命令。 有关更多信息,请参阅不支持的命令。

db.collection.analyzeShardKey() 采用以下语法:

db.collection.analyzeShardKey(
<shardKey>,
{
keyCharacteristics: <bool>,
readWriteDistribution: <bool>,
sampleRate: <double>,
sampleSize: <int>
}
)
字段
类型
必要性
说明

key

文档

必需

要分析的分片键。这可以是未分片集合或分片集合的候选分片键,也可以是分片集合的当前分片键。

没有默认值。

opts.keyCharacteristics

布尔

Optional

是否计算有关分片分片键特征的指标。 有关详细信息,请参阅keyCharacteristics。

默认值为 true

opts.readWriteDistribution

布尔

Optional

是否计算写入分布的指标。 有关详细信息,请参阅readWriteDistribution。

默认值为 true

opts.sampleRate

double

Optional

计算有关分片分片键特征的指标时,集合中要进行示例的文档所占的比例。 如果设立sampleRate ,则无法设立sampleSize

必须大于 0,直至并包括 1

没有默认值。

opts.sampleSize

整型

Optional

计算分片密钥特征相关指标时要采样的文档数量。如果设置 sampleSize,则无法设置 sampleRate

如果未指定,且未指定 sampleRate,则样本大小默认为 analyzeShardKeyCharacteristicsDefaultSampleSize 设置的样本大小。

有关行为,请参阅 analyzeShardKey 行为。

有关详细信息,请参阅analyzeShardKey 访问控制。

有关输出示例,请参阅analyzeShardKey 输出。

考虑一个社交媒体应用的简化版本。 我们尝试分片的集合是post集合。

postcollection中的文档具有以下模式:

{
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 名名人用户。

  • 每个用户恰好关注了另外五个用户,并且很有可能关注至少一个名人用户。

  • 每个用户每天在随机时间发布大约两个帖子。 他们在每个帖子发布后立即编辑一次。

  • 每个用户每六个小时登录一次,以阅读自己的个人资料以及过去 24 小时关注的用户发布的帖子。 他们还会在过去三个小时内随机发布的帖子下进行回复。

  • 对于每个用户,该应用程序都会在午夜删除超过三天的帖子。

此工作负载具有以下查询模式:

  • 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集合上{ 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