cPickle Alternative

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
t0m

Hiho,

ich wollte fragen ob es eine Alternative zu cPickle gibt? Es sollte möglichst schnell sein und Dictionaries abspeichern/laden können.
Ach ja, kein MySQL :)

dankö schonmal,
t0m
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

YAML, JSON, SQLObject (und die ganzen anderen ORMs), PyXO, XMarshaL, gnosis-Tools uvm.

Edit: Siehe auch die passende Kategorie (serialization+python) im Comprehensive Bookmark Archive :)

Edit: URL korrigiert.
Zuletzt geändert von Leonidas am Mittwoch 26. Oktober 2005, 18:25, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

t0m hat geschrieben:ich wollte fragen ob es eine Alternative zu cPickle gibt? Es sollte möglichst schnell sein und Dictionaries abspeichern/laden können.
Hi t0m!

Hier ein interessanter Auszug aus der Homepage von XmarshaL:

Code: Alles auswählen

Differences between XMarshaL and xml.marshal.generic
  ----------------------------------------------------

1) Speeeeed: the xml-string and substrings are constructed by string
   interpolation where possible, not by joining string lists. This is
   much faster for some types of objects like large sequences.

   Dumping a large list object (x = range(100000)) with some different
   methods shows the difference (my machine, Linux, Python 2.3b2):

        Method  : dump time, speed factor,   string size
        ________________________________________________
        marshal :    0.01 s,         0.01,  500005 bytes
        cPickle :    0.09 s,         0.11,  788896 bytes
        pickle  :    0.93 s,         1.18,  788896 bytes
        XMarshaL:    0.79 s,         1.00, 1589008 bytes
        gnosis  :    3.99 s,         5.05, 3989099 bytes
        PyXML   :  806.70 s,      1021.14, 1588951 bytes

   Ok, there's no chance for XMarshaL to compare with marshal or
   cPickle, but speed is comparable with pickle and even faster than
   gnosis. And xml.marshal.generic seems to have a serious
   performance problem!
http://www.dezentral.de/warp.html?http: ... /XMarshaL/

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

t0m hat geschrieben:ich wollte fragen ob es eine Alternative zu cPickle gibt? Es sollte möglichst schnell sein und Dictionaries abspeichern/laden können.
Ich weiss, "Warum"-Fragen sind böse... aber warum suchst Du eine Alternative?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Leonidas hat geschrieben:Edit: Siehe auch die passende Kategorie (serialization+python) im Comprehensive Bookmark Archive :)
gibt:
no results for this query
:shock:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:
Leonidas hat geschrieben:Edit: Siehe auch die passende Kategorie (serialization+python) im Comprehensive Bookmark Archive :)
gibt:
no results for this query
:shock:
Ich habe die URL nun oben korrigiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
t0m

Danke für die Antworten!
BlackJack hat geschrieben:
t0m hat geschrieben:ich wollte fragen ob es eine Alternative zu cPickle gibt? Es sollte möglichst schnell sein und Dictionaries abspeichern/laden können.
Ich weiss, "Warum"-Fragen sind böse... aber warum suchst Du eine Alternative?
Nun ja, ich muss alle paar Minuten (oder sogar alle 30sek) ein relativ großes Dictionary abspeichern. Jetzt möchte ich natürlich das das so schnell wie möglich geht..

Ich werde mir mal XMarshaL angucken ;)
t0m

Ich meine natürlich marshal. Das ist ja in diesen kleinen Test ja das schnellste!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

t0m hat geschrieben:Nun ja, ich muss alle paar Minuten (oder sogar alle 30sek) ein relativ großes Dictionary abspeichern. Jetzt möchte ich natürlich das das so schnell wie möglich geht..
In diesem Falle wäre es glaube ich sinnvoller ein ORM zu nutzen: Vorteil: du Arbeitest mit Python-Datentypen (Klassen). Weiterer Vorteil: die Daten werden automatisch in der Datenbank gespeichert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

t0m hat geschrieben:ORM? Was ist das?
Object-Relational-Mapping ist (vereinfacht) eine Technik, die es ermöglicht, automatisch Objekte (Klassen) so zu plätten, dass man sie in relationalen Datenbanken speichern kann.
SQLObject 0.7 Doku hat geschrieben:It allows you to translate RDBMS table rows into Python objects, and manipulate those objects to transparently manipulate the database.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Irgenwie glaube ich nicht so recht daran, dass so ein ORM wesentlich schneller ist als `pickle` da ein ORM grundsätzlich die gleiche Arbeit leisten muss plus Aufbereitung der Daten für die Datenbank und Übermittlung an selbige. An der Stelle "dump"t `pickle` die Daten einfach in eine Datei.

Hat sich durch Messen eigentlich überhaupt schon herausgestellt das `pickle` für die Aufgabe zu langsam ist? Oder ist das nur eine Vermutung?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Irgenwie glaube ich nicht so recht daran, dass so ein ORM wesentlich schneller ist als `pickle` da ein ORM grundsätzlich die gleiche Arbeit leisten muss plus Aufbereitung der Daten für die Datenbank und Übermittlung an selbige. An der Stelle "dump"t `pickle` die Daten einfach in eine Datei.
Nein, ein ORM ist sicherlich nicht schneller als pickle.
Jedoch kann man auf die Datenbank auch einfach aus anderen, nicht so tollen Programmiersprachen zugreifen, was bei pickle nicht so einfach ist. Dafür gibt es dann aber auch Alternativen wie XMarshaL, die die Klassen in XML Dateien dumpen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Aber schneller als `cPickle` war doch eine Anforderung.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Aber schneller als `cPickle` war doch eine Anforderung.
Er hat im ersten post gesagt, dass es moeglichst schnell sein soll - dass es schneller als cPickle sein muss habe ich dort nicht rausgelesen. :P
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten