Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Etapas de la pipeline de agregación

$shardedDataDistribution (agregación)

$shardedDataDistribution

Nuevo 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 privilegio shardedDataDistribution.

La etapa shardedDataDistribution tiene la siguiente sintaxis:

db.aggregate( [
{ $shardedDataDistribution: { } }
] )

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

ns

string

namespace de la colección particionada.

shards

arreglo

Fragmentos de la colección con la información de distribución de datos para cada fragmento.

shards.numOrphanedDocs

entero

Número de documentos huérfanos en la partición.

shards.numOwnedDocuments

entero

Cantidad de documentos en propiedad por la partición.

shards.ownedSizeBytes

entero

Tamaño en bytes de los documentos que posee el fragmento cuando no están comprimidos.

shards.orphanedSizeBytes

entero

Tamaño en bytes de los documentos huérfanos en la partición cuando no están comprimidos.

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:

  • validate actualiza la estadística de recuento en la salida collStats con el último valor.

  • Otras estadísticas como el número de documentos insertados o eliminados en la salida collStats son estimaciones.

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
}
]
}
]

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>" } }
])

Para devolver datos de distribución de datos fragmentados para un espacio de nombres, ejecute lo siguiente:

db.aggregate([
{ $shardedDataDistribution: { } },
{ $match: { "ns": "<database>.<collection>" } }
])

A partir de MongoDB 6.0.3, puedes ejecutar una agregación usando la etapa $shardedDataDistribution 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 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.

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;

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;

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;

Volver

$setWindowFields

En esta página