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
.
-
Podemos usar el método
stringify()
yzip()
comozip(JSON.stringify(column.values));
. -
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
. -
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.