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
/ /

Reducir la cantidad de colecciones

Colecciones son agrupaciones de documentos de MongoDB, similares a un TablaRDBMS. Existe una colección dentro de una única base de datos.

Incluso si una colección no contiene ningún documento, conlleva un coste de recursos: un índice _id predeterminado que no se puede eliminar. Si bien este índice no ocupa mucho espacio por sí solo (especialmente para colecciones pequeñas), si tiene miles de colecciones, estos índices pueden acumular recursos y sobrecargar la asignación de su base de datos.

Si tu implementación incluye un número innecesario o creciente de colecciones, deberías considerar reorganizar tus datos para reducir el número de colecciones y, en última instancia, disminuir los requisitos de recursos de tu aplicación.

Considera un temperatures base de datos que almacena colecciones de lecturas de temperatura obtenidas de un sensor. El sensor toma lecturas cada media hora desde las 10 AM hasta las 10 PM. Las lecturas de cada día se almacenan en una colección separada, nombrada por la fecha de la lectura:

// temperatures.march-09-2020
{
"_id": 1,
"timestamp": "2020-03-09T010:00:00Z",
"temperature": 29
}
{
"_id": 2,
"timestamp": "2020-03-09T010:30:00Z",
"temperature": 30
}
...
{
"_id": 25,
"timestamp": "2020-03-09T022:00:00Z",
"temperature": 26
}
// temperatures.march-10-2020
{
"_id": 1,
"timestamp": "2020-03-10T010:00:00Z",
"temperature": 30
}
{
"_id": 2,
"timestamp": "2020-03-10T010:30:00Z",
"temperature": 32
}
...
{
"_id": 25,
"timestamp": "2020-03-10T022:00:00Z",
"temperature": 28
}

Con cada día que pasa, el número de colecciones en la base de datos aumenta. Dado que el número de colecciones es ilimitado, hay una necesidad cada vez mayor de la base de datos de mantener estas colecciones y sus respectivos índices. Si la base de datos finalmente llega a un punto en el que gestiona miles de colecciones e índices, esto puede resultar en una degradación del rendimiento.

Además, este enfoque no facilita fácilmente las query a lo largo de varios días. Para consultar datos de varios días y obtener tendencias de temperatura durante períodos de tiempo más largos, sería necesario realizar una $lookup operación, que no es tan eficiente como hacer query de datos en la misma colección.

En su lugar, un mejor enfoque para estructurar estos datos es almacenar todas las lecturas de temperatura en una sola colección y tener las lecturas de cada día en un solo documento. Considera este esquema actualizado, donde todas las temperaturas están en una sola colección: temperatures.readings:

// temperatures.readings
{
"_id": ISODate("2020-03-09"),
"readings": [
{
"timestamp": "2020-03-09T010:00:00Z",
"temperature": 29
},
{
"timestamp": "2020-03-09T010:30:00Z",
"temperature": 30
},
...
{
"timestamp": "2020-03-09T022:00:00Z",
"temperature": 26
}
]
}
{
"_id": ISODate("2020-03-10"),
"readings": [
{
"timestamp": "2020-03-10T010:00:00Z",
"temperature": 30
},
{
"timestamp": "2020-03-10T010:30:00Z",
"temperature": 32
},
...
{
"timestamp": "2020-03-10T022:00:00Z",
"temperature": 28
}
]
}

Este esquema actualizado requiere muchos menos recursos que el esquema original. Ahora, en lugar de requerir un índice para cada día que se registran las temperaturas, el índice _id por defecto en esta colección ayuda a facilitar las consultas por fecha.

Tip

Para comprobar la cantidad de colecciones en su base de datos, puede ejecutar el siguiente comando mongosh desde:

db.getCollectionNames().length

El método db.stats() también devuelve el número de colecciones en tu base de datos, junto con estadísticas útiles como el tamaño total de tus datos e índices.

El gerente de operaciones Data Explorer proporciona una visión general de alto nivel de las colecciones en tus bases de datos. El Data Explorer muestra el tamaño total de una colección, incluso el tamaño de los índices de una colección. Si la mayor parte del tamaño de una colección se compone de índices, se puede considerar consolidar los datos de esa colección en otra y eliminar la colección original. Consulta la documentación de $merge para obtener un enfoque de fusión de datos de una colección a otra.

Además, si el Explorador de datos revela que tiene colecciones vacías, puede eliminar esas colecciones directamente desde el Explorador de datos.

El panel de rendimiento en tiempo real de Ops Manager muestra qué colecciones reciben más actividad. Puede usar esta herramienta para asegurarse de que, antes de eliminar una colección, su aplicación no la esté utilizando activamente.

  • 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 aprender más sobre bases de datos y colecciones, consulta Bases de datos y colecciones.

  • Para obtener más información sobre cómo incrustar datos relacionados en un solo documento, consulte Modelos de datos incrustados

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

Volver

Reducir el tamaño del documento grande

En esta página