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

Soporte de rango a lo largo del tiempo análisis agrupados

Vayamos a su pregunta una por una:

Mirar las métricas de rendimiento de una sola ejecución realmente no es cómo funciona. Debe tomar el promedio de varias ejecuciones antes de concluir porque hay varios factores en juego. Dicho esto, MongoDB almacena en caché los documentos más utilizados en la memoria y los mantiene allí a menos que tenga que ceder memoria para algún otro documento. Entonces, si una consulta accede a documentos que ya están almacenados en caché de una consulta anterior, debería ser más rápido.

También en MongoDB, la agregación usa índices solo al principio, si los hay. Por ejemplo $match y $sort las fases pueden usar índices. En tu caso $match es la primera etapa de canalización, por lo que es una victoria.

En MongoDB, los datos se almacenan en BSON , entonces las fechas son básicamente números cuando se comparan. Así que no hay diferencia.

Aunque no lo he probado, realmente dudo que el enfoque time_bucket proporcione una respuesta más rápida. Desde created_at siempre aumentará, el índice, en este caso, también se agregará al final sin el time_bucket. Además, el tamaño del índice será comparativamente grande cuando se cree en una matriz que en un campo de fecha simple. ¿Eso no causará el problema de ajustar el índice en RAM?

Usar un time_bucket tiene sentido cuando está usando alguna función en el campo de fecha antes de la coincidencia. Si extrae solo el año del campo de fecha antes de hacer coincidir, hará que el índice existente en la fecha sea inútil.

Siempre es mejor convertir sus parámetros para que coincidan con el tipo de datos en la base de datos en lugar de hacerlo al revés.

Si es posible. Si es $and , solo especifica todos tus filtros separados por comas en el $match fase. Si es $or use el $or operador.

Si tiene dos $macth fases una por una MongoDB lo combina a uno . Por lo tanto, no debe preocuparse por agregar resultados de varias fases de coincidencia.

Ahora tu Optimización Puntos

Sí, consultas cubiertas son mucho más rápidos.

Si el tamaño de los documentos se reduce en el $group escenario mediante el uso de $project , entonces sí, es verdad.

No es necesariamente cierto, pero generalmente es el caso. Puede verificar esta respuesta .