Definición
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
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 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. |
| 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 lectura y escritura. Para más detalles, consulte 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 predeterminado. |
| 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 conocer el comportamiento,consulte analyseShardKey Behavior.
Control de acceso
Para obtener más detalles, consulte Control de acceso de analyseShardKey.
Salida
Para ver un ejemplo de salida, consulte Salida de analyseShardKey.
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 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. }
Antecedentes
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 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.
Patrones de consulta de carga de trabajo
Esta carga de trabajo tiene los siguientes patrones de consulta:
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 el campo de fecha.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 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.
{ _id: 1 } Características clave
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 } )
{ apellido: 1 } Características clave
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" }, } }
{ userId: 1 } Características clave
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" }, } }
{ 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 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 } }