Schnellste Möglichkeit zum speichern und laden einer großen Wörterbuch in Python
Habe ich ein relativ großes Wörterbuch. Wie kann ich die Größe wissen? gut, wenn ich speichern Sie es mit cPickle
die Größe der Datei wächst ca. 400Mb. cPickle
soll viel schneller sein als pickle
aber das laden und speichern dieser Datei dauert nur eine Menge Zeit. Ich habe einen Dual-Core-laptop 2.6 Ghz mit 4GB RAM auf einem Linux-Rechner. Hat jemand irgendwelche Vorschläge für ein schnelleres speichern und laden von dictionaries in python? Dank
Was sind die Schlüssel und Werte in Ihrem Wörterbuch? Beliebigen Python-Datentypen?
würde es möglich sein, mit sqlite statt, so dass Sie nicht haben, laden Sie die ganze Sache in Erinnerung?
Setzen Sie das Protokoll argument cPickle 2
die Tasten sind Tupel mit unterschiedlicher Anzahl der Mitglieder von 2 bis 5. und die Mitglieder sind-Zeichenfolge in utf-8 kodiert
würde es möglich sein, mit sqlite statt, so dass Sie nicht haben, laden Sie die ganze Sache in Erinnerung?
Setzen Sie das Protokoll argument cPickle 2
die Tasten sind Tupel mit unterschiedlicher Anzahl der Mitglieder von 2 bis 5. und die Mitglieder sind-Zeichenfolge in utf-8 kodiert
InformationsquelleAutor Hossein | 2011-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die Protokoll=2 option von cPickle. Die Standard-Protokoll - (0) wird viel langsamer, und produziert viel größere Dateien auf der Festplatte.
Wenn Sie nur wollen, um die Arbeit mit einem größeren Wörterbuch als Speicher halten kann, die Regal Modul ist eine gute quick-and-dirty-Lösung. Es wirkt wie eine in-memory-dict, sondern speichert sich auf der Festplatte statt im Arbeitsspeicher. Regal basiert auf cPickle, so sicher sein, stellen Sie Ihr Protokoll auf etwas anderes als 0.
Die Vorteile einer Datenbank wie sqlite über cPickle ist abhängig vom use case. Wie oft werden die Daten schreiben? Wie oft erwarten Sie zu Lesen, wobei jedes datum, das Sie schreiben? Wird Sie jemals wollen, um eine Suche ausführen, der die Daten, die Sie schreiben, oder laden Sie Sie ein Stück zu einer Zeit?
Wenn Sie write-once, read-many, und laden ein Stück zu einer Zeit, verwenden Sie eine Datenbank. Wenn Sie einmal schreiben, einmal gelesen, cPickle (mit einem anderen Protokoll als Standardprotokoll=0) wird schwer zu schlagen ist. Wenn Sie wollen einfach nur eine große, persistente dict, verwenden Sie Regal.
InformationsquelleAutor Andrew
Sqlite
Könnte es sich lohnen, zum speichern der Daten in einer Sqlite Datenbank. Obwohl es einige Entwicklung Aufwand bei der Umgestaltung Ihres Programms für die Arbeit mit Sqlite ist, wird es auch viel einfacher und performante Abfrage der Datenbank.
Erhalten Sie auch Transaktionen Atomarität, Serialisierung, Kompression, etc. kostenlos.
Je nachdem, welche version von Python, die Sie verwenden, die du vielleicht schon hast sqlite eingebaut.
InformationsquelleAutor Ezra
Können Sie testen, komprimieren Sie Ihre dictionnary (mit einigen Einschränkungen zu sehen : dieser Beitrag) ist es effizient, wenn der Zugriff auf die Festplatte ist der Flaschenhals.
InformationsquelleAutor philnext
Ich weiß, es ist eine alte Frage, aber nur als update für diejenigen, die noch auf der Suche nach einer Antwort auf diese Frage:
Die
protocol
argument wurde aktualisiert in python 3 und jetzt gibt es sogar noch schneller und effizienter Optionen (d.h.protocol=3
undprotocol=4
) das funktioniert möglicherweise nicht unter python 2.Sie können darüber Lesen Sie mehr in der Referenz.
Um immer die beste-Protokoll unterstützt die python-version Sie verwenden, können Sie einfach
pickle.HIGHEST_PROTOCOL
. Das folgende Beispiel ist entnommen aus dem Referenz:InformationsquelleAutor Moran Neuhof
Das ist eine Menge von Daten...
Welche Inhalte hat Ihr Wörterbuch? Wenn es nur primitive oder Feste Datentypen, vielleicht eine Datenbank oder ein benutzerdefiniertes Datei-format ist die bessere Wahl?
InformationsquelleAutor Freax