Warum werden Anwendungen nicht durch die Berechnung der Differenz aktualisiert?

Warum werden Anwendungen nicht durch die Berechnung der Differenz aktualisiert?

Ich habe Ubuntu-Computer und ein Android-Telefon und es hat mich immer verwirrt, warum der Standard-Update-Manager von Ubuntu und Google Play auf dem Telefon vorhandene Versionen von Anwendungen nicht aktualisiert, indem er den Unterschied zwischen ihnen und den neuen Versionen berechnet. Ich bin sicher, dass dies auch bei anderen Betriebssystemen der Fall ist (weshalb diese Frage nicht in „Ask Ubuntu“ oder „Android-Enthusiasten“ steht).

Betrachten Sie beispielsweise das neueste Update (eine Nebenversion) vonGoogle Maps(Stand: 18. April 2012). Im Abschnitt „Was ist neu“ steht, dass eine wichtige Fehlerbehebung enthalten ist. Man kann davon ausgehen, dass ein Großteil des Codes unverändert blieb, und dennoch werden beim Aktualisieren der App über 6 MB heruntergeladen, als ob es sich um eine Neuinstallation handeln würde.

Warum können die Update-Server die Differenz nicht (wie bei Git) mit installierten Versionen berechnen und nur die Differenz senden? Kann das wirklich so schwer sein, das mit allen Versionen zu tun? Wäre die eingesparte Bandbreite nicht ein großer Anreiz?

Bearbeiten 6. Dezember 2016: Google hat gerade angekündigt, dass sie für Android APK-Updates File-by-File-Patching verwenden werden -Daten sparen: Reduzierung der Größe von App-Updates um 65 %

Antwort1

Es gibt drei Ebenen, auf denen Sie die Downloadgröße optimieren können, indem Sie nur einen Diff übertragen.

PaketebeneÜbertragen Sie nur aktualisierte Pakete. Dies wird bereits durchgeführt. Wenn Sie sich die Downloadgrößen der Pakete ansehen, sehen Sie, dass die meisten davon sehr klein sind. Dadurch wird die meiste Bandbreite gespart.

Dateien innerhalb eines PaketsÜbertragen Sie nur geänderte Dateien innerhalb eines Pakets. Paketverwaltung ist mehr als nur das Kopieren von Dateien an feste Speicherorte. Es gibt Konfigurationsdateien, die möglicherweise automatisch an Ihr System angepasst wurden. Es kann manuelle Änderungen geben. Es wäre schwierig, den Unterschied zuverlässig herauszufinden, ohne zuerst die installierten Dateien hochzuladen.

Innere DateiunterschiedeDie meisten und insbesondere die großen Dateien sind binär. Es ist schwer, sich einen zuverlässigen Patch-Algorithmus für Binärdateien vorzustellen, wenn die zu patchende Datei eine kleine Änderung aufweist, wie z. B. einen anderen Build-Zeitstempel. Für Textdateien hingegen würden die alten Diff- und Patch-Algorithmen, die von Git angewendet werden, wahrscheinlich gut funktionieren, aber es ist den Aufwand wahrscheinlich nicht wert.

Ein weiteres Problem wäre, dass Sie nicht wissen, welche alte Version aktualisiert wird. Benutzer haben möglicherweise Zwischenaktualisierungen übersprungen. Natürlich könnte der Paketmanager den Server auffordern, einen Diff an eine bestimmte Version zu senden, aber das würde den Server enorm belasten, um Diffs zu generieren. Ich bezweifle, dass die Serverbetreuer das zulassen würden.

Zusammenfassung: Was einfach und zuverlässig erledigt werden konnte, ist bereits erledigt. Der Rest liegt an den Paketmanagern, die kleine Pakete erstellen müssen, um die Anzahl der Updates gering zu halten.

Antwort2

Grundsätzlich ist es für die Entwickler technisch schwierig. Und Bandbreite ist billig – oder besser gesagt: Die Rechnung bezahlen die Benutzer.

Google Chrome hat viel Intelligenz in die Entwicklung inkrementeller Updates für Chrome-Binärdateien investierthttp://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html.

Fedora hat „Delta-RPMs“ entwickelt, um inkrementelle Paketaktualisierungen bereitzustellen. Komischerweise dauert die Installation dieser Updates bei mir tatsächlich länger, da mein Computer eine schnelle Netzwerkverbindung, aber einen langsamen Prozessor hat.

verwandte Informationen