Definición
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
configureQueryAnalyzerpara configurar el muestreo de consultas en una colección.
Compatibilidad
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.
Sintaxis
db.collection.analyzeShardKey() tiene esta sintaxis:
db.collection.analyzeShardKey( <shardKey>, { keyCharacteristics: <bool>, readWriteDistribution: <bool>, sampleRate: <double>, sampleSize: <int> } )
Campos
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| 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. |
| 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 |
| 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 |
| 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 Debe ser mayor que No hay ningún valor por defecto. |
| 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 Si no se especifica y |
Comportamiento
Para obtener el comportamiento, consulta el comportamiento de analyzeShardKey.
Control de acceso
Para obtener más información, consulta Control de acceso analyzeShardKey.
Salida
Para obtener una salida de muestra, consulta la salida de analyzeShardKey.
Ejemplos
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. }
Información de segundo plano
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.
Carga de trabajo de muestra
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.
Patrones de consulta de carga de trabajo
Esta carga de trabajo tiene los siguientes patrones de query:
findcomando con filtro{ userId: , firstName: , lastName: }findcomando con filtro{ $or: [ { userId: , firstName: , lastName: , date: { $gte: } }, ... , { userId: , date: } ] }findAndModifycomando con filtro{ userId: , firstName: , lastName: , date: }para actualizar el cuerpo y la fecha del campo.updatecomando conmulti: falsey filtro{ userId: , firstName: , lastName: , date: { $gte: , $lt: } }para actualizar el cuerpo y el campo de fecha.deletecomando conmulti: truey 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.
{ _id: 1 } keyCharacteristics
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 } )
{ lastName: 1 } keyCharacteristics
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" }, } }
{ userId: 1 } keyCharacteristics
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" }, } }
{ userId: 1 } lecturaEscribirDistribución
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 } }