sql >> Base de Datos >  >> NoSQL >> MongoDB

La agregación de MongoDB parece muy lenta

Como ya mencionó @Blakes Seven, $group no puede usar índices. Consulte este tema .

Por lo tanto, su consulta ya es óptima. Una forma posible de optimizar este caso de uso es calcular previamente y conservar los datos en una colección secundaria.

Podría probar esta estructura de datos:

{
  "_id" : ObjectId("560a5139b56a71ea60890201"),
  "ccy" : "USDNOK",
  "date_time_first" : ISODate("2007-01-01T00:00:07.904Z"),
  "date_time_last" : ISODate("2007-09-09T00:00:07.904Z")
}

Consultar esto se puede hacer en milisegundos en lugar de más de 500 segundos y puede beneficiarse de los índices.

Luego, por supuesto, cada vez que agregue, actualice o elimine un documento de la colección principal, deberá actualizar la colección secundaria.

Dependiendo de cuánto necesite que los datos estén "frescos", también puede optar por omitir este "proceso de actualización en vivo" y regenerar completamente la colección lateral solo una vez al día con un lote y tenga en cuenta que es posible que sus datos no estén " fresco".

Otro problema que podría solucionar:su servidor definitivamente necesita más RAM y CPU. Su conjunto de trabajo probablemente no se ajuste a la RAM, especialmente con este tipo de agregaciones.

Además, probablemente puedas hacer un buen uso de una SSD y yo FUERTEMENTE recomendamos usar un conjunto de réplicas de 3 nodos en lugar de una sola instancia para producción.