Você está assumindo que o armazenamento da sessão e o armazenamento do banco de dados são exclusivos. Eles não são. Mas vamos começar assumindo que são.
A vantagem do armazenamento da sessão é três vezes:
- Não há necessidade de inserir dados explicitamente no banco de dados. Você simplesmente define uma variável de sessão e pronto. Funcionalidade simples e de baixo risco.
- Não há necessidade de gerenciar o ciclo de vida de uma visita do usuário e carrinho de compras, pois os contêineres / estruturas fazem isso por você
- Normalmente, a limpeza automática de sessões ociosas antigas é feita para você.
Desvantagens do armazenamento da sessão:
- Afinidade de sessão, a menos que você investigue a replicação
- Sem failover, a menos que você investigue a replicação ou persistência manual do estado da sessão no disco, o que pode ser complicado.
- Todas as sessões devem ser armazenadas na memória. Isso é amplificado se você empregar replicação.
Vantagens do armazenamento de banco de dados:
- Não é necessário se preocupar com a afinidade da sessão ou a replicação de estado. Você pode alternar entre todas as solicitações.
- Menos sobrecarga de memória no aplicativo.
- Se o pedido for concluído, tudo acaba no banco de dados de qualquer maneira, para facilitar a conclusão, porque os dados já estão presentes.
Desvantagens do armazenamento do banco de dados:
- Carrinhos abandonados - algum usuário anônimo adicionou um item ao carrinho de compras e desapareceu. Esses dados permanecem permanentemente, a menos que você tenha algum tipo de processo de expiração.
- Você precisa encontrar uma maneira de rastrear usuários e descobrir se, para uma determinada solicitação, isso representa uma sessão de navegação nova ou existente. (sim, isso provavelmente é fácil se você usar um cookie, mas como garantir que dois usuários não terminem com o mesmo ID?).
- Mais código
Você não mencionou qual plataforma está usando. Eu procuraria uma abordagem que use uma sessão baseada em banco de dados em que os dados da sessão só existam na memória durante a vida de um ciclo de solicitação / resposta, carregando-os no banco de dados e salvando-os novamente no banco de dados. Isso me serviu bem no passado.
Vantagens de uma sessão baseada em banco de dados:
- Não há necessidade de afinidade do servidor.
- Fácil na memória do servidor de aplicativos
- Os dados da sessão ociosa / abandonada são limpos para você.
- O ciclo de vida da primeira visita do usuário, visita repetida e final da sessão está tudo planejado para você.
- Fácil de codificar
Desvantagens de uma sessão suportada por banco de dados:
- Configuração - você precisa investigar seu contêiner, seja PHP, Java EE (Tomcat, Jetty, JBoss, etc.), node.js + express.js ou outros tipos de suporte a isso e forneça a configuração correta.
- Pode ser necessário carregar o teste, pois você está adicionando duas operações de banco de dados por solicitação.
Há uma terceira possibilidade, na qual alguém abordou anteriormente. Você pode ignorar completamente o uso de sessões e usar o armazenamento do lado do cliente incorporando tudo em um cookie ou em um armazenamento local html.
Deixarei os prós / contras disso como um exercício para você, mas darei uma dica de que, para o armazenamento html5, a compatibilidade do navegador pode ser algo a ser analisado cuidadosamente.
Eu descrevi os fatos para você. Espero que isso ajude você a tomar a decisão certa para sua situação.