dictionary mit vielen Einträgen via pickle speichern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Tyrax
User
Beiträge: 73
Registriert: Mittwoch 4. Februar 2009, 18:31

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hast du mal cPickle ausprobiert?
Das Leben ist wie ein Tennisball.
Tyrax
User
Beiträge: 73
Registriert: Mittwoch 4. Februar 2009, 18:31

Nö, das werde ich jetzt mal machen. Danke schonmal. Tyrax
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Tyrax
User
Beiträge: 73
Registriert: Mittwoch 4. Februar 2009, 18:31

Ja, ich muss das leider trennen. Tyrax
fail
User
Beiträge: 122
Registriert: Freitag 11. Januar 2013, 09:47

Wäre vielleicht eine Datenbank(sqllite) angebracht?
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Tyrax
User
Beiträge: 73
Registriert: Mittwoch 4. Februar 2009, 18:31

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
Antworten