차이를 계산하여 애플리케이션이 업데이트되지 않는 이유는 무엇입니까?

차이를 계산하여 애플리케이션이 업데이트되지 않는 이유는 무엇입니까?

저는 Ubuntu 컴퓨터와 Android 휴대폰을 가지고 있는데 Ubuntu의 기본 업데이트 관리자와 휴대폰의 Google Play가 기존 버전의 애플리케이션과 새 버전 간의 차이를 계산하여 업데이트하지 않는 이유가 항상 당황스럽습니다. 나는 이것이 다른 운영 체제에서도 마찬가지라고 확신합니다. (이것이 Ask Ubuntu 또는 Android 매니아에게 이 질문이 없는 이유입니다.)

예를 들어 다음의 최신 업데이트(부 릴리스)를 생각해 보십시오.구글지도(2012년 4월 18일 현재) "새로운 기능" 섹션에는 중요한 버그 수정이 포함되어 있다고 나와 있습니다. 많은 코드가 수정되지 않았다고 가정해도 안전하지만, 앱을 업데이트하면 마치 새로 설치한 것처럼 6MB 이상 다운로드됩니다.

업데이트 서버가 설치된 버전과의 차이점(a la git)을 계산하여 차이점만 보낼 수 없는 이유는 무엇입니까? 모든 버전에서 그렇게 하는 것이 정말 그렇게 어려울 수 있나요? 절약된 대역폭이 주요 동기가 되지 않을까요?

편집하다 2016년 12월 6일: Google은 Android APK 업데이트에 파일별 패치를 사용할 것이라고 발표했습니다.데이터 절약: 앱 업데이트 크기 65% 감소

답변1

차이점만 전송하여 다운로드 크기를 최적화할 수 있는 세 가지 수준이 있습니다.

패키지 수준업데이트된 패키지만 전송하십시오. 이것은 이미 완료되었습니다. 패키지의 다운로드 크기를 살펴보면 대부분이 매우 작다는 것을 알 수 있습니다. 따라서 이는 대부분의 대역폭을 보호합니다.

패키지 내의 파일패키지 내에서 변경된 파일만 전송합니다. 패키지 관리는 단순히 파일을 고정된 위치에 복사하는 것 이상입니다. 시스템에 자동으로 적용되는 구성 파일이 있습니다. 수동 변경이 있을 수 있습니다. 설치된 파일을 먼저 업로드하지 않으면 차이점을 확실하게 파악하기 어려울 것입니다.

내부 파일 차이점대부분, 특히 큰 파일은 바이너리입니다. 패치할 파일에 다른 빌드 타임스탬프와 같은 작은 변경 사항이 있는 경우 바이너리 파일에 대한 안정적인 패치 알고리즘을 상상하기 어렵습니다. 반면에 텍스트 파일의 경우 git이 적용한 이전 diff 및 패치 알고리즘은 아마도 잘 작동할 것이지만 노력할 가치는 없을 것입니다.

또 다른 문제는 어떤 이전 버전이 업데이트될지 알 수 없다는 것입니다. 사용자가 중간 업데이트를 건너뛰었을 수 있습니다. 물론 패키지 관리자는 서버에 특정 버전에 대한 diff를 보내도록 요청할 수 있지만 그렇게 하면 diff를 생성하는 데 서버에 막대한 부하가 걸립니다. 서버 관리자가 이를 허용할지는 의심스럽습니다.

요약: 쉽고 확실하게 할 수 있는 일은 이미 이루어졌습니다. 나머지는 업데이트를 작게 유지하기 위해 작은 패키지를 만드는 패키지 관리자의 몫입니다.

답변2

원칙적으로 개발자에게는 기술적으로 어렵습니다. 그리고 대역폭은 저렴합니다. 아니 오히려 사용자가 비용을 부담합니다.

Google Chrome은 Chrome 바이너리에 대한 증분 업데이트를 개발하는 데 많은 현명함을 투자했습니다.http://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html.

Fedora는 증분 패키지 업데이트를 제공하기 위해 '델타 rpms'를 개발했습니다. 흥미롭게도 내 컴퓨터의 네트워크 연결은 빠르지만 프로세서가 느리기 때문에 실제로 설치 속도가 더 느립니다.

관련 정보