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

LanX-
 2008-07-19 13:56
#112326 #112326
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Hallo
tschulz+2008-07-18 21:32:47--
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" },
                                        ],
                  };


4 Ideen:

1. ein großes Hash wird weniger Platz allokieren und verschwenden, wenn du einen Trenner nimmst der definitiv nicht vorkommt, könntest du schreiben:
$hashref->{name1-#idx-abc}
IMHO gibts noch so ein altes Perl4 Konstrukt für multidiminsionales Strukturen mit ';' als Trenner !?! also $hashref->{name1;#idx;abc}

2. Es gibt IMHO noch so eine zwischenform von Hashes und Arrays, [s]named Arrays oder so[/s] pseudo-hash, wo jedem Index ein Key zugeordnet werden kann, gerade um Platz zu sparen. Das war aber experimental. (EDIT: siehe auch Class::PseudoHash)

3. obiges selbstbasteln: zum einen kannst du dir mit Hashties Strukturen bauen die oberflächlich wie Hashes aussehen, inwendig aber viel kompakter sind. z.B. CPAN:Tie::Hash::Array

4. Zum anderen, wenn sich die key auf der unetren ebene (abc,def, ...) prinzipiell immer wiederholen, dann leg ein Hash an das pro Key ein eindeutigen Lookup-Index zuweist sodass du nur ein Array brauchst.

Hoffe davon hilft was, habe gerade kein perl zum Testen zur Verfügung

Grüße
Rolf

EDIT: Grundsätzlich ist Swapen kein problem solange es möglichst selten vorkommt, d.h. Daten und Ablauf so gestalten dass man möglichst lange imgleichen Speicherbereich bleibt.

View full thread Speicheroptimierung bei Hash/Array