
Ψάχνω σε συνεδρίες σε Django, και εξ ορισμού είναι αποθηκευμένα στη βάση δεδομένων. Ποια είναι τα οφέλη των αρχείων και της μνήμης cache συνεδρίες και πότε πρέπει να τις χρησιμοποιώ;

 
Django Συνεδρίες
================



Το backend σύστημα αρχείων αξίζει μόνο κοιτάζοντας εάν δεν πρόκειται να χρησιμοποιήσετε μια βάση δεδομένων για οποιοδήποτε άλλο μέρος του συστήματός σας. Εάν χρησιμοποιείτε μια βάση δεδομένων τότε το backend σύστημα αρχείων δεν έχει τίποτα να το προτείνω.


Η memcache backend είναι πολύ πιο γρήγορα από ό, τι το backend βάση δεδομένων, αλλά διατρέχετε τον κίνδυνο μιας συνόδου που καθαρίζεται και μερικά από τα δεδομένα της συνεδρίας σας να χαθεί.


Αν είστε μια ιστοσελίδα πραγματικά πολύ υψηλή επισκεψιμότητα και τον κωδικό προσεκτικά, έτσι ώστε να μπορεί να αντιμετωπίσει την απώλεια ενός σύνοδο στη συνέχεια χρησιμοποιήστε memcache. Εάν δεν χρησιμοποιείτε μια βάση δεδομένων χρησιμοποιούν τη μνήμη cache του συστήματος αρχείων, αλλά το backend προεπιλεγμένη βάση δεδομένων είναι η καλύτερη, ασφαλέστερη και απλούστερη λύση σε όλες σχεδόν τις περιπτώσεις.

 

Δεν είμαι ειδικός Django, έτσι ώστε αυτή η απάντηση είναι περίπου καταστήματα συνεδρία γενικά. Downvote αν κάνω λάθος.


Απόδοση και επεκτασιμότητα
--------------------------


Επιλογή κατάστημα συνεδρία έχει επίδραση στην απόδοση και επεκτασιμότητα. Αυτό θα πρέπει να είναι μόνο ένα μεγάλο πρόβλημα, αν έχετε μια πολύ δημοφιλής εφαρμογή.


Και τα δύο καταστήματα συνεδρία της βάσης δεδομένων και αρχείων είναι (συνήθως) που υποστηρίζεται από δίσκους έτσι μπορείτε να έχετε πολλές συνεδρίες φθηνά (επειδή δίσκοι είναι φθηνά), αλλά οι αιτήσεις θα πρέπει συχνά να περιμένουν για τα στοιχεία που πρέπει να διαβάσει (γιατί οι δίσκοι είναι αργή). Memcached συνεδρίες χρήση μνήμης RAM, οπότε θα κοστίσει περισσότερα για να στηρίξει τον ίδιο αριθμό ταυτόχρονων συνεδριών (γιατί RAM είναι ακριβά), αλλά μπορεί να είναι πιο γρήγορα (γιατί RAM είναι γρήγορη).


Οι συνεδρίες σύστημα αρχείων που συνδέονται με το πλαίσιο όπου η αίτησή σας βρίσκεται σε λειτουργία, έτσι ώστε να μην μπορεί να φορτώσει ισορροπία μεταξύ πολλών διακομιστών εφαρμογής αν το site σας παίρνει τεράστιες. Βάση δεδομένων και memcached συνεδρίες σας επιτρέπει να έχετε πολλούς διακομιστές εφαρμογών μιλώντας σε ένα κατάστημα κοινόχρηστη συνεδρία.


Απλότητα
--------


Επιλογή κατάστημα συνεδρία θα επηρεάσει επίσης πόσο εύκολο είναι να αναπτύξετε το site σας. Η αλλαγή από την προεπιλεγμένη, θα κοστίσει κάποια πολυπλοκότητα. Memcached και Σχεσιακά ΣΔΒΔ και οι δύο έχουν το δικό τους περιπλοκές, αλλά η αίτησή σας είναι κατά πάσα πιθανότητα πρόκειται να χρησιμοποιείτε ένα RDBMS ούτως ή άλλως.


Εκτός αν έχετε πολύ δημοφιλής εφαρμογή, η απλότητα θα πρέπει να είναι η μεγαλύτερη ανησυχία.


Δώρο
----


Μια άλλη προσέγγιση είναι να αποθηκεύουν [τα δεδομένα συνεδρίας σε cookies](https://docs.djangoproject.com/en/1.8/topics/http/sessions/#using-cookie-based-sessions) (όλα αυτά, δεν είναι μόνο ένα αναγνωριστικό). Αυτό έχει το πλεονέκτημα ότι το κατάστημα συνεδρία κλίμακες αυτόματα με τον αριθμό των χρηστών, αλλά έχει μειονεκτήματα πάρα πολύ. Εσείς (ή πλαισίου σας) πρέπει να είναι προσεκτικοί για να σταματήσει τους χρήστες σφυρηλάτηση δεδομένων της συνεδρίας. Θα πρέπει, επίσης, να κρατήσει κάθε συνεδρία μικρή, επειδή το όλο θέμα θα πρέπει να αποστέλλονται σε κάθε αίτημα.

 

Ένα πράγμα που πρέπει να ληφθεί υπόψη κατά την επιλογή backend συνεδρία είναι «πόσο συχνά τα δεδομένα συνεδρία τροποποιημένο»; Ακόμη και χώρους με μέτρια κυκλοφορία θα υποφέρουν αν τα δεδομένα συνεδρία τροποποιείται σε κάθε αίτημα, κάνοντας πολλά ταξίδια βάσης δεδομένων για την αποθήκευση και ανάκτηση δεδομένων.


Στην προηγούμενη δουλειά μου που χρησιμοποιείται memcache ως backend συνεδρία αποκλειστικά και λειτούργησε πολύ καλά. διοικητική ομάδα μας κάνει πραγματικά μεγάλη προσπάθεια για την κατασκευή δύο ειδικές memcached περιπτώσεις σταθερή σαν βράχος, αλλά μετά από λίγο σταυρωμένα με την αρχική ρύθμιση, δεν είχαμε καμία διακοπές της λειτουργίας του backend συνόδου.

 

Εάν η βάση δεδομένων έχει μια DBA που δεν είναι εσύ, δεν μπορεί να επιτραπεί να χρησιμοποιήσει μια βάση δεδομένων που υποστηρίζεται από συνεδρία (να είναι ένα front-end θέμα μόνο). Μέχρι Django υποστηρίζει εύκολα συνδυάζοντας τα δεδομένα από διάφορες βάσεις δεδομένων, έτσι ώστε να μπορείτε να έχετε frontend ειδικά πράγματα, όπως συνεδρίες και του χρήστη-μηνυμάτων (τα μηνύματα django.contrib.auth αποθηκεύονται επίσης στο db) σε ένα ξεχωριστό db, θα πρέπει να κρατήσει αυτό κατά νου.

 

Από Django 1.1, μπορείτε να χρησιμοποιήσετε το πίσω άκρο cached\_db συνεδρία.


Αυτό αποθηκεύει τη συνεδρία στη μνήμη cache (χρήση μόνο με memcached), και γράφει πίσω στο ΣΠ. Αν έχει πέσει έξω από τη μνήμη cache, θα διαβαστεί από την DB.


Αν και αυτό είναι πιο αργή από ό, τι απλά χρησιμοποιώντας memcached για την αποθήκευση της συνεδρίας, προσθέτει η επιμονή της συνόδου.


Για περισσότερες πληροφορίες, δείτε: [Django Έγγραφα: Χρησιμοποιώντας Αποθηκευμένη Συνεδρίες](http://docs.djangoproject.com/en/dev/topics/http/sessions/#using-cached-sessions "Χρησιμοποιώντας Αποθηκευμένη Συνεδρίες")

 