No hace mucho, trabajando en un proyecto para una empresa, tuvimos un problema de performance con el tiempo de respuesta al momento de realizar queries sobre la base de datos Oracle. Luego de varias mediciones del tiempo de respuesta y estadísticas sobre queries que mayor tiempo de respuesta consumían y no consiguiendo mejorar ostensiblemente con la optimización de los queries, decidimos, a sugerencia del gurú Pablo “Calé” Santa Cruz, investigar y llevar a la práctica la utilización de SQLite como cache de datos. De aquí en adelante hablaremos de que se hizo y como se hizo para lograr la optimización, especialmente cuando se trata con volúmenes interesantes de datos.
Para la implementación de esta mejora recurrimos a un driver jdbc nativo de java para SQLite y la versión que utilizamos es sqlitejdbc-v056.jar.
Antes del inicio del proceso, primeramente realizamos un volcado completo de los datos de la tabla en donde los queries arrojaban tiempos moderadamente altos, a nuestra base de datos SQLite que actuará de cache, y que al tratarse de consultas iterativas, representaban un tiempo total considerablemente costoso en todo el proceso. Es importante destacar en este punto que la replicación de los datos se realizó en un tiempo bastante menor del que esperábamos para sorpresa nuestra, primera buena impresión.
Ya con los datos enteramente replicados en una tabla temporal de nuestra base de datos SQLite nos detuvimos a medir los tiempos de respuesta de los queries sobre nuestro cache y arrojaron resultados sorprendentes, por cada proceso iterativo, hemos ahorrado aprox. 86% del tiempo de respuesta o lo que equivale a 1/6 del tiempo de procesamiento cuando la consulta se realizaba puramente sobre la base de datos Oracle.
En conclusión, cuando se trata de manejar volúmenes grandes de datos y el tiempo de respuesta de la base de datos es crítico en procesos iterativos y por sobre todo elevado, es conveniente recurrir a este tipo de implementación que nos permita mejorar ostensiblemente el tiempo de procesamiento.