Sigo con el asunto de implementar un posible sistema de caché en Gesbit. Está resultando de lo más interesante, en particular, porque, si no me equivoco, este es el típico caso en que no se puede lograr, es imposible conseguir una solución cien por cien perfecta, si es que podemos asumir que en algunas tareas, sí que podemos lograr cierta perfección. Pues bien, con este asunto del caché de contenido, hasta dondo estoy viendo, y hasta donde estoy llegando, no se puede sino llegar a una especie de "acuerdo" entre lo que se puede hacer y lo que no se puede hacer.
No digo que otra persona no viera más allá que yo, estoy seguro de que así será, pero, en lo que a mí respecta, estoy empezando a asumir que el sistema de caché no será perfecto, pero, por lo menos, servirá en bastantes ocasiones. Creo que es bastante resumir todo este misterio en una pregunta: ¿Qué ocurre cuando se borra una entrada de una bitácora? La respuesta obvia es: habrá que borrar esa entrada del caché de contenidos. Lo imperfecto llega cuando a la pregunta anterior se suma la siguiente, ¿y qué pasa con las páginas que pueden seguir mostrando esa entrada después incluso de borrarla?
Dicho de otro modo, por si no se me ha entendido, Gesbit puede "servir" una página correspondiente a cierta etiqueta X. Dicha página mostrará la entrada Y, porque la entrada Y se guarda bajo la misma etiqueta X. Así que guardamos en el caché la página de la etiqueta X, pero, luego borramos la entrada Y... ¿qué hay de la página de la etiqueta X que guardamos en el caché? Porque esta contendrá la entrada Y, pero, esta entrada ya ha sido borrada de la bitácora. Ahora bien, téngase en cuenta que hablamos de etiquetas, pero, igual podríamos hablar de categorías, porque ocurre el mismo caso.
Y también de las búsquedas, del archivo por fechas, de los RSS, etc., etc. Todo está relacionado. Si se borra una etiqueta, por ejemplo, y no se borra la entrada que contiene esa etiqueta, el caché de la página que muestra la entrada, mostrará la etiqueta, que ya no existe. Y este asunto no tiene fácil solución. No tiene, de hecho, una solución. Porque podríamos intentar ser tajantes y razonar: "Si se actualiza una entrada, etiqueta, categoría, autor, lo que sea... se borra todo el contenido del caché.". Efectivamente, así acabaríamos de golpe con los problemas, pero, ¿para que serviría un caché que se borraría entero cada vez que alguien añada un comentario a la bitácora, por ejemplo?
Aún así, se podría decir: "Todavía serviría el caché, porque, aunque fuera durante el tiempo en que "nada cambia" en la bitácora, se estaría utilizando el caché.". Y es cierto. Pero, si no queremos ser tajantes, si no queremos tomar una decisión como esta, entonces tendremos que llegar a un acuerdo, asumir ciertos "costes", y guardarnos las espaldas. ¿Cómo haremos todo esto? Pues, por ejemplo, cuando se borra una etiqueta, podemos borrar las páginas correspondientes a esa etiqueta, pero, no borrar todo lo demás. "¿Cömo? Pero, si hacemos esto, sería posible que una entrada se mostrase desde el caché de contenido, y mostrase que se guarda bajo una etiqueta, que, en realidad, ya no existe.".
Así es. Pero, ¿qué se puede hacer? Es un costo que hay que medir, hay que ver hasta qué punto es asumible que algo así ocurra, y si merece la pena que algo así pueda ocurrir, con el fin de mantener en el caché el máximo contenido posible. Ahora bien, al final tendremos guardadas las espaldas. ¿De qué manera? Porque el caché de contenido tiene una tiempo de expiración. Es decir, el contenido guardado en el caché es borrado del mismo una vez excedido el tiempo máximo de expiración. ¿Cuál es este tiempo máximo? Podría ser una hora, dos horas, tres horas... Pero no podría ser mucho más tiempo, y hasta es posible que la cifra dependa del "tráfico" de una determinada bitácora.
Por ejemplo, en una bitácora que se actualizara a menudo, el caché podría terminar con demasiado contenido obsoleto, si el tiempo de expiración es demasiado grande. El tiempo de expiración, por decirlo así, es una especie de salvaguarda, que, por ejemplo, cada hora, asegura que el caché se renueva completamente. Y, en fin, en estas estoy. Viendo qué borrar y qué no borrar en según qué situaciones. Por lo demás todo parece funcionar razonablemente bien: el contenido, cuando se sirve desde el caché, no ha necesitado previamente de consulta SQL alguna a la base de datos. Seguiré dándole vueltas al asunto y veremos en qué queda.
Si a alguno de vosotros, lectores pocos, y menos comentadores, de esta bitácora, se os ocurre alguna idea o sugerencia relacionada con todo esto de que vengo hablando, huelga decir que esta será bienvenida y agradecida como se debe. :P
Publicada el Viernes, 27/6/2008 por David Esperalta
Suscribirse a esta entrada - URL para Trackbacks
Pues me dió gueva leer todo el texto jajajajaja, que debemos hacer para ayudarte con el debugin?
Hola poliburro. ;) Pues, en realidad cualquier comentario, crítica o sugerencia es bienvenido. Incluso saber que hay alguien ahí ya es bienvenido, no te digo más. ¡Gracias! ;)