Ist es in Ordnung, viele Informationen in $ _SESSION zu speichern?

8

Ich muss viele Arrays in $_SESSION speichern, um das Abrufen von Informationen aus MySQL zu verhindern. Ist es okay? Wie viel ist "zu viel" Information in $_SESSION oder gibt es kein "zu viel"? Danke.

P.S. Oder es ist besser, Ссылка zu verwenden?

    
good_evening 03.05.2011, 16:36
quelle

5 Antworten

3

Die Begrenzung der Daten, die Sie in einer Sitzung speichern können, ist durch den Sitzungsspeicher-Layer begrenzt. Der Standardsitzungsspeicher ist das Dateisystem und eine Sitzung wird in einer Datei gespeichert. Der Name der Sitzungsvariablen / des Array-Schlüssels wird ebenso wie die Daten in einem serialisierten Formular gespeichert. Ein Pipe-Symbol trennt Variablennamen und Werte voneinander.

Wenn Sie Arrays mit Strings speichern, ist die Datei ähnlich groß wie die Länge der Strings plus der Länge der Schlüssel und etwas Overhead für Metadaten sowie die Größe der Variablennamen.

p>

Die Größe einer Datei ist durch das Dateisystem begrenzt. Zum Beispiel in EXT3 sind dies 16 Gigabyte pro Datei. Das ist also "zu viel". Sie können nicht mehr Daten in einer Sitzung speichern als es die Speicherschicht zulässt.

Das nächste Limit, das mir einfällt, ist das Ihrer Erinnerung. Da PHP die Daten aus der Datei in den Speicher laden und am Ende der Anfrage aus dem Speicher in die Datei speichern muss. Wenn Sie also ein Speicherlimit in PHP haben , dann werden Sie dies tun begrenzen Sie auch die Größe Ihrer Sitzung. Zum Beispiel gibt es in PHP 5.2 ein Standardspeicherlimit von 16 MB, das jedoch je nach Installation variieren kann.

Die Verwendung des gesamten Speichers für die Sitzung macht übrigens nur wenig Sinn.

Neben diesen harten Grenzen gibt es vielleicht Leistungsgrenzen, die sich auf die Anzahl der Congress-Anfragen beziehen, wie schnell Ihre Festplatte ist usw.

Da Ihre Frage ziemlich kurz ist, nehme ich an, dass Sie bis jetzt noch keine konkreten Probleme hatten, also denke ich, dass dies nicht in Betracht kommt. Z.B. Memcached verwenden, wenn Sie nicht wirklich brauchen, wäre nur Overhead. Neben der Diskussion von Designentscheidungen (niemals in Sitzungen zwischenspeichern), die überhaupt nicht beantwortet werden können.

Die 100 oder 200 Kilobyte pro Sitzung (suchen Sie das Sitzungsverzeichnis auf Ihrem System und schauen Sie sich an, wie groß die Dateien werden) sollte Ihr Programm nicht beschädigen. Wie bereits erwähnt, sollten Sie darauf achten, dass alte Sitzungsdateien, die nicht mehr benötigt werden, nach einer gewissen Zeit automatisch entfernt werden.

Um mehr über Ihre Session-Konfiguration in PHP zu erfahren, lesen Sie bitte Session Runtime Configuration im PHP Manual .

    
hakre 04.05.2011, 14:57
quelle
3

Eine Menge von dem, was Sie fragen, hängt davon ab, wie viele Benutzer Sie erwarten und welche Art von Hardware Sie verwenden. Angenommen, Ihre PHP-Konfiguration verwendet den Dateispeicher für Sitzungsinformationen (Standard) und Sie verfügen über ausreichend tmp-Speicherplatz. In der Sitzung können ziemlich große Datenblöcke gespeichert werden.

Persönlich habe ich ein Dutzend Datenobjekte (typischerweise Datenbankergebnisse, die den Benutzer betreffen) in Sitzungen gespeichert. Die Site befand sich in einem Firmen-Intranet, das etwa zehntausend Anfragen pro Stunde beantwortete. Es war schnell und die Ladung war niedrig. Wenn ich erraten müsste, dass jede Sitzung in der Nähe von 100 KB war.

Ich würde nicht empfehlen, mehr als ein oder zwei Megabyte in einer Sitzung zu speichern. Sie müssen auch sicherstellen, dass PHP und Apache (IIS, was auch immer) sich selbst bereinigen. Wenn Sie viele Sitzungsdaten speichern, wird der temporäre Speicher schnell gefüllt.

Wenn Sie wirklich so etwas wie dieses blitzschnell machen wollen, und das Geld haben, gehen Sie für ein SSD-Laufwerk. Das würde den Abruf noch schneller machen.

Hoffe, das hilft.

    
Chad 03.05.2011 17:05
quelle
2
0xAli 03.05.2011 17:03
quelle
1

$ _ SESSION ist nicht zum Caching.

Wenn Sie Dinge cachen müssen, verwenden Sie APC oder Memcached oder sogar Redis .

    
tereško 03.05.2011 16:42
quelle
1

Die Menge der Daten in Ihrer Sitzung wirkt sich auf die Leistung aus. Wenn Sie beabsichtigen, Dateien für die Sitzung zu verwenden, beachten Sie, dass PHP möglicherweise einen Engpass auf der Festplatte verursacht. Das Lesen, Schreiben und Serialisieren dieser Daten kann zu schwerwiegenden Festplatten-I / O führen, was schlecht ist.

Was eine harte Obergrenze angeht, vermute ich, dass diese Grenzen mit denen Ihres Dateisystems übereinstimmen. Wenn Sie beispielsweise große Datenmengen in der Sitzung speichern und Ihre Festplatte füllen, können Sie keine weiteren Sitzungen schreiben.

Durch die Verwendung von memcached werden die Probleme mit der Festplatten-E / A-Leistung verringert, da das Schreiben und Lesen von memcached wesentlich schneller ist. Ihre Grenzen dort sind 1 MB pro Sitzung, gemäß der Memcached-Spezifikation. Ihr gesamter Speicherplatz für Sitzungen ist die Größe der Memcache-Instanz, die Sie starten (diktiert durch das Flag -m beim Starten der Memcache-Instanz).

    
Chris Henry 03.05.2011 17:04
quelle

Tags und Links