Heurísticas para optimización de Aggregation Pipelines en ...

Post on 18-Jul-2022

2 views 0 download

Transcript of Heurísticas para optimización de Aggregation Pipelines en ...

Heurísticas para optimización de Aggregation Pipelines en MongoDB

Grupo 14

Santiago GoycoecheaMaximiliano Barragán

Agenda● Objetivos del proyecto

● Trabajos relacionados

● Heurísticas

● Experimentación

● Conclusiones y trabajo a futuro

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

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

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

Ideas nuestras

● $unwind vs. $project

● Tipo del campo fecha: string vs. date

Experimentación

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

Bases de datosTres tamaños de BD diferentes: ~2.000.000, ~500.000 y ~50.000 documentos

Colecciones de la BD más grande

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

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

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

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

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

$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

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

Tipo del campo “fecha”

Pero usar el tipo Date…ocupa menos espacio

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

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

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

¿Preguntas?

¡Muchas gracias!