2011-11-17 14 views
5

¿Alguien podría explicar las desventajas de almacenar grandes cantidades de datos dentro de la sesión o indicarme algo de lectura?Sesiones: límites de tamaño de sesión

¿También me interesaría si hay alguna diferencia entre almacenar datos en una sesión y leer datos de archivos de datos?

+0

Ver http://stackoverflow.com/questions/4649907/maximum-size-of-a-php-session http://stackoverflow.com/questions/217420/ideal-php-session-size – Mob

+0

Has estado aquí. Deje de firmar sus publicaciones (Y su título debe _describir la pregunta_, no incluir tecnologías y temas) –

Respuesta

4

Si almacena una gran cantidad de datos en una sesión, tendrá una disminución en el rendimiento de entrada/salida, ya que va a haber mucha lectura/escritura.

Las sesiones en PHP, de forma predeterminada, se almacenan en el directorio/tmp en un archivo plano. Por lo tanto, sus datos de sesión están escritos en un archivo de datos de algún tipo.

PHP le permite anular su manejador de sesión predeterminado mediante la función session_set_save_handler() donde puede redefinir la forma en que se leen/escriben/mantienen las sesiones.

También puede anular esto a través del archivo php.ini donde lo especifica mediante la directiva session.save_handler.

Ahora, la implicación de tener una gran cantidad de sesiones almacenando datos grandes es que se crearán muchos archivos y llevará un tiempo encontrarlos debido a la forma en que operan los discos duros (mecánicos, por supuesto, que son los más comunes todavía). Cuanto más tenga, más tiempo le llevará encontrarlo. Cuanto más grandes son, más tiempo se tarda en leerlo. Si tiene muchos de ellos y son grandes, el doble de problemas, se necesita un cambio de enfoque.

¿Cuál es la solución?

Por lo general, cuando se cumple con la disminución del rendimiento, las personas equilibran la carga de sus sitios web. Eso no funciona con las sesiones, lamentablemente porque el equilibrio de carga es elegir qué computadora usar que servirá a la solicitud actual. Eso significa que diferentes computadoras servirán las páginas que navegas en algún sitio web. Lo que significa que si esas computadoras usan el mecanismo predeterminado de almacenamiento de sesión (/ tmp directory), las sesiones no se conservarán en todos los servidores, ya que no pueden acceder al directorio/tmp de los demás. Puede resolver esto montando un NAS y haciéndolo globalmente visible para todas las computadoras del clúster, pero eso es caro y difícil de mantener.

La otra opción es almacenar las sesiones en una base de datos. Se puede acceder a una base de datos desde cualquiera de las computadoras de nuestro clúster ficticio. Por lo general, existen bases de datos especializadas que se usan para manejar sesiones, especializadas en la sensación de estar separadas de la base de datos que almacena el contenido de su sitio web o lo que sea. En el momento de la popularidad de NoSQL, en mi opinión, NoSQL es ideal para manejar sesiones. Se escalan fácilmente, son más rápidos al escribir los datos en los dispositivos de almacenamiento que los RDBMS.

La tercera opción es impulsar todo esto, eliminar los discos duros como solución de almacenamiento permanente y simplemente usar la memoria de su servidor para el almacenamiento de la sesión. Lo que obtienes es un rendimiento increíble, sin embargo, toda tu memoria RAM podría desaparecer rápidamente. También puede crear un clúster de computadoras que almacene sesiones en su RAM. Redis y Memcache son ideales para esta tarea, googlear un poco le dará buenos recursos que explican cómo usar Redis o Memcache para almacenar sesiones.

En pocas palabras, no almacene demasiados datos en sus sesiones. Según sus necesidades y presupuesto: hay 3 opciones disponibles para almacenar y trabajar con sesiones.

1

Este es un buen enlace: http://tuxradar.com/practicalphp/10/1/0

datos de la sesión es la carga de trabajo muy caro también. La mejor manera de hacerlo es almacenar una cookie o session_id y usarla para buscar lo que necesita de un dbfile/rdbms. Esto también permite que su sitio se ejecute en un entorno de varios servidores donde los datos de la sesión se limitan a uno solo.

Cuestiones relacionadas