Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sitzungsvariablen:Wie viele Daten sind zu viel?

Erstens werden PHP-Sitzungen standardmäßig nicht im Arbeitsspeicher gespeichert , sie werden auf der Festplatte gespeichert, sodass jeder Block/jede Sitzung, in die Sie schreiben, Festplattenspeicher und keinen Arbeitsspeicher belegt (bis Sie PHP verwenden, um die Sitzungsdaten zu lesen).

Ja, Sie sind möglicherweise effizienter, aber nicht, wenn Sie skalieren möchten, und hier ist der Grund:


Speichern von Daten in Sitzungen

Es ist durchaus akzeptabel, einige zu speichern Daten in Sitzungen. Theoretisch gibt es kein Limit (obwohl ich nie versucht habe, es zu brechen oder sogar zu schieben, wechseln Sie einfach zu einer effizienteren Lösung). Sie werden jedoch durch Speicherplatz und PHP begrenzt memory_limit() .

Zu den in Sitzungen gespeicherten Daten gehören häufig Dinge wie:

  • Benutzernamen
  • Hashes
  • Anmeldedaten
  • Andere Variablen (Benutzergruppen-IDs/Schlüssel usw.)
  • Flash-Nachrichten
  • (KEINE Passwörter!)

Es gibt jedoch einen Kompromiss. Wenn Ihr Datenverkehr (und Ihre Nutzung) zunimmt und Sie viele Daten in $_SESSION speichern , werden Sie sehr wahrscheinlich beginnen, Probleme sowohl in Bezug auf die Festplatten- als auch auf die Speichernutzung zu sehen.

Ich glaube nicht, dass es irgendein Problem mit dem gibt, was Sie vorschlagen, aber über die von Ihnen aufgelisteten Punkte hinaus und wo sich die obigen Beispiele überschneiden, ist Vorsicht geboten.

Wenn Sie (horizontal) skalieren und festplattenbasierte Sitzungen beibehalten möchten, haben Sie Optionen ( Sticky Sessions oder Storage Area Network sind ein Paar), da die Festplatte auf einem Server nicht dieselben Sitzungen speichert wie eine Festplatte auf einem anderen Server.


Ort der Sitzungsdaten

Sie können den Ort finden, an dem PHP Sitzungsdaten speichert, indem Sie Folgendes aufrufen: session_save_path()

oder auf der CLI:

php -r 'echo session_save_path(), "\n";'

Sie haben Ihr Betriebssystem nicht erwähnt, aber häufige Speicherorte für die Sitzungsdateien (über verschiedene Betriebssystemtypen hinweg) sind:

/tmp 
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp

Auf der Festplatte gespeicherte Sitzungen haben normalerweise Dateinamen, die wie folgt aussehen, wenn ls -al verwendet wird :

-rw-------  1 www www      0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6

Es ist erwähnenswert, dass es häufig Garbage-Collection-Prozesse gibt, die tote Sitzungen nach bestimmten Zeiträumen bereinigen. Es variiert je nach Betriebssystem, aber sie sind normalerweise bei verschiedenen LAMP-basierten Installationen vorhanden.


Andere Sitzungsspeicheroptionen/-ansätze

In Ihrer Datenbank
Sitzungsdaten werden häufig in einer DB statt auf einer lokalen Festplatte gespeichert, und dies funktioniert sowohl für kleine als auch für kleine und (je nach Ausführung) mittlere Sites mit einem angemessenen Traffic-Niveau.

Wie jede andere Lösung hat es seine Vor- und Nachteile (z. B. die Möglichkeit, einen Benutzer zu sperren/rauszuwerfen, indem eine Abfrage ausgeführt wird, anstatt eine Sitzungsdatei aus /tmp zu löschen )

In Erinnerung
Für größere Websites (mit höherem Datenverkehr) und insbesondere dort, wo die Anzahl der gleichzeitigen Benutzer hoch ist, kann der Speicher für Variablen oder Daten, auf die sehr häufig zugegriffen wird, schneller gelesen/geschrieben werden, anstatt Ihre DB unnötig zu belasten. Es kann und sollte dennoch in die DB geschrieben werden (siehe Write-Through-Caching ), sondern für einen effizienten Zugriff auch im Arbeitsspeicher gehalten werden.

Eine Technik von besonderem Wert ist das Speicher-Caching . Ein weit verbreitetes Beispiel einer PHP-kompatiblen Open-Source-Lösung ist Memcached , die auf einem Server oder vielen [verteilt] verwendet werden kann. Ich habe gesehen, dass dies sowohl von kleinen als auch von großen Firmen verwendet wird, und Sie müssen sich nur ansehen, wer es verwendet/beiträgt ...