[Python-de] dictionary > hauptspeicher

Jochen Wersdörfer jochen-python at wersdoerfer.de
Don Sep 22 14:54:44 CEST 2005


Am Donnerstag, 22. September 2005 13:23 schrieb Diez B. Roggisch:
> >
> > Tjo, also irgendwie brauche ich da wohl eine Datenstruktur, die
> > dann eben auf die Platte schreibt, sobald kein Hauptspeicher mehr
> > da ist. Schön wäre natürlich, wenn nur selten vorkommende Strings
> > auf Platte ausgelagert würden. Gibt es soetwas schon? Oder sollte
> > man da Berkely DB oder etwas ähnliches verwenden?
> 
> Ja, sowas gibt: heisst datenbank :) Ob berkleydb dabei gut genug ist - KA. 
> Abgesehen davon, das uU auch andere Herangehensweisen funktionieren:

Naja, ich denke es wird eine Hash-DB sein müssen, da die doch
prinzipiell schneller sein sollte als eine relationale DB, oder?

Ich bekomme die Daten schon aus einer mysqldb und schreibe sie
auch wieder in eine solche, nur - wenn ich vorher feststellen
will, ob es einen bestimmten Eintrag schon gibt, brauche auf
diesem Feld einen Index. Wenn ich da aber einen Index drauf habe,
kann ich dort nicht mehr schnell inserten :/. 

Man könnte auch das Feld für den String uniq erklären und dann
inserten, was das Zeug hält, und auf die Fehler pfeifen, aber
dummerweise muß ich noch eine zweite, aufwändige Geschichte mit
den Strings machen, bevor ich sie in die DB pumpen kann. Wenn
ich das auch für alle Duplikate machen muß, würde das, ähm, ewig
dauern.

Ha, ich glaub ich habs. Ich inserte erst, dann wird der Index
gerechnet und dann update ich nur noch das Feld für die aufwändigere
Geschichte... Danke :).
 
> Wenn deine strings laenger sind als ein MD5-hash, dann koenntest du im ersten 
> schritt einen index aus
> 
> (hash, position_im_file) 
> 
> erstellen. Der sollte noch in den Speicher passen... Die sortierst du dann 

Gute Idee, md5 dürfte nahezu ideal komprimieren... aber auch das wird
leider nicht mehr in den Speicher passen, nein.

Gruss,
Jochen