Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

db.collection.analyzeShardKey()

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Campos
  • Comportamento
  • Controle de acesso
  • Saída
  • Exemplos
  • Saiba mais
db.collection.analyzeShardKey(key, opts)

Calcula métricas para avaliar uma chave de fragmento para uma coleção fragmentada ou não fragmentada. As métricas são baseadas em queries de amostra. Você pode utilizar o configureQueryAnalyzer para configurar a amostragem de query em uma collection.

Esse método está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

Importante

Este comando não é suportado em clusters M0, M2 e M5 . Para obter mais informações, consulte Comandos não suportados.

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

db.collection.analyzeShardKey() tem esta sintaxe:

db.collection.analyzeShardKey(
<shardKey>,
{
keyCharacteristics: <bool>,
readWriteDistribution: <bool>,
sampleRate: <double>,
sampleSize: <int>
}
)
Campo
Tipo
necessidade
Descrição

key

documento

Obrigatório

Chave de fragmento para analisar. Pode ser uma chave de fragmento candidata para uma coleção não fragmentada ou uma coleção fragmentada ou a chave de fragmento atual para uma coleção fragmentada.

Não há valor padrão.

opts.keyCharacteristics

booleano

Opcional

Se as métricas sobre as características da chave de shard são calculadas ou não. Para obter detalhes, consulte keyChaacteristics.

Padrão é true.

opts.readWriteDistribution

booleano

Opcional

Se as métricas sobre a distribuição de leitura e escrita são ou não calculadas. Para obter detalhes, consulte readWriteDistribution.

Padrão é true.

opts.sampleRate

double

Opcional

A proporção dos documentos na collection a serem amostradas ao calcular as métricas sobre as características da chave de shard. Se você definir sampleRate, não poderá definir sampleSize.

Deve ser maior que 0, até e inclusive 1.

Não há valor padrão.

opts.sampleSize

inteiro

Opcional

O número de documentos a serem amostrados ao calcular as métricas sobre as características da chave de fragmento. Se você definir sampleSize, não poderá definir sampleRate.

Se ele e sampleRate não forem especificados, o tamanho da amostra assumirá como padrão o tamanho de amostra definido por analyzeShardKeyCharacteristicsDefaultSampleSize.

Para saber mais sobre comportamento, consulte Compoartamento de analyzeShardKey.

Para obter detalhes, consulte o Controle de acesso analyzeShardKey.

Para obter saída de amostra, consulte Saída analyzeShardKey.

Considere uma versão simplificada de um aplicativo de mídia social. A coleção que estamos tentando fragmentar é a coleção post .

Os documentos na collection post têm o seguinte esquema:

{
userId: <uuid>,
firstName: <string>,
lastName: <string>,
body: <string>, // the field that can be modified.
date: <date>, // the field that can be modified.
}
  • O aplicativo tem 1500 usuários.

  • Existem 30 sobrenomes e 45 nomes, alguns mais comuns do que outros.

  • Existem três usuários renomeados.

  • Cada usuário segue exatamente cinco outros usuários e tem uma probabilidade muito alta de seguir pelo menos um usuário-celebridade.

  • Cada usuário publica cerca de duas publicações por dia em horários aleatórios. Eles editam cada publicação uma vez, logo após ser publicada.

  • Cada usuário faz login a cada seis horas para ler seu próprio perfil e as publicações dos usuários que segue nas últimas 24 horas. Eles também respondem em uma postagem aleatória das últimas três horas.

  • Para cada usuário, o aplicativo remove publicações com mais de três dias à meia-noite.

Essa carga de trabalho tem os seguintes padrões de query:

  • find comando com filtro { userId: , firstName: , lastName: }

  • find comando com filtro { $or: [{ userId: , firstName: , lastName:, date: { $gte: }, ] }

  • findAndModify comando com filtro { userId: , firstName: , lastName: , date: } para atualizar o corpo e o campo de data.

  • update comando com multi: false e filtro { userId: , firstName: , lastName: , date: { $gte: , $lt: } } para atualizar o corpo e o campo de data.

  • delete comando com multi: true e filtro { userId: , firstName: , lastName: , date: { $lt: } }

Abaixo estão exemplos de métricas retornadas por db.collection.analyzeShardKey para algumas chaves de shard candidatas, com amostras de query coletadas em sete dias de volume de trabalho.

Observação

Antes de executar o método db.collection.analyzeShardKey , leia a seção Índices de suporte . Se você precisar de índices de suporte para a chave de shard que está analisando, use o método db.collection.createIndex() para criar os índices.

Este db.collection.analyzeShardKey método fornece métricas na { lastName: 1 } chave de shard na social.post coleção :

use social
db.post.analyzeShardKey(
{ lastName: 1 },
{
keyCharacteristics: true,
readWriteDistribution: false
}
)

A saída deste comando é semelhante ao seguinte:

{
"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"
},
}
}

Este db.collection.analyzeShardKey método fornece métricas na { userId: 1 } chave de shard na social.post coleção :

use social
db.post.analyzeShardKey(
{ userId: 1 },
{
keyCharacteristics: true,
readWriteDistribution: false
}
)

A saída deste método é semelhante ao seguinte:

{
"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"
},
}
}

Este db.collection.analyzeShardKey comando fornece métricas na { userId: 1 } chave de shard na social.post collection :

use social
db.post.analyzeShardKey(
{ userId: 1 },
{
keyCharacteristics: false,
readWriteDistribution: true
}
)

A saída deste método é semelhante ao seguinte:

{
"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
}
}

Voltar

db.coleção.aggregate()