Tamaño máximo de documento de MongoDB

Mehvish Ashiq 16 febrero 2024
Tamaño máximo de documento de MongoDB

Este tutorial describe el límite de tamaño máximo predeterminado para almacenar un documento en MongoDB. También informa sobre la solución alternativa si los datos superan el límite de tamaño.

También aprenderemos sobre el uso eficiente del límite de tamaño máximo predeterminado para un documento BSON.

Tamaño máximo de documento de MongoDB

En MongoDB, los documentos (objetos) se almacenan en formato BSON. El BSON (el JSON binario) es una serialización binaria de documentos similares a JSON.

Usando este formato, podemos usar diferentes extensiones para usar las diversas representaciones de tipos de datos que no forman parte de JSON.

Por ejemplo, tenemos un tipo de Fecha y BinData en BSON que no están disponibles en JSON. De acuerdo con MongoDB documentación, el límite de tamaño para un solo documento BSON es 16MB.

Tenemos el límite de tamaño máximo de un documento para garantizar que un documento no pueda usar la cantidad ilimitada de RAM o ancho de banda durante la transmisión. Recuerde que podemos anidar los documentos BSON hasta 100 niveles donde cada matriz/objeto agrega un nivel.

En el mundo de hoy, tenemos datos a nuestro alrededor. Por lo tanto, existe la posibilidad de que nuestros datos aumenten el límite de tamaño de un documento BSON, que es de 16 megabytes.

En ese caso, MongoDB nos ayuda proporcionando la API GridFS para almacenar los documentos de más de 16MB.

¿Qué es la API GridFS?

El GridFS es una especificación de MongoDB que podemos usar para almacenar y acceder a archivos grandes que excedan el límite del documento BSON (16MB), por ejemplo, archivos de audio, video o imagen. Es similar al sistema de archivos para almacenar archivos, pero los datos se almacenan en colecciones de MongoDB.

La API GridFS divide el archivo en fragmentos y almacena cada fragmento de datos en un documento separado donde el tamaño de cada documento es 255KB. El GridFS contiene dos colecciones, fs.files y fs.chunks de forma predeterminada, que almacenan los metadatos y fragmentos de un archivo.

Cada fragmento se reconoce por un campo _id único (el ObjectId), mientras que fs.files sirve como un documento principal. El campo files_id en el documento fs.chunks vincula el fragmento a su padre.

Puede leer este artículo para comprender la sintaxis mientras usa GridFS.

Use el límite de tamaño de documento BSON predeterminado de manera eficiente

El límite de tamaño del documento BSON (16MB) es mucho. Por ejemplo, todo el texto sin comprimir de la Guerra de los mundos es solo 364k (HTML), pero siempre hay excepciones.

Si sus datos exceden el límite, puede usar la API GridFS que discutimos anteriormente o hacer una estrategia para un uso eficiente de 16MB.

Tengamos un escenario en el que queremos desarrollar una aplicación XYZ. La aplicación necesita cuatro tipos de datos: Booleans, numbers, strings y dates (representados como UNIX ms).

Con un límite de tamaño de 16MB, MongoDB puede almacenar fácilmente alrededor de dos millones de valores de números de 64 bits (también fechas y booleanos).

Aquí, los valores de tipo cadena necesitan especial atención porque cada carácter UTF-8 ocupa un byte. Necesitamos optimizar el tamaño de todas las columnas que contienen valores de tipo cadena.

Podemos probar las siguientes formas de disminuir el tamaño de una columna que tiene valores de tipo cadena.

  1. Podemos usar el método stringify() y zip() como zip(JSON.stringify(column.values));.

  2. Podemos crear un diccionario e insertar todos los valores únicos de tipo cadena en el diccionario. Luego, reemplace los valores de cadena con índices.

    Este enfoque es útil si tenemos muchos valores de cadena repetidos en un campo. Este método no ayudará si alguien quiere almacenar una columna de hashes, pero puede usar la API GridFS.

  3. También podemos dividir la columna en varios fragmentos y guardar estos fragmentos en otros documentos vinculados al documento principal.

Hay un artículo de referencia que demuestra todos estos enfoques.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - MongoDB Document