Sie gehen davon aus, dass der Sitzungsspeicher und der Datenbankspeicher exklusiv sind. Sie sind nicht. Beginnen wir aber mit der Annahme, dass dies der Fall ist.
Der Vorteil der Sitzungsspeicherung ist dreifach:
- Es müssen keine Daten explizit in die Datenbank eingefügt werden. Sie setzen einfach eine Sitzungsvariable und fertig. Einfach und funktional risikoarm.
- Sie müssen den Lebenszyklus eines Besuchs durch den Benutzer und des Einkaufswagens nicht so verwalten, wie dies Container / Frameworks für Sie tun
- Normalerweise wird die automatische Bereinigung alter inaktiver Sitzungen für Sie durchgeführt.
Nachteile des Sitzungsspeichers:
- Sitzungsaffinität, es sei denn, Sie untersuchen die Replikation
- Kein Failover, es sei denn, Sie untersuchen die Replikation oder die manuelle Speicherung des Sitzungsstatus auf der Festplatte, was zu Komplikationen führen kann.
- Alle Sitzungen müssen gespeichert werden. Dies wird verstärkt, wenn Sie die Replikation verwenden.
Vorteile der Datenbankspeicherung:
- Sie müssen sich keine Gedanken über Sitzungsaffinität oder Statusreplikation machen. Sie können alle Anfragen runderneuern.
- Weniger Speicheraufwand in der Anwendung.
- Wenn die Bestellung abgeschlossen ist, wird ohnehin alles in der Datenbank gespeichert, sodass die Fertigstellung möglicherweise vereinfacht wird, da die Daten bereits vorhanden sind.
Nachteile des Datenbankspeichers:
- Verlassene Warenkörbe - Ein anonymer Benutzer hat einen Artikel in den Warenkorb gelegt und ist verschwunden. Diese Daten bleiben für immer erhalten, es sei denn, Sie haben einen Ablaufprozess.
- Sie müssen eine Möglichkeit finden, Benutzer zu verfolgen und herauszufinden, ob es sich bei einer bestimmten Anforderung um eine vorhandene oder eine neue Browsersitzung handelt. (Ja, dies ist wahrscheinlich einfach, wenn Sie ein Cookie verwenden, aber wie stellen Sie sicher, dass zwei Benutzer nicht dieselbe ID haben?)
- Mehr Code
Sie haben nicht erwähnt, welche Plattform Sie verwenden. Ich würde nach einem Ansatz suchen, der eine datenbankgestützte Sitzung verwendet, bei der die Sitzungsdaten nur während der Lebensdauer eines Anforderungs- / Antwortzyklus im Speicher vorhanden sind, sie aus der Datenbank laden und in die Datenbank zurückspeichern. Das hat mir in der Vergangenheit sehr geholfen.
Vorteile einer datenbankgestützten Sitzung:
- Keine Notwendigkeit für Serveraffinität.
- Schont den Speicher des App-Servers
- Inaktive / abgebrochene Sitzungsdaten werden für Sie bereinigt.
- Der Lebenszyklus des ersten Besuchs des Benutzers, des wiederholten Besuchs und des Sitzungsendes ist für Sie festgelegt.
- Einfach zu codieren
Nachteile einer datenbankgestützten Sitzung:
- Konfiguration - Sie müssen Ihren Container untersuchen, ob es sich um PHP, Java EE (Tomcat, Jetty, JBoss usw.), node.js + express.js oder etwas anderes handelt, das dies nicht unterstützt, und die richtige Konfiguration bereitstellen.
- Möglicherweise müssen Sie dies testen, da Sie pro Anforderung 2 Datenbankvorgänge hinzufügen.
Es gibt eine dritte Möglichkeit, die jemand zuvor angesprochen hat. Sie können die Verwendung von Sitzungen insgesamt überspringen und clientseitigen Speicher verwenden, indem Sie entweder alles in ein Cookie oder in einen lokalen HTML-Speicher einbetten.
Ich überlasse Ihnen das Für und Wider als Übung, aber ich gebe Ihnen einen Hinweis, dass bei der Speicherung von HTML5 die Browserkompatibilität sorgfältig geprüft werden muss.
Ich habe die Fakten für Sie skizziert. Hoffentlich hilft Ihnen dies dabei, die richtige Entscheidung für Ihre Situation zu treffen.