Seite 1 von 1

dictionary mit vielen Einträgen via pickle speichern

Verfasst: Dienstag 16. April 2013, 16:15
von Tyrax
Hallo,

ich erzeuge ein dictionary mit etwa 5.000.000 Einträgen und möchte es (zB mit pickle) speichern, um es später wieder verwenden zu können. Die einzelnen Einträge sind eher kurz, z.B. (12, 34): (56, 78).

Wenn ich nun mein Object (in einer Liste mit ein paar integers) via

Code: Alles auswählen

pickle.dump(object, filename)
speichere, dauert das gerne mal 'ne volle Stunde, das .dmp-file ist etwa 350MB groß. Ich brauche leider das gesamte dictionary für den nächsten Schritt. Daher meine Fragen:

Kann man bei pickle was 'falschmachen', z.b. zu tiefe Verschachtelung von Tupeln?
Gibt's für mein Problem bessere Alternativen (shelve scheint nicht geeignet)?

Danke und Beste Grüße, Tyrax

Re: dictionary mit vielen Einträgen via pickle speichern

Verfasst: Dienstag 16. April 2013, 16:19
von EyDu
Hast du mal cPickle ausprobiert?

Re: dictionary mit vielen Einträgen via pickle speichern

Verfasst: Dienstag 16. April 2013, 16:23
von Tyrax
Nö, das werde ich jetzt mal machen. Danke schonmal. Tyrax

Re: dictionary mit vielen Einträgen via pickle speichern

Verfasst: Dienstag 16. April 2013, 18:06
von Hyperion
Musst Du das denn in einem separaten Script weiterverarbeiten? Wenn es Dir auf Zeitersparnis ankommt, könntest Du doch ggf. das ganze im RAM belassen und den "nächsten" Schritt einfach im selben Programm durchführen?

Re: dictionary mit vielen Einträgen via pickle speichern

Verfasst: Dienstag 16. April 2013, 18:33
von Tyrax
Ja, ich muss das leider trennen. Tyrax

Re: dictionary mit vielen Einträgen via pickle speichern

Verfasst: Dienstag 16. April 2013, 18:57
von fail
Wäre vielleicht eine Datenbank(sqllite) angebracht?

Re: dictionary mit vielen Einträgen via pickle speichern

Verfasst: Dienstag 16. April 2013, 20:30
von noisefloor
Hallo,

bei der stattlichen Zahl von 5 Mio einträgen kann man in der Tat über eine DB nachdenken. In diesem Falle böte sich ein KV-Store an. Python hat ootb welche an Bord (keine Ahnung, wie schnell die sind), ansonsten ist Redis immer eine gute Wahl :-)

Gruß, noisefloor

Re: dictionary mit vielen Einträgen via pickle speichern

Verfasst: Dienstag 16. April 2013, 21:24
von Tyrax
Danke fail und noisefloor, ich hatte auch schon einen thread zu einem ähnlichen Thema von SQLite und DBs gelesen. cPickle ist aber schonmal deutlich schneller als pickle und damit bin ich erstmal zufrieden.

Danke nochmal an EyDu. Grüße, Tyrax