Docs Menu
Docs Home
/ /
Bases de datos y colecciones

Colecciones con tamaño fijo

Las colecciones limitadas son colecciones de tamaño fijo que admiten operaciones de alto rendimiento que insertan y recuperan documentos según el orden de inserción. Funcionan de forma similar a los búferes circulares: una vez que una colección llena el espacio asignado, libera espacio para nuevos documentos sobrescribiendo los más antiguos.

Ver createCollection()o para obtener más información sobre cómo crear colecciones create limitadas.

Tip

Como alternativa a las colecciones limitadas, considere los índices TTL (Tiempo de Vida) de MongoDB. Como se describe en "Caducar datos de colecciones estableciendo TTL", estos índices permiten caducar y eliminar datos de colecciones normales según el valor de un campo de fecha y un valor TTL para el índice.

Los índices TTL no son compatibles con colecciones limitadas.

Las colecciones limitadas garantizan la conservación del orden de inserción. Como resultado, las consultas no necesitan un índice para devolver los documentos en orden de inserción. Sin esta sobrecarga de indexación, las colecciones limitadas permiten un mayor rendimiento de inserción.

Para hacer espacio para nuevos documentos, las colecciones limitadas eliminan automáticamente los documentos más antiguos de la colección sin necesidad de scripts ni operaciones de eliminación explícitas.

Considere los siguientes casos de uso potenciales para colecciones limitadas:

  • Almacenar la información de registro generada por sistemas de alto volumen. Insertar documentos en una colección limitada sin índice es similar a escribir la información de registro directamente en un sistema de archivos. Además, la propiedad integrada "primero en entrar,primero en salir" mantiene el orden de los eventos y gestiona el uso del almacenamiento. Por ejemplo, el registro de operaciones utiliza una colección limitada.

  • Almacene en caché pequeñas cantidades de datos en colecciones limitadas. Dado que las cachés son de lectura intensiva, deberá asegurarse de que esta colección permanezca siempre en el conjunto de trabajo (es decir, en RAM) o aceptar una penalización de escritura para el índice o los índices requeridos.

La colección oplog.rs que almacena un registro de las operaciones en un Set de réplicas utiliza una colección con tamaño fijo.

A partir de MongoDB,4.0 a diferencia de otras colecciones limitadas, el oplog puede crecer más allá de su límite de tamaño configurado para evitar majority commit point eliminar.

Nota

MongoDB redondea el tamaño limitado de oplog al múltiplo entero más cercano de 256 bytes.

Las colecciones con tamaño fijo tienen un campo _id y un índice en el campo _id de forma predeterminada.

A partir de MongoDB,5.0 no se puede utilizar "snapshot" la preocupación de lectura al leer desde una colección limitada.

Si planeas actualizar documentos en una colección con tamaño fijo, crea un índice para que estas operaciones de actualización no requieran un escaneo de colección.

No es posible fragmentar una colección limitada.

Utilice el orden natural para recuperar eficientemente los elementos insertados más recientemente en la colección. Esto es similar a usar el comando tail en un archivo de registro.

La etapa de canalización de agregación no puede escribir resultados en una colección $out limitada.

No se puede escribir en colecciones limitadasen las transacciones.

Las colecciones con tamaño fijo no son compatibles con Stable API V1.

Debe crear colecciones limitadas explícitamente mediante el método,db.createCollection() que es un auxiliar mongosh create para el comando. Al crear una colección limitada, debe especificar el tamaño máximo de la colección en bytes, que MongoDB preasignará para la colección. El tamaño de la colección limitada incluye una pequeña cantidad de espacio para la sobrecarga interna.

db.createCollection( "log", { capped: true, size: 100000 } )

Nota

El valor que proporcione para el campo size debe ser mayor que 0 y menor o igual que 1024^5 (1 PB). MongoDB redondea el size de todas las colecciones limitadas al múltiplo entero más cercano 256 de, en bytes.

Además, también puede especificar un número máximo de documentos para la colección utilizando el campo max como en el siguiente documento:

db.createCollection("log", { capped : true, size : 5242880, max :
5000 } )

Importante

El size argumento siempre es obligatorio, incluso si se especifica el max número de documentos. MongoDB elimina los documentos antiguos si una colección alcanza el límite de tamaño máximo antes de alcanzar el número máximo de documentos.

Tip

Consulte:

Si realizas un find() en una colección con tamaño fijo sin especificar el orden, MongoDB garantiza que el orden de los resultados sea el mismo que el orden de inserción.

Para recuperar documentos en orden de inserción inverso, emitafind()junto con el métodosort()con el parámetro$naturalestablecido en -1, como se muestra en el siguiente ejemplo:

db.cappedCollection.find().sort( { $natural: -1 } )

Utilice el isCapped() método para determinar si una colección tiene un límite, de la siguiente manera:

db.collection.isCapped()

Puede convertir una colección sin límite en una colección con límite con el convertToCapped comando:

db.runCommand({"convertToCapped": "mycoll", size: 100000});

El parámetro size especifica el tamaño de la colección con tamaño fijo en bytes.

Esto mantiene un bloqueo exclusivo de la base de datos durante la operación. Otras operaciones que bloqueen la misma base de datos se bloquearán hasta que la operación se complete. Consulte ¿Qué bloqueos aplican algunas operaciones comunes de cliente? para obtener información sobre las operaciones que bloquean la base de datos.

Novedades en la versión 6.0.

Puede cambiar el tamaño de una colección limitada usando la collMod opción del comando cappedSize para establecer cappedSize en bytes. cappedSize debe ser mayor que 0 y menor o igual que 1024^5 (1 PB).

Nota

Antes de poder cambiar el tamaño de una colección limitada, debe haber establecido featureCompatibilityVersion al menos en la "6.0" versión.

Por ejemplo, el siguiente comando establece el tamaño máximo de la colección limitada "log" en 100000 bytes:

db.runCommand( { collMod: "log", cappedSize: 100000 } )

Novedades en la versión 6.0.

Para cambiar el número máximo de documentos en una colección limitada, use la collMod cappedMax opción del comando. Si cappedMax es menor o igual 0 que, no hay límite máximo de documentos. Si cappedMax es menor que el número actual de documentos en la colección, MongoDB elimina los documentos sobrantes en la siguiente operación de inserción.

Por ejemplo, el siguiente comando establece el número máximo de documentos en la colección limitada "log" en 500:

db.runCommand( { collMod: "log", cappedMax: 500 } )

Puedes usar un cursor con seguimiento con las colecciones con tamaño fijo. De manera similar al comando tail -f de Unix, el cursor con seguimiento "sigue" el final de una colección con tamaño fijo. A medida que se insertan nuevos documentos en la colección con tamaño fijo, puedes utilizar el cursor con seguimiento para continuar recuperando documentos.

Consulta cursores con seguimiento para obtener información sobre cómo crear un cursor con seguimiento.

Volver

Vistas materializadas on-demand