Docs Menu
Docs Home
/ /
Mejore su esquema

Reduzca el tamaño de documentos grandes

Almacenar documentos grandes en la base de datos puede generar un uso excesivo de RAM y ancho de banda. MongoDB guarda en RAM los datos de acceso frecuente, conocidos como conjunto de trabajo. Cuando el conjunto de trabajo supera la capacidad de RAM, el rendimiento se reduce, ya que los datos deben recuperarse del disco.

Si sus consultas más frecuentes son para documentos que contienen mucha más información de la necesaria, considere reestructurar su esquema con documentos más pequeños que utilicen referencias a colecciones adicionales. Al dividir sus datos en más colecciones y usar documentos más pequeños para los datos de acceso frecuente, reduce el tamaño total del conjunto de trabajo y mejora el rendimiento.

Nota

La configuración de su hardware puede afectar el tamaño de los documentos que admite su sistema. El límite de tamaño de documento de BSON es de 16 megabytes.

Considere un sitio web de catálogo de películas que muestra una lista de los 50 títulos de películas más recientes y sus imágenes de póster en la página de inicio. Desde la página de inicio, el usuario puede hacer clic en una película para ver más detalles.

El sitio web almacena información sobre películas en un movies Colección. Cada documento de 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 consulta más frecuente del sitio web es encontrar las 50 películas más recientes, title y poster. En lugar de consultar toda la información de las películas, considere dividir la colección movie en dos colecciones independientes, movies y movie_metadata. Las colecciones están vinculadas con los _id de los 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 manera, cuando el sitio web consulta las 50 películas más recientes y sus carteles, solo carga la información necesaria. Si un usuario hace clic en una película, el sitio realiza otra consulta para encontrar el documento movie_metadata asociado a ella. Este nuevo esquema es más eficiente que el original porque la consulta más frecuente devuelve documentos mucho más pequeños.

Considere su caso de uso, especialmente las operaciones que realiza con más frecuencia, y diseñe un esquema que utilice eficientemente su 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