Overview
Lascolecciones son agrupaciones de documentos MongoDB, similares a una 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 su implementación contiene una cantidad innecesaria o creciente de colecciones, debe considerar reestructurar sus datos para reducir la cantidad de colecciones y, en última instancia, reducir los requisitos de recursos de su aplicación.
Ejemplo
Considere una 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 a. m. hasta la 10 p. m. Las lecturas de cada día se almacenan en una colección separada, cuyo nombre se define 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 }
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, la base de datos tiene una necesidad cada vez mayor de mantener estas colecciones y sus índices correspondientes. Si la base de datos llega a un punto en el que gestiona miles de colecciones e índices, podría producirse una degradación del rendimiento.
Además, este enfoque no facilita las consultas de varios días. Para consultar datos de varios días y obtener tendencias de temperatura durante períodos más largos, se necesitaría realizar una operación, que no es tan eficiente como consultar datos de la misma $lookup colección.
Esquema actualizado
En cambio, una mejor manera de 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. Considere 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 de lectura de temperaturas, el índice predeterminado _id de esta colección facilita las consultas por fecha.
Cómo comprobar la existencia de colecciones innecesarias
Shell de MongoDB (mongosh)
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 la cantidad de colecciones en su base de datos, junto con estadísticas de base de datos útiles, como el tamaño total de sus datos e índices.
MongoDB Cloud Manager
Data Explorer
El administrador de la nube ElExplorador de Datos ofrece una visión general de las colecciones en sus bases de datos. El Explorador de Datos muestra el tamaño total de una colección, incluyendo el tamaño de sus índices. Si la mayor parte del tamaño de una colección está compuesta por índices, puede considerar consolidar los datos de esa colección en otra y eliminar la colección original. Consulte la documentación de para obtener información sobre cómo fusionar datos de una colección con $merge otra.
Además, si el Explorador de datos revela que tiene colecciones vacías, puede eliminar esas colecciones directamente desde el Explorador de datos.
Panel de rendimiento en tiempo real
El Panel de Rendimiento en Tiempo Real de Cloud Manager muestra qué colecciones reciben más actividad. Puedes usar esta herramienta para asegurarte de que, antes de eliminar una colección, tu aplicación no la esté utilizando activamente.
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 bases de datos y colecciones,consulte 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.