Docs Menu
Docs Home
/ /

db.collection.analyzeShardKey() (método mongosh)

db.collection.analyzeShardKey(key, opts)

Calcula métricas para evaluar una clave de fragmento para una colección fragmentada o no fragmentada. Las métricas se basan en consultas muestreadas. Puede 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 fragmento para analizar. Puede ser una clave de fragmento candidata para una colección fragmentada o no fragmentada, o la clave de fragmento actual para una colección fragmentada.

No hay ningún valor predeterminado.

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 lectura y escritura. Para más detalles, consulte 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 1 inclusive.

No hay ningún valor predeterminado.

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 conocer el comportamiento,consulte analyseShardKey Behavior.

Para obtener más detalles, consulte Control de acceso de analyseShardKey.

Para ver un ejemplo de salida, consulte Salida de analyseShardKey.

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 de 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 unas dos entradas al día en horarios aleatorios. Edita cada entrada una vez, justo después de su publicación.

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

  • Para cada usuario, la aplicación elimina las publicaciones que tengan más de tres días de antigüedad a medianoche.

Esta carga de trabajo tiene los siguientes patrones de consulta:

  • 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 el campo de fecha.

  • 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 db.collection.analyzeShardKey método, lea la sección Índices de soporte. Si necesita índices de soporte para la clave de fragmento que está analizando, utilice el método para db.collection.createIndex() crearlos.

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() recopila muestras de consultas, el siguiente bloque de código utiliza el método db.collection.analyzeShardKey para muestrear 10,000 documentos y calcular los 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 de este ejemplo se parece a la 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 de este ejemplo se parece a la 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 de este ejemplo se parece a la 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