Django Sessões

votos
37

Eu estou olhando para sessões em Django, e por padrão, eles são armazenados no banco de dados. Quais são os benefícios de sessões de sistemas de arquivos e de cache e quando devo usá-los?

Publicado 08/09/2008 em 21:16
fonte usuário
Em outras línguas...                            


5 respostas

votos
25

O back-end do sistema de arquivos só é pena olhar se você não está indo para usar um banco de dados para qualquer outra parte do seu sistema. Se você estiver usando um banco de dados, em seguida, a infra-estrutura do sistema de arquivos não tem nada a recomendá-lo.

O backend memcache é muito mais rápido do que o backend de banco de dados, mas você corre o risco de uma sessão fossem eliminadas e alguns dos seus dados de sessão que está sendo perdido.

Se você é um site muito, muito alto tráfego e código cuidadosamente para que você possa lidar com a perda de uma sessão, em seguida, usar memcache. Se você não estiver usando um banco de dados usar o cache do sistema de arquivos, mas a infra-estrutura de banco de dados padrão é a melhor opção, mais segura e mais simples em quase todos os casos.

Respondeu 08/09/2008 em 21:58
fonte usuário

votos
19

Não sou especialista Django, assim que esta resposta é sobre lojas de sessão em geral. Downvote se eu estiver errado.

Desempenho e Escalabilidade

Escolha de armazenamento de sessão tem um efeito sobre o desempenho ea escalabilidade. Isso só deve ser um grande problema se você tem uma aplicação muito popular.

Ambos os bancos de dados e sistemas de arquivos lojas de sessão são (geralmente) apoiado por discos que você possa ter um monte de sessões barato (porque os discos são baratos), mas os pedidos, muitas vezes, tem que esperar para que os dados sejam lidos (porque os discos são lentos). sessões Memcached usar RAM, por isso vai custar mais para apoiar o mesmo número de sessões simultâneas (porque RAM é caro), mas pode ser mais rápido (porque RAM é rápido).

sessões de sistemas de arquivos estão vinculados à caixa onde o aplicativo é executado, para que você não pode carregar o equilíbrio entre vários servidores de aplicativos se o seu site recebe enorme. sessões de banco de dados e memcached permitem que você tenha vários servidores de aplicativos falando a uma loja de sessão compartilhada.

Simplicidade

Escolha de armazenamento de sessão também terá impacto sobre o quão fácil é para implantar seu site. Alterar longe do padrão vai custar alguma complexidade. Memcached e RDBMSs ambos têm suas próprias complexidades, mas a sua aplicação é provavelmente vai estar usando um RDBMS de qualquer maneira.

A menos que você tem uma aplicação muito popular, a simplicidade deve ser a maior preocupação.

Bônus

Outra abordagem é a de armazenar os dados da sessão em biscoitos (todos do mesmo, não apenas um ID). Isto tem a vantagem de que o armazenamento de sessão dimensiona automaticamente com o número de usuários, mas tem desvantagens também. Você (ou seu framework) precisa ter cuidado para impedir que os usuários forjar dados da sessão. Você também precisa manter cada sessão pequena porque a coisa toda será enviado com cada solicitação.

Respondeu 09/09/2008 em 11:11
fonte usuário

votos
9

A partir de Django 1.1 você pode usar o back-end sessão cached_db.

Isto armazena a sessão no cache (use apenas com memcached), e grava-lo de volta para o DB. Se ele caiu fora do cache, ele será lido a partir do DB.

Embora este seja mais lenta do que apenas usando memcached para armazenar a sessão, ele adiciona persistência para a sessão.

Para mais informações, consulte: Django Docs: Usando Sessões em cache

Respondeu 21/12/2009 em 12:21
fonte usuário

votos
3

Uma coisa que tem de ser considerado na escolha de backend de sessão é "quantas vezes os dados da sessão é modificado"? Mesmo sites com tráfego moderado sofrerá se os dados da sessão é modificado a cada solicitação, fazendo muitas viagens de banco de dados para armazenar e recuperar dados.

No meu trabalho anterior usamos memcache como backend sessão exclusiva e funcionou muito bem. Nossa equipe administrativa colocar realmente grande esforço em fazer duas instâncias memcached especiais estáveis ​​como uma rocha, mas depois pouco de girando com a configuração inicial, que não tem nenhum interrupções de operações backends sessão.

Respondeu 19/09/2008 em 09:20
fonte usuário

votos
1

Se o banco tiver um DBA que não é você, você não pode ser autorizado a utilizar uma sessão de cópia de banco de dados (sendo um front-end importa apenas). Até Django suporta facilmente combinar dados de diversas bases de dados, de modo que você pode ter coisas específicas de frontend como sessões e user-mensagens (as mensagens em django.contrib.auth também são armazenadas no db) em um db separado, você precisa manter isso em mente.

Respondeu 28/11/2008 em 16:34
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more