2010-03-08 22 views
5

Estoy ejecutando una aplicación web que permite que un usuario inicie sesión. El usuario puede agregar/eliminar contenido en su "biblioteca" que se muestra en una página llamada "library.php". En lugar de consultar la base de datos para los contenidos de la biblioteca de los usuarios cada vez que cargan "library.php", quiero almacenarlo globalmente para PHP cuando el usuario inicia sesión, de modo que la consulta solo se ejecute una vez. ¿Hay una mejor práctica para hacer esto? fx. almacenar su biblioteca en una matriz en una sesión?¿La mejor práctica para almacenar datos globales en PHP?

Gracias por su tiempo

+0

"Globalmente" generalmente significa "una instancia para todos". Lo que está buscando son datos de sesión por usuario. –

Respuesta

7

Si almacenar la biblioteca de cada usuario en un $_SESSION como una matriz, como usted sugiere (que es definitivamente posible) tendrá que asegurarse de que las actualizaciones que el usuario realiza a la biblioteca se reflejan al instante a esa variable de sesión.

Honestamente, menos que haya alguna consulta seriamente pesados ​​pasando a buscar una biblioteca, o si tiene toneladas de tráfico, yo sólo se adhieren a 'ejecutar la consulta cada vez que el usuario pulsa library.php'.

+1

Otra cosa que podría ser mejor es crear un propio caché que se creará cuando el usuario inicie sesión (algo así como un sitio html estático que muestre la biblioteca) que se elimina después de un período de tiempo específico (por ejemplo, 30 minutos o si el usuario cierra la sesión) y que se actualizará si no existe o si se ha realizado alguna consulta de ACTUALIZACIÓN. – Tobias

+1

Cierto, pero a expensas de una mayor complejidad. Como primer paso, agregaría índices y un caché de consultas a las tablas de la biblioteca para maximizar el rendimiento de la consulta. – karim79

0

creo que sería lo mejor para almacenarlo en una sesión.
Es el usuario inicia sesión, la sesión se crea y se puede guardar los datos en ella mediante el superglobal:

$_SESSION['key'] = "value"; 

Puede también almacenar matrices o cualquier otro inmueble existe y que se puede borrar si el usuario cierra la sesión .

2

en cuenta el tamaño de los datos. Multiplica eso por el número máximo de usuarios simultáneos.

luego comparar que el de la memoria disponibles en el servidor. También considere si este es un servidor compartido o no; otros sitios también necesitan recursos.

Con base en lo anterior, es probable que sea mejor o bien crear un archivo que puede ser utilizado (según el comentario de Remi), o permanecer en forma sin estado predeterminado y leer cada vez. Dudo que leer los datos cada vez esté creando mucho sobrecarga.

1

Cada script PHP muere cuando se completa, por lo que los datos no se pueden mantener permanentely vivir en una aplicación web como lo haría en una aplicación de PC.

Una forma podría ser sesiones, pero depende de la cantidad de datos que desea guardar. De acuerdo con su ejemplo, usted está hablando de una biblioteca, por lo que me parece que se debe guardar una gran cantidad de datos, en tal caso, el DB es el camino a seguir, y sí tiene que consultarlo cada vez.

Otra forma podría ser guardarlos en una matriz dentro de un archivo php, pero de la misma forma en que debe consultar el DB cada vez, deberá incluir dicho archivo php cada vez.

1

Como se trata de una optimización del rendimiento db, sugeriría que usted echa un vistazo a memcached que coincide perfectamente su problema:

memcached es [..] destinados a ser utilizados en la aceleración de seguridad de aplicaciones web dinámicas por aliviando la carga de la base de datos.

0

cuida el rendimiento; Tenga en cuenta:

  • Sesión puede utilizar la base de datos o archivo para almacenar datos.
  • base de datos está aquí para ser utilizado en lugar de archivos, por su rendimiento y habilidades.

use base de datos, está diseñado para ser utilizado exactamente en tales situaciones.

Cuestiones relacionadas