Buenos días, en esta ocasión he decidido hablar sobre el impacto de los llamados a JPA dentro de iteraciones en el performance de una API REST
Particularmente los llamados a través de JPA hacia la base de datos son de uso común en Java, pero un error también común que aveces no podemos evitar cometer es el de repetir un llamado dentro de una iteración, si bien esto nos permite manipular mucha data rapidamente, lo "rápido" en realidad es mentira, un llamado dentro de un ciclo puede incrementar el tiempo de respuesta en mas de 60 segundos
Para solucionar esto se aconseja utilizar métodos que puedan manipular listas, arreglos o colecciones de elementos en lugar de utilizar elementos unitarios, esto puede aplicar en muchos casos y la ventaja es que un método que se utiliza para muchos, también se puede utilizar para uno.
Aún cuando no parece mucha la diferencia, es mucho mas rápido para JPA ejecutar :
SELECT bar FROM foo bar WHERE bar.id IN (1, 2, 3, 4, 5, 6, 7, 8, 9)
que ejecutar:
SELECT bar FROM foo bar WHERE bar.id = 1;
SELECT bar FROM foo bar WHERE bar.id = 2;
SELECT bar FROM foo bar WHERE bar.id = 3;
SELECT bar FROM foo bar WHERE bar.id = 4;
SELECT bar FROM foo bar WHERE bar.id = 5;
Mi trabajo como desarrollador de backend para REST API's, me ha llevado múltiples veces a través de esta práctica, aún cuando parece que es difícil disminuir el tiempo de respuesta de una método, un gran % de las veces es a causa de esto.
Por el momento me despido pero en la próxima ocasión estaré tratando el tema de los métodos http y como es el uso ideal de estos con respecto a la acción que se va a tomar y los datos que se van a enviar.