Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Reduzca el tamaño de documentos grandes

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.

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.

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.

Para aprender a incorporar el modelo de datos flexible en su esquema, consulte las siguientes presentaciones de MongoDB.live 2020:

Volver

Reducir índices

En esta página