Docs Menu
Docs Home
/
Supervisar clústeres
/

Reducir la cantidad de colecciones

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

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.

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.

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

Si el Con el Explorador de Datos habilitado, la interfaz de usuario de Atlas ofrece una visión general de las colecciones de sus bases de datos. La interfaz de usuario de Atlas muestra el tamaño total de una colección, incluido 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 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 la interfaz de usuario de Atlas revela que tienes colecciones vacías, puedes eliminarlas directamente desde la interfaz de usuario de Atlas.

El panel de rendimiento en tiempo real de Atlas 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 aprender a incorporar el modelo de datos flexible en su esquema, consulte las siguientes presentaciones de MongoDB.live 2020:

En esta página