Cuando aplicar cache
Hola, este es mi primer tema en estos foros, vamos a ver como nos va.
Resulta que mientras desarrollaba una aplicación web leí por ahí sobre los caches de objetos, en especial sobre ehcache y la posibilidad de integrarlo con Spring 3.1, que es el framework sobre el cual estoy trabajando, me interesó bastante el tema, ya que siempre me ha parecido una funcionalidad bastante obvia en el contexto de la POO. Sin embargo luego me di cuenta que aparte de que un cache debe mejorar le eficiencia de una aplicación, también la hace más compleja, me refiero a su mantenimiento, sobretodo si también está el tema de la concurrencia. Por lo anterior me surgieron varias preguntas:
¿Cuando es necesario aplicar un cache a una aplicación?, es decir, si se hacen consultas a una base de datos de 1000 o 2000 registros mapeados luego a sus respectivos objetos, es necesario? o estoy subestimando la capacidad de los sistemas gestores de bases de datos actuales.
¿Los caches solo son buenos cuando los objetos son inmutables? porque de otra manera ¿como garantizar la integridad del objeto en un contexto de concurrencia?. Por ejemplo, si la llamada a un método me devuelve un objeto proveniente del cache, y otros usuarios obtienen la misma instancia de este, y luego lo modifico, ¿los demás usuarios poseen ahora un objeto con los valores de sus propiedades modificadas incluso sin que estos cambios se hallan hecho persistentes en la base de datos?, y si estos sistemas de cache no devuelven la misma instancia a cada usuario sino que crean una copia o clon de este para cada uno, ¿no se estaría perdiendo el rendimiento ganado teniendo que clonar el objeto cada vez que un usuario lo solicite?.
Estas son solo algunas de las preguntas que me surgieron con este tema, la más básicas a la hora de considerar un sistema de cache en el desarrollo de una aplicación, espero que puedan ayudarme.
Saludos
- Inicie sesión o regístrese para enviar comentarios
Caché
Me parece que son dos puntos interesantes que se abordan en este tema. Por una parte evitarse lecturas "no necesarias" a la base de datos. y por otra parte se habla de la integridad de los registros. Hay que entender que el Caché es un espacio en donde TEMPORALMENTE se guarda información. Considero importantes dos aspectos.
Ahora tambien falta el caché distribuido...
¿Dónde de cajón NO se debe usar caché? : En un flujo transaccional.
¿Dónde SI se puede usar caché? : En consulta de catálogos o de información que no cambie en un tiempo considerable.