Wednesday, April 25, 2012

SQLite como cache de Oracle


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.

Thursday, April 12, 2012

Sobre chipas y la nube de Google


Mi nombre es Lucas y soy parte del equipo de desarrolladores de Roshka.
A modo de fortalecer los vínculos sociales, una costumbre convertida en tradición dentro del círculo de programadores de la empresa, es hacer pedidos de chipa los días viernes.
Papel y lápiz en mano, la persona encargada de organizar las ordenes de chipa del día recorría todas las oficinas recolectando pedidos. Concluida esa primera fase del proceso, el organizador del pedido se dirigía a la chiperia para hacer las compras.
El sistema, si bien altamente efectivo, carecía del “factor ornamental” que idealmente debiera regir todo orden de eventos dentro una empresa informática: la sistematización del procedimiento.
Concernido por este hecho, poco más de cinco meses atrás me propuse el objetivo de desarrollar una aplicación web para automatizar el antaño procedimiento de pedidos de chipa como pretexto para iniciarme en el aprendizaje de Python y la incursión en una tecnología que viene acrecentando su peso en el presente de la futura vanguardia informática: el cloud computing.
Chipas-inthecloud (chipas-inthecloud.appspot.com) es el resultado de la combinación de ambos factores. Hosteado en la nube de servidores de Google, el sistema fue desarrollado íntegramente en Python mediante el servicio PaaS Google App Engine.
Una resumida referencia a las características, ventajas y restricciones del servicio puede encontrarse en el siguiente recurso:
A mi criterio, lo más rescatable del App Engine es el alto nivel de abstracción ofrecido respecto a factores no siempre ágilmente implementables como ser la interacción con las cuestiones relacionados a la infraestructura y el manejo de los servicios y tecnologías propias de la plataforma de hospedaje, permitiendo al programador enfocarse puramente en la lógica de negocios y el subsecuente desarrollo del sistema.
El manejo de persistencia de la aplicación se concretó a través del API de almacenamiento de datos NoSQL provisto por el entorno de desarrollo del App Engine. Los reportes fueron construidos mediante una librería Python para la generación programática de documentos PDF, llamada Reportlab. Chipas-inthecloud hace uso de los servicios de autenticación, envío de mails y mensajes XMPP nativos del AppEngine. Una actividad cron que se ejecuta cada minuto controla el tiempo de expiración de los pedidos, para enviar automáticamente las notificaciones correspondientes a los usuarios que participaron del mismo.
Captura de chipas-inthecloud corriendo en el localhost y no en la nube



Lejos aún de dominar Python y sin poder apreciarme el merito de haber escrito un sistema libre de potenciales fallas, puedo concluir que la experiencia de desarrollo fue muy gratificante. La documentación existente del AppEngine facilita un proceso de formación muy ágil. La puesta en producción de una aplicación escrita desde cero admite estándares de relación tiempo/esfuerzo imponderables. GAE es una de las mejores ofertas existentes en el mercado para todos aquellos con deseos de incursionar en el desarrollo de aplicaciones web en la nube.