Optimierung von array_merge_recursive

bauchinj

Erfahrenes Mitglied
Hallo!

Hab 2 zielmich große arrays (insgesamt bis zu 1 Million Einträge, wobei das Memory limit nie überschrieben wird). Diese will ich nun mergen und als json abspeichern. Hab bereits einige Stunden damit verbracht, den code soweit wie möglich zu optimieren und hab schon einige Sekunden runtergeschraubt. Bei array_merge_recursive häng ich jetzt aber komplett. Füge ich die neuen Array einfach ans Array dran, also nur appenden, dann benötige ich für die selbe Datenmenge etwa die Hälfte der Zeit:

PHP:
$wholeArray[] = $newArray;

Da dies aber nicht im Sinne des Projektes ist, muss ich alle gleichen Einträge "überschreiben" bzw. ignorieren, damit im Endeffekt bei der abschließenden JSON-Speicherung Platz gespart wird (hab die Dateigröße des JSON-Files schon von 2 MB auf 26 KB reduziert.... aber eben mit der trägen Funktion)

Hat jemand eine Idee, wie ich diese Methode umgehen kann. Hab schon an andere Script-Sprachen gedacht, weiß aber nicht recht, ob das wirklich Zeit sparen würde. Wäre dankbar für jeden Tip...

Danke bauchinj
 
Hab keine passenden Erfahrungen mit anderen Scriptsprachen. Darum kann ich dazu keine Meinung haben. Sorry.
 
Hi,

könnte hier noch Perl vorschlagen, aber das hat auch wenig Sinn wenn du damit noch nichts gemacht hat. Ich würde hier aber versuchen, eine Art Hashmap zu verwenden. Diese sind recht schnell im Zugriff auf die Elemente und es gibt auch keine doppelten Schlüssel.

Gruß
BK
 
Danke Bratkartoffel!
Hab kurz ein bisschen in Perl eingelesen, hab recht gute Tutorials gefunden und bin fasziniert, wie schnell diese Sprache eine 4,8MB große Datei ausliest....

Zum Thema Hashmap bin ich bis dato aber leider noch nicht ganz schlau geworden. Vielleicht hast du einen (oder mehrere) Links für mich - wäre sehr dankbar dafür!

mfg
 
Hi,

habe zwar selber noch nicht allzu viel in Perl umgesetzt, aber soweit ich das bei Google richtig interpretiert habe, solltest du es in etwa so machen können:

Perl:
# Create
my %myhash=();

# Populate
$myhash{ 'key' } = 'value'; # hash

# Get
$value = $myhash{ 'key' };

Hier sollte etwas mehr stehen ;)

Gruß
BK
 
Wenn du mit Pearl arbeiten willst, empfehle ich dir einen Neuen Thread zu eröffnen der dann auch im richtigen Forum steht, damit die Pearl-Spezialisten lesen.
 
Zuletzt bearbeitet:
Zurück