Overview
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 documentos, conlleva un gasto de recursos, ya que no se puede eliminar el índice _id predeterminado. Para colecciones pequeñas, este índice no ocupa mucho espacio. Si tiene miles de colecciones, estos índices pueden acumular recursos y sobrecargar la asignación de su base de datos.
Si su implementación contiene colecciones innecesarias o una gran cantidad de colecciones que sigue aumentando, para reducir los requisitos de recursos de su aplicación, reestructure sus datos para eliminar las colecciones innecesarias.
Ejemplo
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.
Esquema actualizado
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.
Cómo comprobar la existencia de colecciones innecesarias
MongoDB Shell
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.
MongoDB Atlas
Atlas UI
Si el Data Explorer está habilitado, la Interfaz de Usuario de Atlas proporciona una visión general de alto nivel de las colecciones de tus bases de datos. La Interfaz de Usuario de Atlas muestra el tamaño total de una colección, incluyendo 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 la interfaz de usuario de Atlas revela que tienes colecciones vacías, puedes descartarlas directamente desde la interfaz de usuario de Atlas.
Panel de rendimiento en tiempo real
El Atlas Real-Time Performance Panel muestra qué colecciones reciben la mayor actividad. Puede utilizar esta herramienta para asegurarse de que antes de descartar una colección, no esté siendo utilizada activamente por su aplicación.
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 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
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.