Esta semana hemos tenido una situación un poco peculiar. Una aplicación Java que conecta con una base de datos iba lenta en ciertos momentos. No era un problema de CPU en el cliente ni en el servidor de base de datos, ni tampoco era un problema de disco ni de red, todo iba como siempre.
El problema
Algunos de los listados de información que Java obtenía de la base de datos vía JDBC eran grandes (del orden de MB) y la respuesta tardaba en llegar por falta de un mayor ancho de banda.
Posibles soluciones
- Reducir la información que la aplicación recogía de la base de datos.Esto tenía un par de problemas:
- Obligaba a cambiar la programación de la aplicación, cosa que no deseábamos.
- El client debía decidir cambios de funcionalidad en la aplicación para que ésta no recibiese tanta información.
- Comprimir la conexión JDBC, Intentando reducir el ancho de banda necesario.
Solución adoptada
Finalmente se ha optado por la solución 2. Parace algo impensable porqué normalmente en las empresas, que tienen el servidor en su red local, no necesitan aplicar compresión, pero el estàndard JDBC lo permite.
¿Cómo?
Tan fácil como indicar-lo en el momento de crear la conexión, formando la URL de conexión de la siguiente forma:
connectionUrl = «jdbc:mysql:///?useCompresion=true»;
Así, hemos conseguido una compresión de más del 80%.
Atención
Si el ancho de banda no es para ti un problema no deberías aplicar la compresión, porqué posiblemente comprimir y descomprimir sea más lento. De todas formas puedes hacer la prueba, es fácil.