37 votes

Sessions Django

Je regarde les sessions dans Django et, par défaut, elles sont stockées dans la base de données. Quels sont les avantages des sessions de système de fichiers et de cache et quand dois-je les utiliser?

25voto

Andrew Wilkinson Points 4875

Le système de fichiers backend est-ce que la peine de regarder si vous n'allez pas utiliser une base de données pour toute autre partie de votre système. Si vous utilisez une base de données, puis le système de fichiers backend n'a rien à recommander.

Le memcache backend est beaucoup plus rapide que la base de données back-end, mais vous courez le risque d'une session en cours de purge et de certains de vos session de la perte des données.

Si vous êtes vraiment très trafic de site web et code avec soin de sorte que vous pouvez faire face à la perte d'une session, puis l'utilisation de memcache. Si vous n'êtes pas à l'aide d'une base de données utiliser le cache du système de fichiers, mais la base de données par défaut backend est la meilleure, la plus sûre et la plus simple option dans presque tous les cas.

19voto

Will Harris Points 17002

Je ne suis pas un Django d'experts, de sorte que cette réponse est d'environ session magasins en général. Downvote si je me trompe.

Les performances et l'Évolutivité

Choix de session magasin a un effet sur les performances et l'évolutivité. Cela ne devrait être un gros problème si vous avez un très populaire application.

À la fois base de données et le système de fichier de session magasins sont (généralement) soutenus par des disques de sorte que vous pouvez avoir beaucoup de séances à bon marché (car les disques sont bon marché), mais les demandes ont souvent d'attendre que les données à lire (car les disques sont lents). Memcached des sessions d'utilisation de la RAM, de sorte que le coût sera plus élevé pour prendre en charge le même nombre de sessions simultanées (parce que la RAM est cher), mais peut être plus rapide (car la mémoire RAM est rapide).

Système de fichiers de sessions sont liés à la zone où votre application est en cours d'exécution, vous ne pouvez pas équilibrer la charge entre plusieurs serveurs d'applications si votre site est énorme. Base de données et memcached sessions de vous permettre d'avoir plusieurs serveurs d'applications de parler à une session partagée magasin.

Simplicité

Choix de session magasin aura également un impact sur la façon dont il est facile de déployer votre site. Évolution de l'écart de la valeur par défaut sera le coût de la complexité. Memcached et des Sgbdr les deux ont leurs propres complexités, mais votre demande est probablement va être l'aide d'un SGBDR, de toute façon.

Sauf si vous avez un très populaire application, la simplicité devrait être la plus grande préoccupation.

Bonus

Je ne sais pas si c'est pris en charge par Django, mais une autre approche consiste à stocker les données de session dans des cookies (tous, pas seulement une pièce d'identité). Ceci a l'avantage que la session magasin s'adapte automatiquement au nombre d'utilisateurs, mais il a des inconvénients aussi. Vous (ou votre cadre) ont besoin d'être prudent afin d'empêcher les utilisateurs de forgeage des données de session. Vous avez également besoin de garder chaque petite session parce que le tout sera envoyé avec chaque demande.

10voto

Anthony Batchelor Points 306

Comme de Django 1.1 vous pouvez utiliser le cached_db session de back-end.

Il stocke la session dans le cache (utiliser uniquement avec memcached), et l'écrit dans la DB. Si il est tombé hors de la mémoire cache, il sera lu à partir de la DB.

Même si c'est plus lent que juste l'utilisation de memcached pour le stockage de la session, il ajoute la persistance de la session.

Pour plus d'informations, voir: Django Docs: en Utilisant la mise en Cache des Sessions

3voto

zgoda Points 8549

Une chose qui doit être considéré lors du choix de session backend est "à quelle fréquence les données de session est modifié"? Même les sites à trafic modéré va souffrir si les données de session sont modifiés à chaque requête, faisant de nombreux voyages de base de données pour stocker et récupérer des données.

Dans mon précédent travail, nous avons utilisé comme memcache session backend exclusivement et il a vraiment bien travaillé. Notre équipe administrative en mettre vraiment beaucoup d'effort à faire des deux spéciales de memcached instances stable comme un roc, mais après peu de se tourner avec la configuration initiale, nous n'avons pas les interruptions de session backends opérations.

1voto

kaleissin Points 577

Si la base de données a un administrateur de base de données autre que vous, vous n'êtes peut-être pas autorisé à utiliser une session sauvegardée par une base de données (il s'agit uniquement d'une affaire frontale). Jusqu'à ce que django prenne en charge la fusion facile des données de plusieurs bases de données, de sorte que vous puissiez disposer d'éléments tels que des sessions et des messages utilisateur (les messages de django.contrib.auth sont également stockés dans la base de données) dans une base de données distincte. ceci à l'esprit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X