heurísticas para optimización de aggregation pipelines en
TRANSCRIPT
![Page 1: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/1.jpg)
Heurísticas para optimización de Aggregation Pipelines en MongoDB
Grupo 14
Santiago GoycoecheaMaximiliano Barragán
![Page 2: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/2.jpg)
Agenda● Objetivos del proyecto
● Trabajos relacionados
● Heurísticas
● Experimentación
● Conclusiones y trabajo a futuro
![Page 3: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/3.jpg)
Objetivos del proyecto
● Relevamiento del estado del arte sobre el tema, búsqueda de heurísticas existentes
● Desarrollo de nuevas heurísticas
● Evaluación en base a experimentos de las heurísticas relevadas y desarrolladas
![Page 4: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/4.jpg)
Trabajos relacionados
No hay muchos resultados sobre el tema, más allá de la documentación oficial de MongoDB
Nuestro proyecto se basa en el libro MongoDB Performance Tuning de Guy Harrison y Michael Harrison
![Page 5: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/5.jpg)
Heurísticas relevadas● Filtrar de manera temprana y frecuente
● Utilizar índices en los foreignField de los $lookup
● Hacer los $lookup desde la colección más pequeña
● Hacer los $sort que utilizan un índice lo antes posible
![Page 6: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/6.jpg)
Ideas nuestras
● $unwind vs. $project
● Tipo del campo fecha: string vs. date
![Page 7: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/7.jpg)
Experimentación
![Page 8: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/8.jpg)
Data setCatálogo de Datos Abiertos de la IdM: Viajes realizados en los ómnibus del Sistema de Transporte Metropolitano
Es un conjunto de CSVs que pueden ser interpretados como una BD desnormalizada
Columnas de los CSVs
![Page 9: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/9.jpg)
Bases de datosTres tamaños de BD diferentes: ~2.000.000, ~500.000 y ~50.000 documentos
Colecciones de la BD más grande
![Page 10: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/10.jpg)
Metodología
● Para cada heurística, desarrollar dos consultas equivalentes: una que la aplique y una que no
● Ejecutarlas 10 veces en cada una de las 3 bases definidas, midiendo los tiempos de ejecución
![Page 11: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/11.jpg)
Filtrar de manera temprana y frecuente
La evaluamos filtrando con $match
group match lookup project
group lookup project match
Los resultados no fueron concluyentes
Consulta: Viajes con más de un tramo
![Page 12: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/12.jpg)
Utilizar índices en los foreignField de los $lookup
En este caso los resultados sí fueron buenos
lookup project sort limit
Con índiceSin índice
Consulta: Líneas con más viajes
![Page 13: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/13.jpg)
Hacer los $lookup desde la colección más pequeña
Esta heurística también funcionó bien
Desde una colección de 2.000.000 de documentos
Desde una colección de 21 de documentos
Consulta: Paradas donde suben más estudiantes tipo A
![Page 14: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/14.jpg)
Hacer los $sort que utilizan un índice lo antes posible
Esta heurística fue la más efectiva
sort lookup project limit
lookup project sort limit
Consulta: Últimas líneas con viajes
![Page 15: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/15.jpg)
$unwind vs. $project
Consideramos dos $project distintos
El $unwind resultó ser más eficiente, pero no por mucho...
lookup project group project
lookup unwind group project ProjectProject “completo”
Unwind
Consulta: Cantidad total de viajes realizados por cada grupo de usuario
![Page 16: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/16.jpg)
Tipo del campo “fecha”
2.000.000 de documentos
Los resultados son inconclusos en términos de tiempo de ejecución...
500.000 documentos 50.000 documentos
String
Date
Consulta: Últimas líneas con viajes
![Page 17: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/17.jpg)
Tipo del campo “fecha”
Pero usar el tipo Date…ocupa menos espacio
![Page 18: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/18.jpg)
Conclusiones
● “Filtrar de manera temprana y frecuente” con $match en lugar de $limit no supone un gran cambio, por optimizaciones automáticas del manejador
● Las otras tres heurísticas recopiladas del libro mejoran el desempeño de las consultas
![Page 19: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/19.jpg)
Conclusiones
● En caso de arreglos de un solo elemento, parece preferible usar $unwind por sobre $project○ + Mejores tiempos○ + Más sencilla○ - Intuitiva
● Dependiendo las características de la base y del sistema, nos puede convenir definir las fechas como string o como date
![Page 20: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/20.jpg)
Trabajo a futuro● Profundizar más en algunas de las heurísticas mencionadas en el libro
que no fueron abordadas en este trabajo
● Realizar más experimentos combinando estas heurísticas para ver de qué manera interactúan entre ellas
● Realizar experimentos con otros pasos del pipeline
![Page 21: Heurísticas para optimización de Aggregation Pipelines en](https://reader036.vdocuments.co/reader036/viewer/2022071904/62d4f8fddf6a2614bf56f57f/html5/thumbnails/21.jpg)
¿Preguntas?
¡Muchas gracias!