2016-05-24 3 views
0

Ich postete einige Code, um JSON (Arrays spezifisch) effizienter auf Code Review zu speichern, aber es begann, StackOverflow-Typ Antworten anzulocken, also dachte ich, ich würde hier posten, um den Zweck nicht den Code zu debattieren.Condense JSON für Bandbreiteneffizienz

JSON wird schnell zum Formatierungsstandard der Wahl für schnelle, bequeme und zuverlässige Kommunikation zwischen Maschinen. Es ist flexibel und weit verbreitet, aber es hat einige Nachteile, wenn es um Datennutzlasten wie die aus Datenbanken geht. Ein JSON-Payload aus einer Datenbanktabelle namens Früchte könnte wie folgt aussehen:

[{"id":1,"abbreviation":"appl","name":"Apple"}, 
{"id":2,"abbreviation":"pear","name":"Pear"}, 
{"id":3,"abbreviation":"bana","name":"Banana"}, 
{"id":4,"abbreviation":"bkby","name":"Blackberry"}, 
{"id":5,"abbreviation":"strw","name":"Stawberry"}, 
{"id":5,"abbreviation":"pech","name":"Peach"}, 
{"id":6,"abbreviation":"plum","name":"Plum"}] 

Die meisten Daten in dieser Nutzlast wird wiederholt, weil der Array-Schlüssel. Dies ist aus einer Bandbreiteperspektive sehr ineffizient und mühsam. Ich habe einen Weg gefunden, um die JSON zu komprimieren, indem die Schlüssel zu entfernen und sie in der ersten Reihe des Array wie folgt setzen:

C[["id","abbreviation","name"], 
[1,"appl","Apple"], 
[2,"pear","Pear"], 
[3,"bana","Banana"], 
[4,"bkby","Blackberry"], 
[5,"strw","Stawberry"], 
[5,"pech","Peach"], 
[6,"plum","Plum"]] 

Ich weiß, dass gzip typischerweise die Bandbreite für eine erforderliche Zeit zu reduzieren verwendet wird Nutzlast, aber ich dachte, warum nicht beides tun? Gzip ist verlustfrei und bedeutet, dass es nur so viel komprimieren kann, wie es alles wiederherstellen muss. Bessere Speichereffizienz kombiniert mit gzip mit den besten Ergebnissen.

Meine Frage ist, was die Vor- und Nachteile zu diesem Vorschlag sind. Es wurde vorgeschlagen, dass sich der Verarbeitungsaufwand dafür nicht lohnt. Ich bin der Meinung, dass heutzutage die Bandbreite viel teurer ist als die Verarbeitungsleistung. Liege ich falsch? Fehle ich etwas? Wenn Sie Ihre Nutzlast um mehr als die Hälfte reduzieren können, ist es das nicht wert?

+0

Es klingt wie Sie sind eine Art von Linux-System. Wenn ja, haben sie Zip für Linux und Zip hat mehrere Modi der Komprimierung, wenn Sie dorthin gehen wollen. [Zip für Linux] (http://www.linuxfromscratch.org/blfs/view/svn/general/zip.html). [7 zip hat auch] (http://www.7-zip.org/download.html) eine sehr gute Kompressionsrate. Und sie haben Quell- und Binärdateien für Linux. – Bulrush

Antwort

0

"Ich debattiere, dass Bandbreite heutzutage viel teurer ist als Verarbeitungsleistung."

Das hängt davon ab, wie viele Daten Sie senden und wie oft. Wenn Sie eine 5-GB-Datei 10x pro Tag senden, ist das eine Menge Daten, also überlegen Sie, sie zu komprimieren. Wenn Sie eine 5kb-Datei 10x pro Tag senden, ist das überhaupt keine Bandbreite für die durchschnittliche Hochgeschwindigkeitsverbindung. Es hängt auch von der Verbindungsgeschwindigkeit des Empfängers ab. 50 Gigabyte Daten über eine 3,5-MBit/s-Verbindung (was ich früher hatte) werden eine Weile dauern, bis ein Empfänger herunterlädt.

The Archive Compression Test ist immer noch da, aber ich weiß nicht, wann es zuletzt aktualisiert wurde. Es vergleicht viele Archivierer unter verschiedenen Bedingungen (Bilder, Text, etc.) mit Links zu allen von ihnen.

Ihre individuellen Anwendungsentscheidungen sollten auf diesen Elementen und mehr basieren. Passen Sie dann die Anwendung im Laufe der Zeit an, wenn sich die Bedingungen ändern. I.e. erleichtern Sie es einem kompetenten Benutzer, verschiedene Archivierungsprogramme anzuschließen, wenn sie mehr Komprimierung benötigen.

+0

Guter Vorschlag zum Kompressionstest. Ich habe einen schnellen Test mit einem Online-Gzip-Tool durchgeführt und eine 10% ige Komprimierungsverbesserung mit dieser Komprimierung und gzip vs nur mit gzip bekommen. Das ist nur mit den obigen Datenbeispielen. Bei mobilen Geräten kann nicht immer davon ausgegangen werden, dass jeder eine Hochgeschwindigkeitsverbindung hat. – OffTheBricks