Foros del Web » Programación para mayores de 30 ;) » Java »

Utilizar cache

Estas en el tema de Utilizar cache en el foro de Java en Foros del Web. Bueno, según mi idea, una de las formas de optimizar el rendimiento del sistema es el uso de cache. Estoy desarrollando una aplicación de la ...
  #1 (permalink)  
Antiguo 09/12/2008, 15:41
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Utilizar cache

Bueno, según mi idea, una de las formas de optimizar el rendimiento del sistema es el uso de cache. Estoy desarrollando una aplicación de la siguiente forma:

Inicio Servlet.
------------------------------------
Class conexion{
Retorna el cursor de conexión.
}
Class vector{
Carga información de tablas auxiliares(Ej: tabla países).
vector paises[]{...}
}
--------------------------------------
Fin servlet.

Como puedo compartir mi variable de conexión, y mi variable vector por toda mi aplicación o en todos mis modulos, los cuales son JSP.
  #2 (permalink)  
Antiguo 10/12/2008, 14:33
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Utilizar cache

Pues si quieres guardar tus variables guardalas en un HttpSession.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #3 (permalink)  
Antiguo 10/12/2008, 15:04
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Utilizar cache

Nuevamente stone_neo, gracias por responder...en cuento ha vanessita se que si podrá en 5 días.

Resulta que no es la información de session.

Es información de la base de datos que rara vez se actualiza(por no decir nunca...por ejemplo cada cuanto se adiciona un nuevo país a la tabla países, o una nueva ciudad), mi idea es cargarla en un vector o matriz, y luego cada vez que los usuarios la soliciten, recuperarla desde este vector, mas no de la base de datos...

Eso realmente creo que agiliza el proceso de recuperación de la base de datos ya que cada formulario tiene muchos combos, y cada combo es una tabla, lo que implica una nueva consulta por combo.

El problema, no conozco una buena técnica, o mejor dicho... como lo implementarían los profesionales, o lo habitual?

Última edición por SPAWN3000; 11/12/2008 a las 11:04
  #4 (permalink)  
Antiguo 10/12/2008, 15:11
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Utilizar cache

Por eso te digo, por ejemplo tenemos una lista de paises, lo guardas en session, ya cuando lo necesites lo sacas de session y lo usas:


ejemplo


Código:
DPais dPais = new DPais();
LPais lPais = new LPais();

dPais.listarPaises(lPais, connection);

session.setAttribute("LPais", lPais);

Para recuperarlo:

Código:
LPais lPais = (LPais)session.getAttribute("LPais");
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #5 (permalink)  
Antiguo 10/12/2008, 15:28
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Utilizar cache

Y no es mejor almacenarlo con la carga del Servlet?

Digamos:

Se carga el servlet.
- Carga el cursor de conexión como var publica para ser usado en toda la BD.
- Carga el vector paises desde la base de datos como una var. publica.
- Carga el vector ciudades...
- Carga...

Cuando un usuario accede a uno de los formularios de ingreso o alimentación del sistema, La información que el selecciona en los combos del form no se alimenta desde la base de datos, si no desde los vectores inicializados en el Servlet.

Se debe tener en cuenta que es mucha información, y que nada debe perderse... así, en caso de que un arreglo no este cargado se llama nuevamente a la base de datos solo para cargar ese arreglo...

Tu que opinas? No se si es que estamos hablando de lo mismo...

Última edición por SPAWN3000; 10/12/2008 a las 15:46
  #6 (permalink)  
Antiguo 10/12/2008, 16:08
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Utilizar cache

mmmmmmmmmm no es lo que te estoy diciendo solo cargas una vez los valores, lo guardas en sesion y lo usas desde cualquier parte.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #7 (permalink)  
Antiguo 10/12/2008, 16:12
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Utilizar cache

Bueno si, aunque mi duda real es: Si es una buena practica?, o existe algo mejor, otro método mas optimo(rápido)... realmente necesito mejorar el rendimiento de mi sistema, disminuir los tiempos de recuperacion.

Existe algo mas, o conoces de otras formas de optimizar el trabajo de un sistema web.

Por cierto, por si interesan estos link de libros:
http://www.taringa.net/posts/ebooks-tutoriales/1363858/Desarrollo-Web-y-Java.html

http://www.taringa.net/posts/ebooks-tutoriales/1225578/Libros-de-JBoss-Seam.html
  #8 (permalink)  
Antiguo 11/12/2008, 01:09
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Utilizar cache

En realidad, si todos los servlets van a usar la misma información, el sitio adecuado para guardar esa información no es la sesión, si no el contexto (Servlet Context). El contexto puede ser accedido desde cualquier servlet o filtro, asi que en un ContextListener se pueden inicializar esas listas cuando arranca la aplicacion y luego todos los servlets o JPS que necesiten esa información la tienen ahí.

De todas formas, si vas a hacer un uso extensivo de esa tecnica, hay cosas que tendras que tener en cuenta como cuando caducar la caches, si hace falta, por que una aplicacion web podria tirarse semanas sin reiniciarse, que si consumen demasiada memoria no te tiren el servidor para abajo etc. etc. Por eso hay implementaciones de "caches" ya hechas que tienen estas cosas ya pensadas, como por ejemplo OSCache: http://www.opensymphony.com/oscache/

De todas formas, si es por aprender puedes ir haciendo cosas tu, pero a medidad que se complica el diseño, acabas con algo como la librería esta, así que usarlas hechas no es mala elección.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #9 (permalink)  
Antiguo 11/12/2008, 08:39
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Utilizar cache

Concuerdo contigo GreenEyed, en el sistema que doy mantenimiento por ejemplo se guarda el pool de conexiones en el contexto del Servlet, pero como dice Spaw si lo que el quiere es información para llenar los combos de sus formularios, no seria mejor que lo guarde en sesion?, Que pasa si el administrador del sistema agrega mas datos en la tabla que es la que llena los formularios, no seria mejor que esa información se volviera a cargar cada vez que el usuario ingrese al sistema y que este se guarde en session.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #10 (permalink)  
Antiguo 11/12/2008, 09:51
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Utilizar cache

Vale gracias por responder(Investigare un poco cada concepto y comento que decidí)

ya puedo vislumbrar nuevas posibilidades en base a sus respuestas.

En si, seria muy útil o lo ideal, un lugar de almacenamiento que se carga al iniciar la aplicación, y no cada vez que un usuario ingresa, ...lugar, al cual solo cuando el administrador de la orden(desde un sistema paralelo) se refresque esta información.
Y naturalmente, no es informacion extremadamente grande...
como por ejemplo(combos):

Posibles Comos:
La lista de departamentos, ciudades, capitales... son datos que casi nunca cambian. O cada cuanto se agrega una ciudad a un país?. La idea es evitar, que cada usuario que ingrese en el momento de abrir un formulario de inserción, no efectué una consulta a mi BD, solo lo cargue desde mi vector en memoria y listo!

Mas o menos esta es mi idea(Pero aun tengo dudas sobre dejarlo en mi Servlet, por la cuestión de el muy raro caso en que se actualice esta info; detectarlo mediante un Trigger, activar el procedimiento de actualizacion y enviar la orden de recargar el Servlet?)... No se, es complicado para mi que soy novato...
  #11 (permalink)  
Antiguo 11/12/2008, 10:12
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Utilizar cache

Una breve lectura, y un paso fugaz sobre un ejemplo...y definitivamente OSCache.

Mil gracias! Espero hasta aquí llegua todo esto sobre cache... realmente lo saque, por que es una practica muy común en PHP y muy fácil de implementar en este lenguaje, se que un símil de esto es Hibernate, que facilita todo... pero nada como hacer todo a mano, con claridad y tener tus propias herramientas.

Nuevamente gracias, ya posteare mis adelantos, y mis nuevos inconvenientes si no es ya una potencial molestia...

Un saludo a stone_neo y GreenEyed, realmente mis respetos. Lastima no poder invitarles unas frías!

Me tope con esto:
http://www.adictosaltrabajo.com/tuto...a=cacheobjetos

Y también con esto(y nuevas dudas sobre cual es mejor, pero eso es parte de mi trabajo...Probar):

http://blog.taragana.com/index.php/a...e-products/es/

Última edición por SPAWN3000; 11/12/2008 a las 11:07
  #12 (permalink)  
Antiguo 11/12/2008, 10:53
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Utilizar cache

Cita:
Iniciado por GreenEyed Ver Mensaje
En realidad, si todos los servlets van a usar la misma información, el sitio adecuado para guardar esa información no es la sesión, si no el contexto (Servlet Context). El contexto puede ser accedido desde cualquier servlet o filtro, asi que en un ContextListener se pueden inicializar esas listas cuando arranca la aplicacion y luego todos los servlets o JPS que necesiten esa información la tienen ahí.

De todas formas, si vas a hacer un uso extensivo de esa tecnica, hay cosas que tendras que tener en cuenta como cuando caducar la caches, si hace falta, por que una aplicacion web podria tirarse semanas sin reiniciarse, que si consumen demasiada memoria no te tiren el servidor para abajo etc. etc. Por eso hay implementaciones de "caches" ya hechas que tienen estas cosas ya pensadas, como por ejemplo OSCache: http://www.opensymphony.com/oscache/

De todas formas, si es por aprender puedes ir haciendo cosas tu, pero a medidad que se complica el diseño, acabas con algo como la librería esta, así que usarlas hechas no es mala elección.

S!
Por cierto, note esto es Javahispano: http://www.javahispano.org/forum/j2ee/es/datos_en_session_contra_acceso_a_la_b_d_/
  #13 (permalink)  
Antiguo 11/12/2008, 11:18
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Utilizar cache

Cita:
Iniciado por stone_neo Ver Mensaje
Concuerdo contigo GreenEyed, en el sistema que doy mantenimiento por ejemplo se guarda el pool de conexiones en el contexto del Servlet, pero como dice Spaw si lo que el quiere es información para llenar los combos de sus formularios, no seria mejor que lo guarde en sesion?, Que pasa si el administrador del sistema agrega mas datos en la tabla que es la que llena los formularios, no seria mejor que esa información se volviera a cargar cada vez que el usuario ingrese al sistema y que este se guarde en session.
Si tienes 300 usuarios activos, tendrías 300 veces la misma lista en memoria y para algo que apenas cambia. Además, si hicieras una actualización, tendrías que modificar 300 listas o si no todos los que ya tienen esas listas las tendrian sin actualizar.

Lo más efectivo, creo yo, es tener una sola copia y configurar un buen mecanismo de actualización para que cuando haya una modificación, se actualice.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #14 (permalink)  
Antiguo 11/12/2008, 11:55
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Utilizar cache

Cita:
Iniciado por GreenEyed Ver Mensaje
Si tienes 300 usuarios activos, tendrías 300 veces la misma lista en memoria y para algo que apenas cambia. Además, si hicieras una actualización, tendrías que modificar 300 listas o si no todos los que ya tienen esas listas las tendrian sin actualizar.

Lo más efectivo, creo yo, es tener una sola copia y configurar un buen mecanismo de actualización para que cuando haya una modificación, se actualice.

S!
Exacto!, únicamente la que esta cargada en el servidor como un vector... y que si existe un cambio solo se actualiza este vector desde la BD... Luego cada usuario alimenta su modulo de forma constante desde este vector.

Esta creo que es la logica.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:37.