Nehmen wir an, ich muss einige Daten von einem Computer zu einem anderen über ein ziemlich schnelles Netzwerk senden ... zum Beispiel eine Standard-100-Mbit-Verbindung (~ 10 MB / s). Meine Festplatten sind Standard-Festplatten, daher liegt ihre Geschwindigkeit zwischen 30 MB / s und 100 MB / s. Ich denke also, dass das schnelle Komprimieren der Daten helfen könnte.
Aber ... ich möchte nicht durch die CPU eingeschränkt werden. Wenn ich einen Algorithmus wähle, der die CPU stark beansprucht, wird die Übertragung tatsächlich langsamer als ohne Komprimierung.
Dies ist bei Kompressoren wie GZIP und BZIP2 schwierig, da Sie die Komprimierungsstärke normalerweise einmal für die gesamte Übertragung einstellen und meine Datenströme manchmal einfach und manchmal schwer zu komprimieren sind. Dies macht den Prozess suboptimal, da ich manchmal nicht die volle CPU verwende. und manchmal ist die Bandbreite nicht ausgelastet.
Gibt es ein Komprimierungsprogramm, das sich an die aktuelle CPU / Bandbreite anpasst und den Sweet Spot erreicht, damit die Übertragung optimal ist? Ideal für Linux, aber ich bin immer noch neugierig auf alle Lösungen. Ich würde gerne etwas sehen, das mit GZIP / BZIP2-Dekompressoren kompatibel ist, aber das ist nicht notwendig.
Daher möchte ich die Gesamtübertragungszeit optimieren und nicht nur die Anzahl der zu sendenden Bytes.
Außerdem brauche ich keine Echtzeit-Dekomprimierung ... Echtzeit-Komprimierung ist genug. Der Zielhost kann die Daten später in seiner Freizeit verarbeiten. Ich weiß, dass sich daran nicht viel ändert (die Komprimierung ist normalerweise viel CPU-intensiver als die Dekomprimierung), aber wenn es eine Lösung gibt, die diese Tatsache nutzen könnte, umso besser.
Jedes Mal, wenn ich andere Daten übertrage, möchte ich diese einmaligen Übertragungen wirklich so schnell wie möglich durchführen. Ich werde also nicht davon profitieren, wenn mehrere Übertragungen aufgrund der stärkeren Komprimierung schneller erfolgen.
Vielen Dank,
quelle
Antworten:
Dies ist ein aktuelles Forschungsthema - vor allem im Bereich der Sensornetzwerke, bei denen das Ziel darin besteht, den Stromverbrauch zu minimieren, anstatt den Durchsatz zu maximieren. Das Prinzip der adaptiven Komprimierung ist jedoch dasselbe.
Hier ist eine aktuelle Arbeit eines Professors am USC .
Vielleicht könnten Sie versuchen, seinen Algorithmus zu implementieren? Ich bin sicher, dass es viele Leute geben würde, die an einer guten Implementierung interessiert sind.
quelle
Hum, diese Frage ist jetzt älter als ein Jahr, daher kann dies unbemerkt bleiben:
Wie auch immer, Google hat kürzlich Snappy veröffentlicht , das genau das ist, wonach Sie suchen, nämlich:
Es ist in C ++ mit Bindungen implementiert, die für C und eine Reihe anderer Sprachen verfügbar sind.
quelle