Este artículo explora una técnica avanzada para mejorar la concurrencia en Scala, inspirada en el lenguaje Haskell y su biblioteca Haxl. El problema que aborda es cómo optimizar la ejecución de múltiples consultas de datos, evitando una serie de llamadas secuenciales a la base de datos. En Haskell, Haxl utiliza una extensión del constructo do que permite agrupar y ejecutar consultas de manera concurrente, optimizando el número total de peticiones a la base de datos. Por ejemplo, si necesitamos obtener el nombre completo de los mejores amigos de un grupo, Haxl puede combinar las consultas para obtener los IDs de los mejores amigos y luego las consultas para obtener sus nombres, en un solo lote, reduciendo el número de viajes a la base de datos de tres a dos.
Scala, aunque carece de la extensión específica del do de Haskell, ofrece alternativas a través de su sistema de tipos y funciones de orden superior. La biblioteca Fetch en Scala proporciona una funcionalidad similar a Haxl, permitiendo agrupar consultas. Sin embargo, Scala no tiene una transformación automática como la de Haskell para combinar las consultas en un solo paso. Por lo tanto, el artículo describe cómo implementar manualmente esta transformación en Scala utilizando la función tupled de Cats, que permite combinar funciones de múltiples argumentos en una sola función de dos argumentos. Esto emula el comportamiento de Haxl, permitiendo la ejecución concurrente de las consultas.
El artículo también presenta una demostración práctica utilizando fuentes de datos falsas que simulan la recuperación de información de una base de datos. Estas fuentes de datos implementan una interfaz definida por Fetch, permitiendo la ejecución concurrente de las consultas. El código incluye logging para observar el orden de ejecución y confirmar que las consultas se están agrupando correctamente. Finalmente, el autor expresa cierta frustración con el uso de tipos con nombres de la teoría de categorías junto con el uso de operadores de flecha izquierda, sugiriendo una posible complejidad innecesaria en algunos enfoques de programación funcional.
En resumen, el artículo detalla una técnica para optimizar la concurrencia en Scala, inspirada en Haskell, que implica agrupar consultas de datos para reducir el número total de peticiones a la base de datos, utilizando la función tupled de Cats para emular el comportamiento de Haxl.
