Voraussetzung: Python-Objekte mit 2-3 Verschachtelungsebenen, die grundlegende Datentypen wie Ganzzahlen, Strings, Listen und Dicts enthalten. (keine Daten usw.), muss als json in redis gegen einen Schlüssel gespeichert werden. Welches sind die besten verfügbaren Methoden zum Komprimieren von JSON als String für geringen Speicherbedarf? Die Zielobjekte sind nicht sehr groß und haben im Durchschnitt 1000 kleine Elemente. oder etwa 15000 Zeichen bei der Konvertierung in JSON.
zB
%Vor%1 / Gibt es noch andere Möglichkeiten, um json zu komprimieren, um Speicher in redis zu sparen (was auch eine leichte Dekodierung nach sich zieht).
2 / Wie gut wäre ein Kandidat msgpack [http://msgpack.org/]?
3 / Soll ich auch Optionen wie Essiggurken in Erwägung ziehen?
Wir verwenden nur gzip
als Kompressor.
In unserem Anwendungsfall speichern wir das Ergebnis als Dateien, wie Sie sich vorstellen können. Um nur speicherinterne Zeichenfolgen zu verwenden, können Sie auch ein cStringIO.StringIO()
-Objekt als Ersatz für die Datei verwenden.
Ein einfacher "Nachprozess" -Weg besteht darin, eine "short key name" -Karte zu erstellen und den generierten JSON vor dem Speichern und vor dem Deserialisieren auf ein Objekt auszuführen. Zum Beispiel:
%Vor%Gehen Sie einfach durch den JSON und ersetzen Sie den Schlüssel- & gt; -Wert auf dem Weg zur Datenbank und den Wert & gt; -Schlüssel auf dem Weg zur Anwendung.
Sie können auch gzip für extra goodness (wird aber nicht ein String sein).
Wenn du willst, dass es schnell ist, versuche lz4 . Wenn Sie es besser komprimieren möchten, gehen Sie für lzma .
Gibt es noch andere Möglichkeiten, json zu komprimieren, um Speicher zu sparen? redis (auch eine leichte Decodierung hinterher möglich)?
Wie gut wäre ein Kandidat msgpack [ Ссылка ?
Msgpack ist relativ schnell und hat einen kleineren Speicherbedarf. Aber ujson ist im Allgemeinen schneller für mich. Sie sollten sie mit Ihren Daten vergleichen, die Kompressions- und Dekompressionsraten und die Kompressionsrate messen.
Soll ich auch Optionen wie Essiggurken in Betracht ziehen?
Betrachte sowohl Pickle (cPickle in partucular) als auch Marshal. Sie sind schnell. Aber denken Sie daran, dass sie nicht sicher oder skalierbar sind und Sie für die Geschwindigkeit mit der zusätzlichen Verantwortung bezahlen.