Welches ist die beste Methode, um json so zu komprimieren, dass es in einem speicherbasierten Speicher wie redis oder memcache gespeichert wird?

9

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?

    
DhruvPathak 20.03.2013, 14:06
quelle

4 Antworten

8

Wir verwenden nur gzip als Kompressor.

%Vor%

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.

    
Alfe 20.03.2013, 16:34
quelle
2

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).

    
Jonatan Hedborg 21.03.2013 09:50
quelle
1

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.

    
gukoff 06.07.2017 11:23
quelle
0

Eine andere Möglichkeit wäre die Verwendung des MongoDB-Speicherformats BSON .

Sie finden zwei Python-Implementierungen auf der Implementierungsseite dieser Site.

edit: Warum nicht einfach das Wörterbuch speichern und beim Abruf in json konvertieren?

    
Ivo 20.03.2013 14:10
quelle

Tags und Links