Maximalgrösse von Arrays
Fritz
- php
Hallo zusammen
Ich bin an einem Projekt, welches sehr vielen Variablen über mehrere Seiten speichern muss und verwende dazu Sessions. Nun habe ich eine Frage, nur damit ich dann nicht auf einmal, wenn alles schon fertig ist, feststelle, dass ich die falsche Technik verwendet habe. Gibt es eine maximale Anzahl Elemente, die im Array $_SESSION[] gespeichert werden können, oder ist das im Prinzip beliebig.
Danke und Gruss
Fritz
echo ($light == true) ? 'Guten Tag,' : 'Guten Abend,';
im Prinzip ist es beliebig aber dennoch durch gewisse Faktoren eingeschränkt. Allerdings bezweifle ich das man an diese Grenzen stoßen wird mit ein paar 100 oder 1000 Elementen. Allerdings wenn du es sicher wissen willst warum fügst du nicht einfach in einer Schleife eine entsprechende Anzahl von Elementen in einen Session Array und schaust was passiert?
Grüße
Markus
Allerdings wenn du es sicher wissen willst warum fügst du nicht einfach in einer Schleife eine entsprechende Anzahl von Elementen in einen Session Array und schaust was passiert?
Gute Idee, danke
Hello,
Allerdings wenn du es sicher wissen willst warum fügst du nicht einfach in einer Schleife eine entsprechende Anzahl von Elementen in einen Session Array und schaust was passiert?
Das habe ich doch neulich für jemanden hier gemacht und das Ergebnis auch hier gepostet. Der Thread könnte sogar noch im laufenden Forum sein...
So ungefähr benötigt ein Array pro Element zwischen 70 und 100 Bytes für die Verwaltung zuzüglich der Nutzdatenmenge. Wenn man nun große Datenblöcke hat, ist das Verhältnis also günstiger.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo
Das habe ich doch neulich für jemanden hier gemacht und das Ergebnis auch hier gepostet. Der Thread könnte sogar noch im laufenden Forum sein...
Da das auf meine Nachfragen hin geschah, hab ich das auch mal aus dem Archiv rausgesucht.
Bitteschön: http://forum.de.selfhtml.org/archiv/2007/11/t161805/#m1053145
Tschö, Auge
Hello,
Da das auf meine Nachfragen hin geschah, hab ich das auch mal aus dem Archiv rausgesucht.
Bitteschön: http://forum.de.selfhtml.org/archiv/2007/11/t161805/#m1053145
Dankeschön :-)
Das Ergebnis des Versuches hat mich doch selber ziemlich erschreckt.
Ca. 70 bis 100 Bytes Overhead pro Array-Element (numerischer Index). Das ist unvorstellbar schlecht implementiert. Bei "assoziativem Array" sind es noch mehr.
Und dann muss man auch noch überlegen, ob in der Local Descriptor Table nicht auch nochmal ein Overhead steckt. Ich nehme an, dass PHP (oder wohl besser C++) sich den Speicher extentwise vom OS beschafft und ihn dann intern selber zuteilt. Die 4-Byte-weise Zuteilung spricht jedenfalls dafür.
Das ist das alte Alloc-Modell, dass es schon zu Pascal-Zeiten gab.
Es ist dann manchmal zu überlegen, ob man nicht besser auf eine Datenstruktur mit statischen Typen ausweicht. Die könnte dann in PHP als "String" angelegt werden oder gleich als Random-Access-Datei. Da die ja ohnehin meistens doppelt gepuffert gelesen wird (bei den f-Funktionen im Gegensatz zu den dio-Funktionen, die nur einfach gepuffert lesen), dürfte das Programm bei lesenden Zugriffen gar nicht viel langsamer werden dadurch.
Spannend sind dann nur die schreibenden Zugriffe, wenn ein flush() durch alle Schichten von Applikations-Interface, Hochsprachen-Interface, OS-Interface, Filesystem-Interface, Device-Interface bis auf die kleine magnetische Scheibe durchschlagen muss.
Wahrscheinlich habe ich sogar noch eins vergessen.
Wenn man dann bedenkt, dass die arme Festplatte für die Änderung eines einzigen Bits jedes mal mindestens einen ganzen Cluster lesen und schreiben muss, dann kann man schon verstehen, dass diesem Kerlchen etwas warm um den Actuator wird.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo Fritz,
wir hatten hier ein ähnliches Problem: wir haben massig Daten in der Session gespeichert, es kamen bis zu 800MB zusammen. Grund war eine Auswertung, die schonmal ein paar *hust* Stunden in Anspruch nehmen kann und neben tabellarischer Form auch noch als Excel-DL angeboten wird (wobei die Berechnung natürlich nicht nochmal durchgeführt werden soll). Beschränkt ist die Sessiongröße bei entsprechender Konfig imho nur durch den Plattenplatz.
Soweit hat das ganz gut geklappt. Problematisch wurde das Ganze, als die Sessions dann bspw. am nächsten Tag wieder geöffnet wurden, da 'hing' es beim User schon mal ein paar Minuten.
Daher habe ich die Session entrümpelt und die wichtigen Teile manuell in Dateien ausgelagert (Stichwort serialize), aus denen bei Bedarf die Daten wieder geholt werden können.
Gruß,
Manu
Moin!
Gibt es eine maximale Anzahl Elemente, die im Array $_SESSION[] gespeichert werden können, oder ist das im Prinzip beliebig.
Die Menge an speicherbarer Information ist nur durch den maximal nutzbaren Speicherplatz (Stichwort "memory_limit" in der php.ini) begrenzt.
- Sven Rautenberg
Hallo,
hm, ich dachte, mit einer Registrierung wäre mein Name geschützt?
Gruß Fritz
Moin!
hm, ich dachte, mit einer Registrierung wäre mein Name geschützt?
Nur, wenn du das so einstellst.
Es sei denn, du hast es schon so eingestellt, aber es wirkt nicht - das wäre dann ein Fehler des Forums.
- Sven Rautenberg
Hallo,
Nur, wenn du das so einstellst.
Hm, wieder was gelernt ;-) Danke schön.
Gruß Fritz