Christian Kruse: Daten in Baumstruktur speichern

Beitrag lesen

Hallo Andreas,

Tatsaechlich muss ueberigens eine Verzeichnis-Struktur
nicht komplett im Speicher gehalten werden, um einen
Baum zu haben.
Beziehst Du Dich auf meinen vorherigen Verzeichnis-Baum in
dem die Postings gespeichert werden könnten?

Ich beziehe mich auf Michaels Aussage, dass bestimmte
Dateisysteme ihre Datei- und Verzeichnis-Listen als
Baum-Strukturen im Speicher cachen. Man muss die Listen nicht
cachen, um Baumstrukturen zu haben.

Das haengt vom verwendeten Dateisystem ab. Hoert auf von
Betriebssystemen zu reden und fangt an ueber
Dateisysteme zu reden. Auch bei Solaris gibt es
verschiedene Datei-Systeme (und auch verschiedene
Versionen von Dateisystemen!), die man einsetzen kann.
OK. Glaube so langsam verstehe ich das besser, die
Verschiedenen Dateisysteme haben eigene
Caching-Mechanismen,

Korrekt.

und lagern wenn der Ram "voll" ist Daten in den SWAP-Space
aus,

Nein, in den Swap-Space werden nur Daten ausgelagert, wenn
der RAM zu klein ist. Will heissen, der Speicher jeder
Applikation wird in den Swapspace ausgelagert, wenn der
Hauptspeicher zu voll wird.

so machst das zumindest mein Linux( ;-) ich weiß, aber
bin gerade nicht sicher welches Dateisystem ich da habe,
glaube ext2fs).

Die Ausgabe von 'mount' sollte das anzeigen:

ckruse@sunshine:~/dev/www/selfforum $ mount
/dev/ad0s2a on / (ufs, local)
/dev/ad0s1 on /mnt/win (msdos, local)
/dev/ad0s2f on /usr (ufs, local, soft-updates)
/dev/ad0s2e on /var (ufs, local, soft-updates)
procfs on /proc (procfs, local)
linprocfs on /usr/compat/linux/proc (linprocfs, local)
rain:/home/ckruse on /usr/home/ckruse/dev (nfs)
/dev/cd0c on /cdrom (cd9660, local, read-only)
ckruse@sunshine:~/dev/www/selfforum $

Es gibt wesentlich sinnvollere Speicherarten fuer
Hashes als die Ausgabe von print_r. Und das Einbinden
wuerde ich eh ganz abraten, da gibt es wirklich
schnellere und bessere Speicherarten, einen Hash
aufzubauen. Aber alle Verfahren werden darauf
hinauslaufen, dass sie im guenstigsten Fall linear
sind. Wenn du Pech hast, auch quadratisch.
Leider beschränkt sich meine Sichtweise noch meist auf die
mir in PHP bekannten Möglichkeiten udn Funktionen.

Das hat jetzt mit der Sprache aber wenig zu tun. Verabschiede
dich von der Vorstellung, dass Sprachen dir alles abnehmen.
Das meiste muss man von Hand machen.

Soweit ich das jetzt verstanden habe gibt es sowohl die
Möglichkeit in PERL einen B-Baum zu speichern, wo ich mir
halt noch nicht wirklich vorstellen kann wie das
funkionieren soll, genausowenige verstehe ich wei man
eine Hash speichern können soll, was nicht heitß das
ich was dagegen sagen wollte, ganz im Gegenteil, nur habe
ich mit solchen Dingen noch nie zu tun gehabt und kann es
mir halt nicht vorstellen.

Die einfachste Form eine Hashtable zu speichern waere es,
Key-Value-Paare in die Datei zu schreiben. Ist man naeher an
der Implementation selber, so kann man direkt die
Hashtable-Struktur speichern und so das erzeugen der
Hash-Summen sparen:

index:len:key:len:hashsum:len:data:index:len:key:len:hashsum:len:data...

Index steht dabei fuer den Tabellen-Index. Durch die
len-Felder kann man sich das Ausprobieren und das suchen nach
den Separatoren sparen. Gibt man 'len' jetzt noch ein festes
Format, kann man genau definierte Strings herumkopieren.

Aber beide Algorithmen sind nur linear. Was besseres wirst du
da nicht hinbekommen koennen.

Einen B-Baum zu speichern ist schon schwerer. Da gibt es
verschiedene Strategien. Du koenntest rekursiv zu jedem
Knoten von links nach rechts die Zweige speichern.
Auf diese Art und weise laesst sich der Baum sehr einfach
wiederherstellen.

Aber sicherlich gibt es gerade fuer B-Baeume bessere
Moeglichkeiten. Mir faellt nur gerade keiner ein und ich habe
leider gerade auch kein Algorithmen-Buch zur Hand.

Gruesse,
 CK