Thread Speicheroptimierung bei Hash/Array (9 answers)
Opened by tschulz at 2008-07-18 23:32

tschulz
 2008-07-18 23:32
#112313 #112313
User since
2008-07-18
3 Artikel
BenutzerIn
[default_avatar]
Hallo Perl-Community,

Ich habe eine Datenstruktur, die aus einem Hash besteht, der Arrays beinhaltet, die Hashes beinhalten. Beispiel:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$hashref = {
                       name1 => [
                                           { abc => "datax",
                                             def => "datay" },
                                           { abc => "datax",
                                             def => "datay" },
                                        ],
                       name2 => [
                                           { abc => "datax",
                                             def => "datay" },
                                           { abc => "datax",
                                             def => "datay" },
                                        ],
                  };


Insgesamt existieren (hier als Beispiel) 200.000 Strings, die ich hier vereinfacht mit "data..." bezeichnet habe. Sie sind fast nie länger als 10 oder 15 Zeichen und reines ASCII. Hashes haben meistens 5 Namen-Wert-Paare.

Problem:
Diese Datenstruktur, mit z.b. 200.000 Strings, benötigt 150 - 200 MB RAM, und das ist zu viel; sobald mehrere Hunderttausend in den Speicher geladen werden, geht unserem Server der Abeitsspeicher aus. Aufrüstung ist finanziell eher nicht möglich.

Ich vermute, dass Perl entweder bei den vielen, kleinen Hashs von Anfang an jeweils mehr Speicher allokiert, als nötig wäre, um später besser weitere Werte einfügen zu können, oder dass Perl sich in einer Art Memory-Pool zu viel Speicher "gesichert" hat.

Wie kann man die Datenstruktur optimieren oder Perls Verhalten beid er Speicherverwaltung verbessern? Hat jemand schon mal ähnliche Erfahrungen gemacht? Ich bin für jeden Hinweis dankbar.

Gruß
Tobias

View full thread Speicheroptimierung bei Hash/Array