Seite 1 von 1

cPickle Alternative

Verfasst: Dienstag 25. Oktober 2005, 20:30
von 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

Verfasst: Dienstag 25. Oktober 2005, 20:37
von Leonidas
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.

Re: cPickle Alternative

Verfasst: Dienstag 25. Oktober 2005, 20:41
von gerold
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
:-)

Re: cPickle Alternative

Verfasst: Dienstag 25. Oktober 2005, 22:20
von 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?

Verfasst: Mittwoch 26. Oktober 2005, 06:42
von jens
Leonidas hat geschrieben:Edit: Siehe auch die passende Kategorie (serialization+python) im Comprehensive Bookmark Archive :)
gibt:
no results for this query
:shock:

Verfasst: Mittwoch 26. Oktober 2005, 18:26
von Leonidas
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.

Re: cPickle Alternative

Verfasst: Freitag 28. Oktober 2005, 10:46
von 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 ;)

Verfasst: Freitag 28. Oktober 2005, 10:49
von t0m
Ich meine natürlich marshal. Das ist ja in diesen kleinen Test ja das schnellste!

Re: cPickle Alternative

Verfasst: Freitag 28. Oktober 2005, 19:52
von Leonidas
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.

Verfasst: Samstag 29. Oktober 2005, 17:28
von t0m
ORM? Was ist das?

Verfasst: Samstag 29. Oktober 2005, 18:41
von Leonidas
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.

Verfasst: Samstag 29. Oktober 2005, 20:40
von 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?

Verfasst: Sonntag 30. Oktober 2005, 13:14
von Leonidas
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.

Verfasst: Sonntag 30. Oktober 2005, 23:29
von BlackJack
Aber schneller als `cPickle` war doch eine Anforderung.

Verfasst: Mittwoch 2. November 2005, 17:53
von Leonidas
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