Esta postagem no blog mostra os resultados de uma comparação de desempenho de diferentes mecanismos de armazenamento de sessão com o Magento e eles parecem ter concluído que até 75 usuários simultâneos não há realmente uma diferença de desempenho entre eles.
Eu acho que nesses níveis (eles tinham cerca de 5 transações por segundo, o que seria cerca de 430k ocorrências em um período de 12 horas), a sobrecarga em todo o resto domina os números de desempenho que você vê, já que o arquivo / DB / Memcache / Redis lidará felizmente o tráfego sem suar se usado corretamente.
Isso deixa outros fatores, como escalabilidade, confiabilidade e segurança.
Gostaria de dizer primeiro que qualquer coisa que comprometa seu armazenamento de arquivos provavelmente comprometerá qualquer outra coisa, já que um invasor pode apenas modificar o código do aplicativo ou, pelo menos, descobrir chaves e protocolos / credenciais de acesso ao armazenamento, mesmo que tenham somente leitura Acesso. O armazenamento de arquivos funcionará bem em sites de baixo volume, é fácil de configurar e fácil de raciocinar. Por mais que você diga que atingiu o disco, uma leitura do banco de dados também atingirá o disco e, se o banco de dados puder armazená-lo em cache, provavelmente o sistema operacional também armazenará em cache o arquivo da sessão. Além disso, seu arquivo é lido, e seu sistema de arquivos é brilhante para alcançá-lo, se você já sabe o nome. Se você está usando PHP, sabe quantas leituras de arquivo o sistema precisa fazer apenas para atender seu aplicativo? A desvantagem é que você pode '
O Memcache é relativamente rápido e, se você considerar as soluções de classe do Memcache de maneira mais ampla (Redis, etc), há algumas que prometem persistência com leituras na memória para maior velocidade, para que você obtenha o máximo dos dois mundos. Eles também são relativamente simples de raciocinar e a natureza do valor-chave das sessões é exatamente o que elas foram projetadas para fazer. Você sabe quanto você precisaria colocar em uma sessão para preencher uma dessas? De qualquer maneira, todas as suas opções forçarão você a se comprometer se você atingir a capacidade delas. Os discos são preenchidos com arquivos (número e fator de tamanho aqui), os armazenamentos de cache possuem capacidade e os bancos de dados têm um número limitado de linhas e os mesmos limites de capacidade de disco que a abordagem de arquivo. Além disso, esses sistemas são distribuídos apenas se você os executar de maneira distribuída. A maioria funciona bem com uma única configuração de servidor. Se você os distribuir, provavelmente já terá servidores da Web / servidores de banco de dados, etc, para que os problemas do sistema distribuído certamente não apareçam na sua opção de armazenamento de sessão. No entanto, quando você deseja 10x o tráfego / capacidade etc, chegar lá é muito mais natural com isso do que com o esquema de armazenamento de arquivos. Alguns armazenamentos de chave / valor também permitem realizar análises simples dos dados da sessão com relativa facilidade, mas a maioria não o leva nem perto do que o SQL pode fazer.
Não sei por que você propõe que o banco de dados seja mais confiável do que as outras opções, mas recebo o apelo do banco de dados, pois seu aplicativo PHP provavelmente já o utiliza. Isso significa que você não adiciona outra dependência do servidor e provavelmente pode reutilizar a mesma conexão usada para buscar dados da sessão para obter dados do usuário, para não precisar estabelecer uma para dados, uma para Memcache, etc. Se você indexar o tabela, ele também terá um desempenho razoavelmente rápido e fornece semânticas bastante simples com as quais você já está familiarizado para colher sessões antigas ou até mesmo analisar dados de sessão (não sei por que você gostaria e se não o é, provavelmente isso não significa ' importa tanto). Escalar para escalas maciças não é tão trivial quanto em algo como Redis,
Eu acho que essa escolha não é tão importante no começo. Cada abordagem tem desafios e vantagens e coisas em que você deve pensar. De um modo geral, você provavelmente pode usar apenas os padrões do PHP / qualquer estrutura que você use ou mesmo a coisa mais fácil de seguir. Se a escolha for ruim posteriormente, suas análises de desempenho informarão e você estará armado com os dados necessários para fazer as escolhas apropriadas, dada a natureza específica do tráfego recebido. Na frente, tudo o que você pode razoavelmente ter é especulação geral.