Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

rewriteCollection (comando de base de datos)

rewriteCollection

Reescribe una colección particionada en disco usando la misma clave de partición.

Utiliza este comando para redistribuir datos al agregar o remover particiones, o para recuperar espacio en disco.

Para detener una reescritura de colección en curso, utilice el abortRewriteCollection .

Nuevo en la versión 8.3.

Este comando está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

Nota

Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte 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.

El comando tiene la siguiente sintaxis:

db.adminCommand( {
rewriteCollection: "<database>.<collection>",
numInitialChunks: <int>,
zones: <zones>
} )

El comando toma los siguientes campos:

Campo
Tipo
Descripción

rewriteCollection

string

Obligatorio. Nombre de la base de datos y de la colección para reescribir.

numInitialChunks

entero

opcional. Número de fragmentos iniciales que se utilizarán para redistribuir la colección. De forma por defecto es 90.

zones

arreglo

opcional. Documents que especifican las zonas para la clave de partición.

Antes de comenzar a reescribir tu colección, asegúrate de cumplir con los siguientes requisitos:

  • Su aplicación puede tolerar un período de dos segundos en el que la colección afectada bloquea los guardados. Durante el periodo en el que las écritas están bloqueadas, tu aplicación experimenta un aumento en la latencia.

    Si tu carga de trabajo no puede tolerar este requerimiento, considera refinar la clave de partición en su lugar.

  • Su base de datos cumple con estos requisitos de recursos:

    • Asegúrese de que el espacio de almacenamiento disponible en cada partición receptora sea al menos el doble del tamaño de almacenamiento de la colección que desea reescribir, más el tamaño total de su índice, dividido por el número de particiones:

      ( ( collection_storage_size + index_size ) * 2 ) / shard_count = storage_req

      Por ejemplo, considera una colección con un tamaño de almacenamiento de 2 TB de datos y un índice de 400 GB. Para distribuirlo en cuatro particiones necesitarías:

      ( ( 2 TB collection + 0.4 TB index ) * 2 ) / 4 shards = 1.2 TB storage

      Para reescribir esta colección, cada partición requiere 1.2 TB de almacenamiento disponible.

      En MongoDB Atlas, puede que necesites actualizar al siguiente nivel de almacenamiento para la operación de reescritura. Puedes revertir la actualización una vez que la operación se haya completado.

    • Asegúrate de que tu capacidad de E/S esté por debajo de 50%.

    • Asegúrate de que la carga de tu CPU esté por debajo del 80%.

    Importante

    Estos requisitos no son exigidos por la base de datos. Una falta de asignación de suficientes recursos puede provocar:

    • la base de datos se queda sin espacio y se apaga

    • rendimiento reducido

    • la operación tarda más de lo esperado

    Si tu aplicación tiene periodos de menor tráfico, realiza esta operación en la colección durante ese tiempo si es posible.

  • No es necesario crear un índice en la nueva clave de partición antes de volver a particionar. La operación de redistribución compila automáticamente los índices requeridos durante la fase de índices.

  • No hay creaciones de índices en proceso. Para comprobar si hay creaciones de índices en ejecución, utiliza $currentOp:

    db.getSiblingDB("admin").aggregate( [
    { $currentOp : { idleConnections: true } },
    { $match: {
    $or: [
    { "op": "command", "command.createIndexes": { $exists: true } },
    { "op": "none", "msg": /^Index Build/ }
    ]
    }
    }
    ] )

    En el documento de resultados, si el valor en el campo inprog es un arreglo vacío, no hay creaciones de índices en curso:

    {
    inprog: [],
    ok: 1,
    '$clusterTime': { ... },
    operationTime: <timestamp>
    }

Nota

Una operación de reescritura es un proceso intensivo en escritura que puede generar tasas incrementadas de oplog. Puede que desees:

  • defina un tamaño fijo para el oplog para prevenir el crecimiento sin límites del oplog.

  • aumente el tamaño de Oplog para minimizar la posibilidad de que uno o más nodos secundarios queden obsoletos.

Consulta la documentación de Oplog del set de réplicas para obtener más información.

  • Si la colección usa Atlas Search, el índice de búsqueda dejará de estar disponible una vez que se complete la operación. Para restaurar, reconstruye manualmente el índice de búsqueda.

  • Las colecciones que utilizan Queryable Encryption no son compatibles.

El comando rewriteCollection requiere la acción de privilegio rewriteCollection en el clúster o en la base de datos y colección que deseas reescribir.

Esta acción de privilegio también está disponible para los usuarios con los siguientes roles:

Para reescribir una colección, ejecute el siguiente comando:

db.adminCommand( {
rewriteCollection: "sales.orders"
} )

Volver

reshardCollection

En esta página