db.collection.analyzeShardKey()
Nesta página
Definição
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.
Compatibilidade
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
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas para todos os comandos, consulte Comandos sem suporte.
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
Sintaxe
db.collection.analyzeShardKey()
tem esta sintaxe:
db.collection.analyzeShardKey( <shardKey>, { keyCharacteristics: <bool>, readWriteDistribution: <bool>, sampleRate: <double>, sampleSize: <int> } )
Campos
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 é |
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 é |
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 Deve ser maior que 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 Se ele e |
Comportamento
Para saber mais sobre comportamento, consulte Compoartamento de analyzeShardKey.
Controle de acesso
Para obter detalhes, consulte o Controle de acesso analyzeShardKey.
Saída
Para obter saída de amostra, consulte Saída analyzeShardKey.
Exemplos
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. }
Informações básicas
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.
Amostra de volume de trabalho
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.
Padrões de query de volume de trabalho
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 commulti: false
e filtro{ userId: , firstName: , lastName: , date: { $gte: , $lt: } }
para atualizar o corpo e o campo de data.delete
comando commulti: 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.
{ lastName: 1 } keyChaacteristics
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" }, } }
{ userId: 1 } keyChaacteristics
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" }, } }
{ userId: 1 } readWriteDistribution
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 } }