Hello,
Ja, 2MB ist die absolute Grenze für das erste Verfahren.
ca. 2GigaBytes sind dann die Grenze für das zweite Verfahren.Bei dem mir der wesentliche Unterschied immer noch nicht klar geworden ist :-(
Das erste Verfahren serialisiert im Hauptspeicher ein Riesengroßes Array und speichert dieses komplett ab. Um es deserialisieren zu können, muss es auch komplett eingelesen werden. Da liegt dann die Grenze, da man nur einen beschränkten Hauptspeicher für seine Scripte zur Verfügung hat und das alles ja auch ausgepackt und umgestapelt werden muss. Bei ca. 1MB Filegröße ist dann eben Ende.
Da fällt mir noch eine kleine Verbesserung ein. Wir müssen den Stream-Speicher, also den String, in den wir die Datei einlesen, sofort nach der deserialisierung des Arrays wieder freigeben in der Funktion, da ja von einigen der Funktionen noch andere Arrays angelegt werden während der Lebensdauer der Funktion. Danach werden die lokalen Variablen der Funktion sowieso wieder freigegeben.
Das zweite Verfahren speichert die Daten mit fester Satzlänge auf die Platte. Felder, die man nicht ausgefüllt hat, bleiben dann "leer". Da PHP noch keine vernünftige Unterstützung für eigene Datenstructuren (Record, Struct) bietet, habe ich der Einfachheit halber für die erste Version ein Array für die satzinterne Struktur benutzt. Das hat den Vorteil, dass man variante Sätze aufbauen kann aber den Nachteil, dass es zusätzlichen Platz kostet und Felder des Satzes nicht direkt adressierbar sind. Das ist für die Suchfunktionen wesentlich.
Die dritte und letzte Variante dieses Zyklus (lineares Speichern von Daten)wird dann die Variante mit fester Satzstruktur sein, die man auch benutzen kann, um aus einer MySQL-Tabelle ein Backup zu ziehen, dass dann per ftp downloaded werden kann. Da haben ja viele eingetlich Probleme, nur sie wissen es nicht, weil sie noch nie eine Datensicherung von ihrer MySQL-DB gemacht haben. Und wenn sie es dann versuchen, stellen sie fest, dass sie an ihre DUMP-Files nicht rankommen... Diese Datei kann man dann mit gz einpacken.
Liebe Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau