Foros del Web » Programando para Internet » PHP »

Caché de consultas MySQL

Estas en el tema de Caché de consultas MySQL en el foro de PHP en Foros del Web. Estoy implementando un caché que cachea php en Smarty (en lugar de cachear html como hace por defecto) pero aún así el rendimiento del script ...
  #1 (permalink)  
Antiguo 02/12/2010, 08:33
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Información Caché de consultas MySQL

Estoy implementando un caché que cachea php en Smarty (en lugar de cachear html como hace por defecto) pero aún así el rendimiento del script es más lento que sin el uso de Smarty (por tiempo de compilación de los templates, etc), así que se me ocurrió cachear las querys hechas a la BD.

Que el archivo fuese sql_ y el md5 de la consulta y a partir de ahí leer el array serializado y mostrarlo en lugar de hacer consultas, luego borrar ese archivo cada X segundos (pocos, claro está). Claro, esto ocupará espacio en el servidor y recursos al estar constantemente creando y borrando archivos. Hablo de una web de con bastantes visitas diarias.

La pregunta es ¿merece la pena cachear las consultas así o es más lento abrir archivo, leer archivo, unserialize() los datos y mostrarlos?

Supongo que con querys pesadas algo más de performance si hay, pero claro, lo difícil es hacer un sistema que solo guarde las pesadas y las ligeras no.
  #2 (permalink)  
Antiguo 02/12/2010, 12:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Caché de consultas MySQL

de hecho es recomendable hacerlo, personalmente prefiero el uso de var_export() cuando se trata de solo arreglos...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 02/12/2010, 14:39
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Caché de consultas MySQL

Pero var_export() sigue dejando el array como array (según vi en la doc de php).

Código PHP:
Ver original
  1. <?php
  2. $a = array (1, 2, array ("a", "b", "c"));
  3. ?>

Lo que muestra:
Código PHP:
Ver original
  1.   0 => 1,
  2.   1 => 2,
  3.   2 =>
  4.   array (
  5.     0 => 'a',
  6.     1 => 'b',
  7.     2 => 'c',
  8.   ),
  9. )
  #4 (permalink)  
Antiguo 02/12/2010, 14:43
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Caché de consultas MySQL

mi pregunta es.. si vas a cachear las consultas.. los resultados en html siempre serán los mismos (mientras dure el cache) entonces.. pq no solo cachear el HTML ? no seria mas factible esa opción ?
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 02/12/2010, 14:49
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Caché de consultas MySQL

Porque no es siempre la misma consulta, por ejemplo en la parte de los foros donde cada post tiene una consulta diferente. Precisamente por ese motivo he tenido que modificar la función de caché por default que trae smarty, porque solo me cacheaba el html tal y como quedaba.
  #6 (permalink)  
Antiguo 02/12/2010, 15:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Caché de consultas MySQL

de hecho, el cache ayuda cuando se trata de la misma consulta!!

así las veces consecutivas se emplean los mismos datos pues no han sido modificados en la base de datos...

Hidek1, no es muy factible cachear el html, ya que la idea es cachear solo los datos... imagina que de pronto cambio el theme de mi sitio y el cache sigue activo...

¿te suena coherente?

yo creo que se trata de brindar mas flexibilidad a nuestros datos, y sobre todo a nuestras aplicaciones... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 02/12/2010, 15:29
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Caché de consultas MySQL

Lo ideal claramente sería algo que detectase si la query ha cambiado respecto la última vez, pero claro, no creo que eso sea posible o al menos no se me ocurre manera.
  #8 (permalink)  
Antiguo 02/12/2010, 15:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Caché de consultas MySQL

Cita:
Iniciado por TheRD Ver Mensaje
Lo ideal claramente sería algo que detectase si la query ha cambiado respecto la última vez, pero claro, no creo que eso sea posible o al menos no se me ocurre manera.
de hecho es muy simple, una técnica sencilla sería usar como nombre del archivo de cache el md5() de la misma consulta...

¡una consulta distinta por cada archivo!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 02/12/2010, 15:37
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Caché de consultas MySQL

Sí, eso ya pensaba hacerlo xD. sql_ + md5(consulta) + .php
Me refiero a que detecte si ha cambiado esa query, si lo ha hecho borra caché, carga query y cache, sino, la mantiene indefinidamente hasta que cambie.
  #10 (permalink)  
Antiguo 02/12/2010, 15:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Caché de consultas MySQL

sigo sin entender...

hasta donde yo lo veo una consulta distinta siempre crearía un archivo de cache nuevo, y ese seria utilizado... el usar la consulta como nombre de dicho archivo promueve precisamente eso de recargar cache...

osea, obviamente al ser una consulta -query- distinta produce un cache distinto...

yo soy el que no entiende, ¿o eres tu?

...o quizá te refieres a los resultados de dicha consulta?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 03/12/2010, 09:21
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Caché de consultas MySQL

Sí, me refiero a si los resultados de la consulta son diferentes que los que hay cacheados, pero claro, eso implicaría ejecutar siempre dicha query y compararlas, claro, no es factible.
  #12 (permalink)  
Antiguo 03/12/2010, 13:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Caché de consultas MySQL

Cita:
Iniciado por TheRD Ver Mensaje
Sí, me refiero a si los resultados de la consulta son diferentes que los que hay cacheados, pero claro, eso implicaría ejecutar siempre dicha query y compararlas, claro, no es factible.
precisamente aquí es de donde tomamos una decisión... por lógica debes cachear únicamente los resultados que consideres que no variarán demasiado...

digamos, que un sistema de categorías no tiende a ser modificado cada cinco minutos o menos, y así con algunos otros datos...

otro caso es que por ejemplo, en nuestro backend no debemos cachear las consultas pues se trata de lidiar con datos frescos, me parece lo mas razonable...

sin embargo en el frontend, donde los datos tienden a ser los mismos la mayoría del tiempo y también tienden a ser modificados con poca regularidad, es factible memorizar dichos datos dependiendo de su naturaleza...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 03/12/2010, 13:59
Avatar de TheRD  
Fecha de Ingreso: junio-2009
Mensajes: 120
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Caché de consultas MySQL

Muchas gracias por su ayuda, ya tengo una clara idea de como voy a montar el caché :)

Etiquetas: cache, mysql, query, smarty
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 17:17.