Definición
$shardedDataDistributionNuevo en la versión 6.0.3.
Devuelve información sobre la distribución de datos en colecciones sharded.
Nota
Esta etapa de agregación solo está disponible en
mongos.Esta etapa de agregación debe ejecutarse en la base de datos
admin. El usuario debe tener la acción de privilegioshardedDataDistribution.
Sintaxis
La etapa shardedDataDistribution tiene la siguiente sintaxis:
db.aggregate( [ { $shardedDataDistribution: { } } ] )
Campos de salida
La etapa $shardedDataDistribution devuelve un arreglo de documentos para cada colección con partición en la base de datos. Estos documentos contienen los siguientes campos:
Nombre de campo | Tipo de dato | Descripción |
|---|---|---|
| string | namespace de la colección particionada. |
| arreglo | Particiones en la colección con la información de distribución de datos para cada partición. |
| entero | Número de documentos huérfanos en la partición. Para colecciones de series temporales, |
| entero | Cantidad de documentos en propiedad por la partición. Para colecciones de series temporales, |
| entero | Tamaño en bytes de los documentos en las propietarias de la partición sin comprimir. |
| entero | Tamaño en bytes de los documentos huérfanos en la partición cuando no están comprimidos. |
A partir de MongoDB 8.0, $shardedDataDistribution solo devuelve resultados para la partición primaria de una colección si la partición primaria tiene fragmentos o documentos huérfanos.
Comportamiento
Después de un cierre inesperado e incorrecto de un mongod usando el motor de almacenamiento Wired Tiger, las estadísticas de tamaño y cantidad reportadas 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
Devuelve 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 } ] } ]
Devolver métricas para una partición específica
Para devolver métricas de distribución de datos particionados para una partición específica, ejecute lo siguiente:
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "shards.shardName": "<name of the shard>" } } ])
Métricas de devolución para un namespace
Para devolver los datos de distribución de datos particionado para un espacio de nombres, ejecuta lo siguiente:
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "ns": "<database>.<collection>" } } ])
Confirme que no queden Documentos Huérfanos
A partir de MongoDB 6.0.3, puedes ejecutar una agregación usando el
$shardedDataDistribution fase para confirmar que no queden 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 partición en el 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 particionado
El siguiente ejemplo crea una etapa de pipeline que devuelve información sobre la distribución de datos en colecciones particionadas. A continuación, el ejemplo ejecuta la pipeline de agregación:
const pipeline = [{$shardedDataDistribution: {} }]; const adminDb = client.db("admin"); const cursor = adminDb.aggregate(pipeline); return cursor;
Devolver métricas para una partición específica
El siguiente ejemplo devuelve información sobre la distribución de datos en una partición específica:
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 devolución para un namespace
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;