2009-07-16 22 views
7

Tengo una clase que recupera su memeber (más o menos 10 miembros) de una base de datos.php: sesiones vs. base de datos

Mi pregunta es: ¿es más eficiente buscarlos cada vez desde el DB (MySQL), dejando solo un ID en la matriz de la sesión o almacenarlos directamente en la matriz de la sesión?

¿Y la diferencia en términos de rendimiento es tan grande? (dada una base de datos con 100.000 filas por ejemplo)

Respuesta

10

Teniendo en cuenta que está almacenando una ID en la sesión de todos modos, la sesión tiene más sentido. Hacer una session_start() carga la información de tu sesión, así que si has cargado 1 o 10 elementos después de eso es en gran medida irrelevante (a menos que sean realmente grandes, pero eso será un problema en cualquier caso).

Así que quédate con la sesión.

Si realmente te preocupa la velocidad, utiliza una memoria caché en memoria como APC o memcache. Preocuparse por la velocidad de 10 elementos del sistema de archivos o la base de datos es una distracción. La diferencia será tan mínima que será irrelevante.

Nota: el anterior supone dos cosas:

  1. La consulta se performant (recuperando 10 filas de cada 100k debe ser factible en menos de 0,1 segundos); y
  2. que está haciendo una consulta no 10.
7

Depende de lo que quiere decir con 'eficiente'. Uno es eficiente en el tiempo, el espacio en el disco es eficiente. Y es muy difícil juzgar a los dos uno contra el otro, a menos que sus requisitos estén en cualquier extremo del espectro. Probablemente te irá bien arrojando una moneda, midiendo el rendimiento con el tiempo y ajustándote en función de los problemas observados.

La optimización prematura es la raíz de all evil.

+0

felicitaciones por la cita;) de todos modos, mi preocupación es acerca de la velocidad. –

+1

Bueno, en última instancia, ambos provienen del disco, pero es muy probable que ambos estén en caché, uno en la base de datos, uno en el sistema operativo (o tal vez incluso el servidor web/módulo PHP, dependiendo de cómo se configuran las cosas). De esta manera, será mínimo, podría cambiar totalmente en función de los futuros cambios de hardware, y probablemente no valga la pena el esfuerzo de pensar en ello. Te sugiero que veas lo que es natural: para un sitio pequeño, creo que ese podría ser el enfoque de la sesión; para todo lo demás, base de datos. Es posible que desee evitar el enfoque de sesión si está en un host compartido, dependiendo de la configuración del servidor. –

2

Si usted tiene 100.000 10.000.000 filas o filas de la tabla es irrelevante si tiene la configuración de índices correctamente.

Habiendo dicho que la sesión predeterminada de PHP basada en archivos es definitivamente más rápida que la recuperación de una base de datos, pero no notará la diferencia hasta que su sitio sea muy utilizado, como más de 5,000 consultas por segundo.