Raketenbastler: PHP::serialize() - Zu hoher Speicherverbrauch - Alternativen?

Beitrag lesen

Situation:

Ich hatte einen echt großen Array, den ich serialisiert gespeichert und gelesen habe.

Zuletzt war er ~48 MB groß. Beim Speichern beschwerte sich PHP wegen der Überschreitung des Speicherlimits von 128MB - und zwar genau in der Zeile, wo

file_put_contents( $file, serialize( $BigArray) );

drin stand. Der übrige Speicherverbrauch (außer dem Array) ist vernachlässigbar.

Das Problem mit dem aktuellen Skript habe ich mit einem Technologiewechsel gelöst (↦ squlite3). Und bin zufrieden.

Frage in die Runde:

$BigArray = unserialize( file_get_contents( $file ) );

war sehr schnell.

Gibt es womöglich eine speichersparende Methode um solche Datenmengen für Systeme ohne Voraussetzungen (wie z.B. eine Datenbank) wegschreiben zu können?

Hinweise:

  • unserialize() hat dieses speicherfressende Verhalten nicht, die auf einem System mit 256MB Limit erzeugte Datei konnte ich problemlos (und sehr schnell!) einlesen.
  • json_encode() meine ich nicht, weil json_decode() bei solchen Datenmengen spürbar langsamer wird.
  • Die Alternative sollte also serialisierte Daten erzeugen, die ich mit unserialize() einlesen kann.
  • Wenn das serialisieren mit der alternativen Methode länger dauert, dann ist das kein Problem.