Asume que el almacenamiento de la sesión y el almacenamiento de la base de datos son exclusivos. No lo son Pero comencemos asumiendo que lo son.
La ventaja del almacenamiento de la sesión es triple:
- No es necesario insertar datos explícitamente en la base de datos. Simplemente configura una variable de sesión y listo. Simple y de bajo riesgo funcionalmente.
- No es necesario administrar el ciclo de vida de una visita del usuario y un carrito de compras, ya que los contenedores / marcos lo hacen por usted
- Por lo general, la limpieza automática de las viejas sesiones inactivas se realiza por usted.
Desventajas del almacenamiento de la sesión:
- Afinidad de sesión, a menos que investigue la replicación
- Sin conmutación por error, a menos que investigue la replicación o la persistencia manual del estado de la sesión en el disco, lo que puede complicarse.
- Todas las sesiones deben almacenarse en la memoria. Esto se amplifica si emplea la replicación.
Ventajas del almacenamiento de la base de datos:
- No necesita preocuparse por la afinidad de sesión o la replicación de estado. Puede hacer un round-robin de todas las solicitudes.
- Menos sobrecarga de memoria en la aplicación.
- Si se completa el pedido, todo termina en la base de datos de todos modos, por lo que esto podría facilitar la finalización porque los datos ya están presentes.
Desventajas del almacenamiento de la base de datos:
- Carros abandonados: un usuario anónimo agregó un artículo a su carrito de compras y desapareció. Esos datos permanecen para siempre a menos que tenga algún tipo de proceso de vencimiento.
- Debe encontrar una manera de rastrear a los usuarios y determinar si, para una solicitud determinada, esto representa una sesión de navegación nueva o existente. (sí, esto probablemente sea fácil si usa una cookie, pero ¿cómo se asegura de que dos usuarios no terminen con la misma identificación?).
- Más código
No mencionaste qué plataforma estás utilizando. Buscaría un enfoque que utilice una sesión respaldada por una base de datos en la que los datos de la sesión solo existan en la memoria durante la vida de un ciclo de solicitud / respuesta, cargándola de la base de datos y volviendo a guardarla en la base de datos. Esto me ha servido bien en el pasado.
Ventajas de una sesión respaldada por base de datos:
- No hay necesidad de afinidad de servidor.
- Fácil en la memoria del servidor de aplicaciones
- Los datos de sesión inactiva / abandonada se limpian por usted.
- El ciclo de vida de la primera visita del usuario, la visita repetida, el final de la sesión está todo resuelto para usted.
- Fácil de codificar
Desventajas de una sesión respaldada por base de datos:
- Configuración: debe investigar su contenedor, ya sea PHP, Java EE (Tomcat, Jetty, JBoss, etc.), node.js + express.js o cualquier otra cosa que no sea compatible con esto y proporcione la configuración correcta.
- Es posible que deba realizar una prueba de carga, ya que está agregando 2 operaciones de base de datos por solicitud.
Hay una tercera posibilidad, que alguien mencionó anteriormente. Puede omitir el uso de sesiones por completo y usar el almacenamiento del lado del cliente incrustando todo en una cookie o almacenamiento local html.
Dejaré los pros / contras de eso como un ejercicio para usted, pero le daré una pista de que para el almacenamiento html5, la compatibilidad del navegador puede ser algo que revise cuidadosamente.
He esbozado los hechos para ti. Esperemos que esto le ayude a tomar la decisión correcta para su situación.