Dieser Blog-Beitrag zeigt die Ergebnisse eines Leistungsvergleichs verschiedener Sitzungsspeicher-Engines mit Magento und sie scheinen zu dem Schluss gekommen zu sein, dass bis zu 75 gleichzeitige Benutzer keinen wirklichen Leistungsunterschied zwischen ihnen aufweisen.
Ich denke, dass auf diesen Ebenen (sie hatten ungefähr 5 Transaktionen pro Sekunde, was ungefähr 430.000 Treffer über einen Zeitraum von 12 Stunden entspricht) der Overhead in allem anderen die Leistungszahlen dominiert, die Sie sehen, da Datei / DB / Memcache / Redis alle glücklich handhaben werden der Verkehr ohne ins Schwitzen zu geraten, wenn er richtig benutzt wird.
Damit bleiben andere Faktoren wie Skalierbarkeit, Zuverlässigkeit und Sicherheit.
Zunächst möchte ich sagen, dass alles, was Ihren Dateispeicher gefährdet, wahrscheinlich auch alles andere gefährdet, da ein Angreifer dann einfach Ihren Anwendungscode ändern oder zumindest Schlüssel und Speicherzugriffsprotokolle / -anmeldeinformationen erkennen kann, selbst wenn diese schreibgeschützt sind Zugriff. Die Dateispeicherung funktioniert gut für Websites mit geringem Volumen, ist einfach einzurichten und leicht zu begründen. So oft Sie sagen, dass Sie auf die Festplatte zugegriffen haben, trifft ein DB-Lesevorgang auch auf die Festplatte. Wenn die DB sie zwischenspeichern kann, hat Ihr Betriebssystem wahrscheinlich auch die Sitzungsdatei zwischengespeichert. Außerdem wird nur eine Datei gelesen, und Ihr Dateisystem kann hervorragend darauf zugreifen, wenn Sie den Namen bereits kennen. Wenn Sie PHP verwenden, wissen Sie, wie viele Dateilesevorgänge das System ausführen muss, um Ihre Anwendung zu bedienen? Der Nachteil ist, dass Sie können '
Memcache ist relativ schnell und wenn Sie Memcache-Klassenlösungen allgemeiner betrachten (Redis usw.), gibt es einige, die sogar eine Persistenz bei Lesevorgängen im Speicher versprechen, damit Sie das Beste aus beiden Welten herausholen können. Sie sind auch relativ einfach zu überlegen, und der Schlüsselwert von Sitzungen ist genau das, wofür diese entwickelt wurden. Wissen Sie, wie viel Sie in eine Sitzung stecken müssten, um eine davon zu füllen? In jedem Fall zwingen Sie alle Ihre Optionen zu Kompromissen, wenn Sie ihre Kapazität erreichen. Festplatten füllen sich mit Dateien (Anzahl und Größenfaktor hier), Cache-Speicher füllen sich mit Kapazität und Datenbanken haben eine begrenzte Anzahl von Zeilen und die gleichen Festplattenkapazitätsgrenzen wie der Dateiansatz. Außerdem werden diese Systeme nur verteilt, wenn Sie sie verteilt ausführen. Die meisten funktionieren einwandfrei mit einem einzelnen Server-Setup. Wenn Sie sie verteilen, haben Sie wahrscheinlich bereits verteilte Webserver / Datenbankserver usw., sodass Ihre Probleme mit verteilten Systemen bei der Auswahl Ihres Sitzungsspeichers sicherlich nicht auftreten. Wenn Sie jedoch das 10-fache des Datenverkehrs / der Kapazität usw. wünschen, ist es viel natürlicher, dorthin zu gelangen, als mit dem Dateispeicherschema. In einigen Schlüssel- / Wertspeichern können Sie auch relativ einfach einfache Analysen der Sitzungsdaten durchführen, aber die meisten bringen Sie nicht in die Nähe der Möglichkeiten von SQL.
Ich bin mir nicht sicher, warum Sie vorschlagen, dass die Datenbank zuverlässiger ist als die anderen Optionen, aber ich habe den Reiz der Datenbank, da Ihre PHP-Anwendung sie wahrscheinlich bereits verwendet. Dies bedeutet, dass Sie keine weitere Serverabhängigkeit hinzufügen und wahrscheinlich dieselbe Verbindung wiederverwenden können, die Sie zum Abrufen von Sitzungsdaten verwenden, um Benutzerdaten abzurufen, sodass Sie keine für Daten, eine für Memcache usw. einrichten müssen Tabelle gut, es wird auch einigermaßen schnell arbeiten und bietet eine ziemlich einfache Semantik, mit der Sie bereits vertraut sind, um alte Sitzungen zu ernten oder sogar Sitzungsdaten zu analysieren (ich bin mir nicht sicher, warum Sie dies möchten und wenn Sie es auch nicht sind, ist dies wahrscheinlich nicht der Fall). nicht so wichtig). Das Skalieren auf massive Maßstäbe ist nicht so trivial wie bei so etwas wie Redis.
Ich denke, diese Wahl ist am Anfang nicht so wichtig. Jeder Ansatz hat Herausforderungen, Vorteile und Dinge, über die Sie nachdenken müssen. Im Allgemeinen können Sie wahrscheinlich davonkommen, wenn Sie nur die Standardeinstellungen von PHP / das von Ihnen verwendete Framework verwenden oder sogar die einfachste Methode, mit der Sie beginnen können. Wenn sich die Auswahl später als schlecht herausstellt, werden Sie von Ihrer Leistungsanalyse darüber informiert und Sie werden mit den Daten ausgestattet, die Sie benötigen, um die richtigen Entscheidungen zu treffen, je nach der Art des Verkehrs, den Sie erhalten. Alles, was Sie vernünftigerweise haben können, sind allgemeine Spekulationen.