Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

db.colección.analyzeShardKey() (método mongosh)

db.collection.analyzeShardKey(key, opts)

Calcula métricas para evaluar una clave de partición para una colección no particionada o particionada. Las métricas se basan en consultas de muestra. Puedes usar configureQueryAnalyzer para configurar el muestreo de consultas en una colección.

Este método está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

Importante

Este comando no es compatible con los clústeres M0 y Flex. Para obtener más información, consulta Comandos no compatibles.

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

db.collection.analyzeShardKey() tiene esta sintaxis:

db.collection.analyzeShardKey(
<shardKey>,
{
keyCharacteristics: <bool>,
readWriteDistribution: <bool>,
sampleRate: <double>,
sampleSize: <int>
}
)
Campo
Tipo
Necesidad
Descripción

key

Documento

Requerido

Clave de partición a analizar. Esto puede ser una clave candidata de partición para una colección no particionada o particionada, o la clave actual de partición para una colección particionada.

No hay ningún valor por defecto.

opts.keyCharacteristics

booleano

Opcional

Si se calculan o no las métricas sobre las características de la clave de partición. Para obtener detalles, consulta keyCharacteristics.

Se establece por defecto en true.

opts.readWriteDistribution

booleano

Opcional

Si se calculan o no las métricas sobre la distribución de lecturas y guardados. Para más detalles, consulta readWriteDistribution.

Se establece por defecto en true.

opts.sampleRate

doble

Opcional

La proporción de documentos de la colección que se muestrea al calcular las métricas sobre las características de la clave de fragmento. Si se establece sampleRate, no se puede establecer sampleSize.

Debe ser mayor que 0, hasta e incluyendo 1.

No hay ningún valor por defecto.

opts.sampleSize

entero

Opcional

El número de documentos que se muestrearán al calcular las métricas sobre las características de la clave de fragmento. Si se establece sampleSize, no se puede establecer sampleRate.

Si no se especifica y sampleRate no se especifica, el tamaño de la muestra se define por defecto en el tamaño de la muestra establecido por analyzeShardKeyCharacteristicsDefaultSampleSize.

Para obtener el comportamiento, consulta el comportamiento de analyzeShardKey.

Para obtener más información, consulta Control de acceso analyzeShardKey.

Para obtener una salida de muestra, consulta la salida de analyzeShardKey.

Considere una versión simplificada de una aplicación de redes sociales. La colección que intentamos fragmentar es la colección post.

Los documentos en la colección post tienen el siguiente esquema:

{
userId: <uuid>,
firstName: <string>,
lastName: <string>,
body: <string>, // the field that can be modified.
date: <date>, // the field that can be modified.
}
  • La aplicación tiene 1500 usuarios.

  • Hay 30 apellidos y 45 nombres, algunos más comunes que otros.

  • Hay tres usuarios famosos.

  • Cada usuario sigue exactamente a cinco usuarios más y tiene una probabilidad muy alta de seguir al menos a un usuario famoso.

  • Cada usuario publica alrededor de dos publicaciones al día en horarios aleatorios. Editan cada publicación una vez, justo después de que se haya publicado.

  • Cada usuario inicia sesión cada seis horas para leer su propio perfil y las publicaciones de los usuarios que sigue de las últimas 24 horas. También responden bajo una publicación aleatoria de las últimas tres horas.

  • Para cada usuario, la aplicación remueve las publicaciones que tienen más de tres días a la medianoche.

Esta carga de trabajo tiene los siguientes patrones de query:

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

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

  • findAndModify comando con filtro { userId: , firstName: , lastName: , date: } para actualizar el cuerpo y la fecha del campo.

  • update comando con multi: false y filtro { userId: , firstName: , lastName: , date: { $gte: , $lt: } } para actualizar el cuerpo y el campo de fecha.

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

A continuación se muestran métricas de ejemplo devueltas por el método db.collection.analyzeShardKey para algunas claves de fragmentos candidatas, con consultas muestreadas recopiladas a partir de siete días de carga de trabajo.

Nota

Antes de ejecutar el método db.collection.analyzeShardKey, lee la sección Índices de soporte. Si necesitas índices de soporte para la clave de partición que estás analizando, utiliza el método db.collection.createIndex() para crear los índices.

Este ejemplo utiliza el método db.collection.analyzeShardKey para proporcionar métricas en la clave de fragmento { _id: 1 } en la colección social.post.

El siguiente bloque de código utiliza para activar el muestreo de db.collection.configureQueryAnalyzer() consultas:

use social
db.post.configureQueryAnalyzer(
{
mode: "full",
samplesPerSecond: 5
}
)

Después de que db.collection.configureQueryAnalyzer() recopile muestras de query, el siguiente bloque de código utiliza el método db.collection.analyzeShardKey para muestrear 10,000 documentos y calcular resultados:

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

Este método db.collection.analyzeShardKey proporciona métricas sobre la clave de fragmento { lastName: 1 } en la colección social.post:

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

La salida para este ejemplo se asemeja a lo siguiente:

{
"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 método db.collection.analyzeShardKey proporciona métricas sobre la clave de fragmento { userId: 1 } en la colección social.post:

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

La salida para este ejemplo se asemeja a lo siguiente:

{
"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 método db.collection.analyzeShardKey proporciona métricas sobre la clave de fragmento { userId: 1 } en la colección social.post:

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

La salida para este ejemplo se asemeja a lo siguiente:

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

Volver

db.collection.aggregate

En esta página