viernes, 11 de noviembre de 2005

Fast Lane Writer Pattern


Contexto.
En las aplicaciones J2EE donde la persistencia es manejada mediante Enterprise JavaBeans de Entidad, mas presisamente utilizando CMP, las actualizaciones (DMLs) de una gran cantidad de datos puede volverse poco eficiente dada la naturaleza de los entity beans.

Problema.
Todos conocemos el patrón Fast Lane Reader (1) que propone un mecanismo para obtener grandes cantidades de información utilizando un acceso directo sobre la base de datos en lugar de trabajarlos con Entity Beans.
Sin embargo se nos planteo el problema de tener que realizar una gran actualización/inserción de información en la base de datos. El problema concreto era por cada registro habia que realizar una actualización campos y una inserción de un registro en otra tabla relacionada. En principio lo trabajamos utilizando los CMP (en Bea Weblogic 8.1) y realizando un poco de tunning (enable-batch-operations = True, concurrency-strategy = Optimistic, etc) pensamos que podria funciona bien, pero al momento de realizar las pruebas con grandes cantidades de datos nos encontramos con que el método no era el mas eficiente (teniamos que, para cada bean actualizarle el atributo y settear la relación) con lo cual los tiempos se fueron un poco de lo esperado.

Solución.
Usamos una modificación de Fast Lane Reader (bautizado Fast Lane Writer) aplicado a la actualización masiva de información en la base de datos y ejecutando DML directamente sobre JDBC o invocando un Stored Procedure, se mejoraron los tiempo en un 500% aproximandamente.
Una de las desventajas de este utilizar esto es la des-sincronización entre las caches (del appserver) y la BD, pero utilizando mecanismos de invalidacion de caches (en el caso nuestro, con weblogic no tuvimos problema) se puede solucionar facilmente.
Otro tema a tener en cuenta es como ejecutarlas sentencias DML que en nuestro caso tuvimos la posibilidad de hacerlo a traves de inserts masivos ( insert / select ... ).

Conclusion.
Con la aplicación de este patrón obtuvimos una mejora importante en la performance del proceso mejorando los tiempos de respuestas y una mejor administración de los recursos, sin tener grandes problemas.

Referencias.
- http://java.sun.com/blueprints/patterns/FastLaneReader.html
- http://java.sun.com/developer/technicalArticles/J2EE/J2EEpatterns/



No hay comentarios:

Publicar un comentario