Definición
$shardedDataDistributionNuevo en la versión 6.0.3.
Devuelve información sobre la distribución de datos en colecciones fragmentadas.
Nota
Esta etapa de agregación solo está disponible en
mongos.Esta etapa de agregación debe ejecutarse en la
adminbase de datos. El usuario debe tener elshardedDataDistributionprivilegio.
Sintaxis
La etapa shardedDataDistribution tiene la siguiente sintaxis:
db.aggregate( [ { $shardedDataDistribution: { } } ] )
Campos de salida
La etapa $shardedDataDistribution genera una matriz de documentos para cada colección fragmentada en la base de datos. Estos documentos contienen los siguientes campos:
Nombre de campo | Tipo de dato | Descripción |
|---|---|---|
| string | Espacio de nombres de la colección fragmentada. |
| arreglo | Fragmentos de la colección con la información de distribución de datos para cada fragmento. |
| entero | Número de documentos huérfanos en la partición. |
| entero | Número de documentos que posee el fragmento. |
| entero | Tamaño en bytes de los documentos que posee el fragmento cuando no están comprimidos. |
| entero | Tamaño en bytes de los documentos huérfanos en la partición cuando no están comprimidos. |
Comportamiento
Después de un apagado incorrecto de un mongod usando el motor de almacenamiento Wired Tiger, las estadísticas de tamaño y conteo informadas por $shardedDataDistribution pueden ser inexactas.
La cantidad de deriva depende del número de operaciones de inserción, actualización o eliminación realizadas entre el último punto de control y el apagado no limpio. Los puntos de control suelen ocurrir cada 60 segundos. Sin embargo, las instancias mongod que se ejecutan con configuraciones --syncdelay no por defecto pueden tener puntos de control más o menos frecuentes.
Ejecuta validate en cada colección en el mongod para restaurar las estadísticas después de un apagado no limpio.
Después de un apagado no limpio:
Ejemplos
Devolver todas las métricas de distribución de datos fragmentados
Para devolver todas las métricas de distribución de datos fragmentados, ejecute lo siguiente:
db.aggregate([ { $shardedDataDistribution: { } } ])
Ejemplo de salida:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
Métricas de retorno para un fragmento específico
Para devolver métricas de distribución de datos fragmentados para un fragmento específico, ejecute lo siguiente:
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "shards.shardName": "<name of the shard>" } } ])
Métricas de retorno para un espacio de nombres
Para devolver datos de distribución de datos fragmentados para un espacio de nombres, ejecute lo siguiente:
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "ns": "<database>.<collection>" } } ])
Confirmar que no quedan documentos huérfanos
A partir de MongoDB 6.0.3, puede ejecutar una agregación utilizando el
$shardedDataDistribution Etapa para confirmar que no quedan documentos huérfanos:
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "ns": "<database>.<collection>" } } ])
$shardedDataDistribution tiene una salida similar a la siguiente:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
Asegúrese de que "numOrphanedDocs" sea 0 para cada fragmento del clúster.
Para utilizar el controlador de MongoDB Node.js para agregar una etapa de $shardedDataDistribution a una canalización de agregación, utilice el Operador $shardedDataDistribution en un objeto de canalización.
Devolver todas las métricas de distribución de datos fragmentados
El siguiente ejemplo crea una etapa de canalización que devuelve información sobre la distribución de datos en colecciones fragmentadas. A continuación, ejecuta la canalización de agregación:
const pipeline = [{$shardedDataDistribution: {} }]; const adminDb = client.db("admin"); const cursor = adminDb.aggregate(pipeline); return cursor;
Métricas de retorno para un fragmento específico
El siguiente ejemplo devuelve información sobre la distribución de datos para un fragmento específico:
const pipeline = [ { $shardedDataDistribution: {} }, { $match: {"shards.shardName": 'atlas-kn29y8-shard-0'} } ]; const adminDb = client.db("admin"); const cursor = adminDb.aggregate(pipeline); return cursor;
Métricas de retorno para un espacio de nombres
El siguiente ejemplo devuelve información sobre la distribución de datos para un espacio de nombres específico:
const pipeline = [ { $shardedDataDistribution: {} }, { $match: {"ns": "sample_mflix.movies"} } ]; const adminDb = client.db("admin"); const cursor = adminDb.aggregate(pipeline); return cursor;