Overview
Almacenar documentos grandes en su base de datos puede provocar un uso excesivo de la memoria RAM y del ancho de banda. MongoDB mantiene los datos a los que se accede con frecuencia, denominados Conjunto de trabajo en RAM. Cuando el conjunto de trabajo supera la asignación de RAM, el rendimiento se reduce, ya que los datos deben recuperarse del disco.
Si las queries más habituales son para documentos que contienen mucha más información de la que necesitas para esa query, se recomienda reestructurar tu esquema con documentos más pequeños utilizando referencias a colecciones adicionales. Al dividir los datos en más colecciones y utilizar documentos más pequeños para los datos a los que se accede con frecuencia, se reduce el tamaño total del conjunto de trabajo y se mejora el rendimiento.
Nota
Tu configuración de hardware puede afectar el tamaño de los documentos que tu sistema admite. El límite de Tamaño de documento BSON es de 16 megabytes.
Ejemplo
Considera un sitio web de catálogo de películas que muestre una lista de los 50 títulos de películas más recientemente estrenados y sus imágenes de carteles en la página de inicio. Desde la página de inicio, un usuario puede hacer clic en una película para ver detalles adicionales.
El sitio web almacena información sobre películas en un movies colección. Cada documento de la película contiene toda la información disponible sobre esa película:
// movies collection { "_id": 123, "title": "2001: A Space Odyssey", "poster": <url>, "director": "Stanley Kubrick", "release_year": 1968, "box_office_usd": 146000000, "countries_released": [ "United States", ... ], "cast": [ "Keir Dullea", ... ], "crew": [ "Ray Lovejoy", ... ], ... }
Nota
Siempre que sea posible, debería alojar imágenes fuera de su implementación de MongoDB y referenciarlas mediante URL. Si almacena imágenes en su base de datos, es mucho más probable que alcance el límite de tamaño del documento.
En este ejemplo, la query más frecuente que realiza el sitio web es encontrar los title y poster más recientes de las 50 películas. En lugar de consultar toda la información de películas, considera dividir la colección movie en dos colecciones separadas, movies y movie_metadata. Las colecciones están vinculadas con el _id de movie documentos:
// movies collection { "_id": 123, "title": "2001: A Space Odyssey", "poster": <url> }
// movie_metadata collection { "_id": <object_id>, "movie_id": 123, // reference to a movies document "director": "Stanley Kubrick", "release_year": 1968, "box_office_usd": 146000000, "countries_released": [ "United States", ... ], "cast": [ "Keir Dullea", ... ], "crew": [ "Ray Lovejoy", ... ], ... }
De esta forma, cuando el sitio web hace una query por las 50 películas más recientes y sus carteles, solo carga la información que necesita. Si un usuario hace clic en una película, el sitio realiza otra query para encontrar el documento movie_metadata asociado con esa película. Este nuevo esquema es más eficiente que el original porque la query más frecuente devuelve documentos mucho más pequeños.
Considera tu caso de uso, especialmente las operaciones que realizas con mayor frecuencia, y diseña un esquema que utilice eficientemente tu conjunto de trabajo.
Obtén más información
Para obtener más información sobre el Modelado de Datos en MongoDB y el modelo de esquema flexible, consulte Introducción al Modelado de Datos.
Para obtener más información sobre cómo utilizar referencias para modelar su esquema, consulte Modelar relaciones uno a muchos con referencias de documentos.
MongoDB también ofrece un curso gratuito de la MongoDB University sobre modelado de datos: Modelado de datos para MongoDB
Patrones de diseño
Para leer sobre estrategias para mantener los documentos del conjunto de trabajo en un tamaño manejable, se pueden consultar los siguientes patrones:
Se puede utilizar El patrón de referencia extendida para duplicar una porción de datos que se leen con frecuencia de documentos grandes a documentos más pequeños.
Se puede utilizar El patrón de subconjuntos para reducir el tamaño de los documentos con campos de arreglos grandes.
Se puede utilizar El patrón outlier para gestionar algunos documentos grandes en una colección que por lo demás es estándar.
Presentaciones de MongoDB.live 2020
Para aprender a incorporar el modelo de datos flexible en su esquema, consulte las siguientes presentaciones de MongoDB.live 2020:
Se puede aprender sobre las relaciones de entidades en MongoDB y ejemplos de sus implementaciones con Modelado de datos con MongoDB.
Se puede aprender sobre patrones avanzados de diseño de esquemas que se pueden incorporar en el esquema establecido con Patrones avanzados de diseño de esquemas.