2009-09-07 9 views
7

¿Es "mejor" (más eficiente, más rápido, más seguro, etc.) a (A) los datos de caché que se utilizan en cada carga de página en la matriz $ _SESSION (pero sigue consultando una tabla para que una bandera vuelva a cargar los datos), o (B) para cargarlo de la base de datos cada vez?Datos de caché en PHP SESSION, o consulta de db cada vez?

Estoy usando el método de caché (A), pero me preocupa que con cientos de usuarios, la memoria podría convertirse en un problema? Son solo datos simples, como nombre, apellido, fecha de nacimiento, etc.

Con cualquiera de los métodos, aún se está ejecutando una consulta. ¿Pensamientos?

+0

Tenga en cuenta que $ _Session no está en la memoria. Está en el disco por defecto. Por supuesto, podría usar un almacenamiento respaldado por la base de datos para su variable de sesión. – ryeguy

+0

¡ah sí!muchas gracias por el recordatorio! – Andrew

Respuesta

6

Si sus datos se utilizan en todas las páginas, y es igual para todos los usuarios, no lo almacenaría en $ _SESSION (lo que significa que tendría una copia diferente de esos datos para cada usuario), pero con otro mecanismo, como:

  • archivo
  • En la memoria, la APC por ejemplo (aunque sólo 1 servidor)
  • en la memoria, con memcached, por ejemplo (si tiene varios servidores)
  • Si los datos requieren largos cálculos o varias consultas DB que se obtendrán, el almacenamiento en caché en la base de datos podría ser una otra posibilidad (significaría sólo el 1 consulta para traer de vuelta, y menos cálculos)


Si los datos no es el mismo para cada usuario (que parece ser el caso en su situación, ya que usa la cache nombres, fechas de nacimiento, ...):

  • me aseguraría de que sólo caché lo que es necesario
  • una vez que sólo tiene unos pocos datos en la caché, poniéndolo en la sesión debe ser muy bien
  • Si tu Si tienes tantos usuarios, probablemente tengas otros problemas de escalabilidad y es probable que utilices algo como memcached; lo que significa que tendrá alguna otra forma de almacenamiento en caché ;-)

Como nota al margen: si usted está haciendo la misma consulta una y otra vez, que el servidor DB debe almacenar en caché por sí mismo (para MySQL, sería entre en "query cache"); por lo tanto, supongo que no sería tan malo como cree, incluso si no está muy optimizado ^^

1

Depende de lo que sea que esté manejando la sesión. Su manejador de sesión podría ser MySQL, y por lo tanto, la pregunta no sería cuál es mejor, sino cómo optimizar el manejo de la sesión.

El controlador predeterminado de la sesión PHP son los archivos, pero se puede cambiar a mysql con bastante facilidad.

Si está hablando de datos no específicos del usuario, simplemente guárdelos en la base de datos. Preocuparse por la optimización si se encuentra con problemas más adelante. Por lo general, es mucho más beneficioso utilizar un mejor patrón de diseño y luego pensar en optimizarlo de antemano. Diseñe su código para que pueda usar fácilmente un controlador diferente para el almacenamiento, y no tendrá problemas de optimización más adelante.

Si es específico del usuario, use la sesión, pero use un controlador de sesión apropiado si es necesario.

Cuestiones relacionadas