Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Reducir la cantidad de colecciones

Crear demasiadas colecciones puede disminuir el rendimiento. Con cada colección, MongoDB crea una por defecto Índice _id, que utiliza almacenamiento adicional. Si creas colecciones excesivas, esas colecciones e índices pueden agotar los recursos del set de réplicas y disminuir el rendimiento.

Considera el siguiente esquema que almacena lecturas diarias de temperatura que se toman cada hora. El temperature La base de datos almacena las lecturas de cada día en colecciones separadas.

// Temperatures for May 10, 2024
{
_id: 1,
timestamp: "2024-05-10T010:00:00Z",
temperature: 60
},
{
_id: 2
timestamp: "2024-05-10T011:00:00Z",
temperature: 61
},
{
_id: 3
timestamp: "2024-05-10T012:00:00Z",
temperature: 64
}
...
// Temperatures for May 11, 2024
{
_id: 1,
timestamp: "2024-05-11T010:00:00Z",
temperature: 68
},
{
_id: 2
timestamp: "2024-05-11T011:00:00Z",
temperature: 72
},
{
_id: 3
timestamp: "2024-05-11T012:00:00Z",
temperature: 72
}
...

Con un número ilimitado de colecciones, el número de índices _id por defecto puede aumentar y degradar el rendimiento.

Además, este enfoque requiere una operación $lookup para query en varias colecciones. Las operaciones de $lookup aumentan la complejidad de las consultas y pueden tensionar los recursos.

Para reducir el número de colecciones, descarta o archiva las colecciones no utilizadas, o remodela tu esquema de datos consolidando colecciones relacionadas, desnormalizando datos o aprovechando documentos incrustados donde sea apropiado.

Puedes modificar el esquema para almacenar las lecturas de temperatura de cada día en una sola colección. Por ejemplo:

db.dailyTemperatures.insertMany( [
{
_id: ISODate("2024-05-10T00:00:00Z"),
readings: [
{
timestamp: "2024-05-10T10:00:00Z",
temperature: 60
},
{
timestamp: "2024-05-10T11:00:00Z",
temperature: 61
},
{
timestamp: "2024-05-10T12:00:00Z",
temperature: 64
}
]
},
{
_id: ISODate("2024-05-11T00:00:00Z"),
readings: [
{
timestamp: "2024-05-11T10:00:00Z",
temperature: 68
},
{
timestamp: "2024-05-11T11:00:00Z",
temperature: 72
},
{
timestamp: "2024-05-11T12:00:00Z",
temperature: 72
}
]
}
] )

El esquema actualizado requiere menos recursos que el original. En lugar de necesitar un índice separado para cada día, el índice por defecto _id facilita ahora las consultas por fecha.

Volver

Evitar el arreglo ilimitado

Obtén una insignia de habilidad

Domine "Patrones y antipatrones avanzados de esquemas" de forma gratuita.

Más información

En esta página