Foros del Web » Programando para Internet » PHP »

Resultados de consultas guardados en sesión

Estas en el tema de Resultados de consultas guardados en sesión en el foro de PHP en Foros del Web. Hola. Estoy preparando un sistema de consultas a la base de datos que evite realizar consultas repetidas en una misma carga de página. Entonces, tengo ...
  #1 (permalink)  
Antiguo 08/01/2009, 11:57
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años
Puntos: 2
Resultados de consultas guardados en sesión

Hola.

Estoy preparando un sistema de consultas a la base de datos que evite realizar consultas repetidas en una misma carga de página.

Entonces, tengo una función que se encarga de enviar los sql a la base de datos. Esta función, como podéis ver abajo, comprueba antes de enviarla que no se haya guardado anteriormente esa misma consulta. En caso de que ya se ahya guardado la recupera de la sesión, en caso cotnrario, la envía a Mysql y la guarda en sesión.

Todo funciona correctamente, y la función se recorre de la manera adecuada, llendo por el "if" la primera vez que ejecuta dicha consulta y llendo por el "else" la siguientes veces que intenta cargar esa consulta. El problema es que al obtener contenido de la sesión, este no es correcto, y no soy capaz de obtener los resultados.

La función es la siguiente:

Código php:
Ver original
  1. function Consulta($sql){
  2.         if ($_SESSION["bmt_Consultas"][$sql]==null){
  3.             if (! $res=mysql_db_query("base_de_datos", $sql)){
  4.                 echo mysql_error();
  5.                 exit;
  6.             }
  7.             $_SESSION["bmt_Consultas"][$sql]=$res;
  8.         }
  9.         else{
  10.             $res=$_SESSION["bmt_Consultas"][$sql];
  11.         }
  12.         return $res;
  13.     }

Además de avisarme si alguien detecta algún error en la función me gustaría si es posible que me comentarais las alternativas a este sistema, si conocéis alguna forma mejor de acerlo, o si no es posible realizarlo de esta forma.

Gracias. Un saludo.
  #2 (permalink)  
Antiguo 08/01/2009, 12:18
 
Fecha de Ingreso: julio-2008
Mensajes: 40
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Resultados de consultas guardados en sesión

Para eso que quieres, los servidores mysql usan un sistema de cache interno automático. Este caché no es muy efectivo si la tabla en cuestión está constantemente siendo actualizada.

Lo que haces con sesiones no es buena idea. Engordas los ficheros de sesiones en el servidor y si tienes una particion de 100M para el directorio /tmp vas a terminar llenándolo y fastidiando el servidor ;)

Además, en algunos casos es más rapido un acceso a base de datos, que un acceso a disco. Es decir, en algunos casos no es necesario ni acceso a disco por el cache en memoria de la consulta en cuestión.
  #3 (permalink)  
Antiguo 08/01/2009, 12:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Resultados de consultas guardados en sesión

Hola paloto,

Los resources (como el resultado de mysql_query) no se pueden guardar en una variable de sesion, si quieres guardar el resultado vas a tener que guardar el resultado pero de toda la consulta como un arreglo.

Saludos.
  #4 (permalink)  
Antiguo 08/01/2009, 17:03
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años
Puntos: 2
Respuesta: Resultados de consultas guardados en sesión

Gracias por las respuestas.

Entonces, GatorV, ¿es adecuado guardar el arreglo en una variable de sesión, o como dice kronenmix, no es recomendable pues se llena demasiado, y la base de datos ya tiene caché propia?

Espero vuestros consejos :)

Un saludo y gracias
  #5 (permalink)  
Antiguo 08/01/2009, 20:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Resultados de consultas guardados en sesión

Exacto, es mejor si te preocupa tanto la velocidad que hagas la consulta y la guardes en una tabla en la bdd del tipo Memory y ahi puedes leerlo de forma mas rapida.

Saludos
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 06:54.