3 Stimmen

Komprimierungsalgorithmus für kleine Datenmengen

Ich habe ein serverseitiges Programm, das JSON für einen Client generiert. Einige meiner Kollegen haben die Verwendung von zip/gzip-Komprimierung vorgeschlagen, um die Datenmenge zu reduzieren, die über die Leitung gesendet wird. Bei einem Test mit einer meiner durchschnittlichen JSON-Nachrichten erhöhte sich jedoch die Menge der gesendeten Daten. Erst als ich eine ungewöhnlich große Antwort schickte, setzte die Komprimierung ein und war nützlich.

Also fing ich an, auf Stackoverflow herumzustöbern, und fand schließlich LZO die, als ich sie getestet habe, genau das tat, was ich wollte. Ich kann jedoch keine Dokumentation über die Laufzeit des Algorithmus finden, und ich bin nicht gut genug, um mich mit dem Code hinzusetzen und es selbst herauszufinden :)

tl;dr? LAUFZEIT VON LZO ?

8voto

Gareth Rees Punkte 62623

Ich werde Ihre Frage nach der Laufzeit von LZO ignorieren (Antwort: fast sicher schnell genug) und das zugrunde liegende Problem diskutieren.

Sie tauschen JSON-Datenstrukturen über die Leitung aus und möchten Ihre Bandbreite reduzieren. Im Moment erwägen Sie Allzweck-Kompressionsalgorithmen wie DEFLATE und LZO. Allerdings basiert jeder Komprimierungsalgorithmus auf Lempel-Ziv Techniken funktionieren am besten bei großen Datenmengen. Diese Algorithmen funktionieren durch Aufbau eines Wörterbuchs von häufig vorkommenden Datensequenzen, so dass sie bei Wiederholungen einen Verweis auf das Wörterbuch anstelle der gesamten Sequenz kodieren können. Je größer das Wörterbuch ist, desto besser ist das Komprimierungsverhältnis. Bei sehr kleinen Datenmengen, wie einzelnen Datenpaketen, ist die Technik nutzlos: Es bleibt keine Zeit, das Wörterbuch aufzubauen, und es bleibt keine Zeit, dass viele Wiederholungen auftreten.

Wenn Sie JSON verwenden, um ein Leitungsprotokoll zu kodieren, dann sind Ihre Pakete sehr wahrscheinlich stereotyp, mit ähnlichen Strukturen und einer kleinen Anzahl von gemeinsamen Schlüsseln. Ich schlage daher vor, Googles Protokollpuffer die speziell für diesen Anwendungsfall konzipiert sind.

4voto

Jens Roland Punkte 26963

Ich schließe mich dem Vorschlag an, LZO und jede andere Art von generischen/binären Datenkompressionsalgorithmen zu vermeiden.

Ihre anderen Optionen sind im Wesentlichen:

Die beste Wahl hängt von Ihren Server-/Spracheinstellungen, Ihren Anforderungen an Geschwindigkeit und Komprimierung sowie Ihren persönlichen Vorlieben ab. Ich selbst würde mich wahrscheinlich für MessagePack entscheiden, aber auch mit Protocol Buffers können Sie nichts falsch machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X