# File Deltas



## sco (15. Jan 2007)

Hi, mir gehts da um ne Effizienzfrage in hinsicht von Datentraffic.

Ich suche nach einem Algorithmus/eine Api, der/die folgende Anforderungen erfüllt:
- es sollen zwei Dateien binär untersucht werden können
- eine der Dateien ist ein wenig älter als die andere - es soll eine Delta-Datei errechnet werden, mit der man ältere in die neuere überführen kann
- diese Delta-Datei soll möglichst klein sein - mir geht es um Traffic
- der Algorithmus dafür darf durchaus hohe Anforderungen an Speicher und CPU legen, wenn es sein muss
- zwei Delta-Dateien sollen optimiert zusammenführbar sein, dh defacto:
1. datei_uralt + deltaA = 2. datei_auch_alt
2. datei_auch_alt + deltaB = 3. aktuelle_datei
aber:
1. datei_uralt + deltaAB = 3. aktuelle_datei

letzterer Punkt muss nicht unbedingt erfüllt werden, mir gehts erstmal überhaupt um nen Ansatz, der besser ist, als ein einfaches bitweises durchlaufen beider Dateien und Unterschiede aufzeichnen - würde auch eine entsprechende API verwenden, wenn eine Open-Source existiert.

Vielen Dank schonmal
sco


----------



## SlaterB (15. Jan 2007)

(ach, falsch und wieder gelöscht)


----------



## Wildcard (15. Jan 2007)

Spontan fällt mir da nur VCDIFF ein.
Ein Blick in diff könnte auch nicht schaden, da diff ja auch mit Binärdaten umgehen kann.


----------



## kama (16. Jan 2007)

Hallo,

ich würde mir mal rsync anschauen und vor allem der entsprechende Hintergrund zu rsync.

http://rsync.samba.org/

Weiterhin würde ich mir mal subversion.tigris.org anschauen, da wird auch ein Diff verwendet, dass mit binär Dateien umgehen kann und es wird auch "nur" der jeweilige Delta transferiert. Das mit dem Zusammenführen von binären Dateien wird nich ganz so trivial.

MfG
Karl Heinz Marbaise


----------



## sco (17. Jan 2007)

Macht nix, wenns nicht trivial ist - irgendwie gewöhnt man sich dran ^^

Subversion nutze ich seit ner ganzen Weile selbst.
Es ist halt schon nicht trivial aus Quellcode von jemand anderem nen Algorithmus zu ziehen - aber nachdem ich mir alles angesehen hab, werd ich mich genauer mit den Quellen von diff (der Unix-Befehl) - hab ich C-Quellen nu - und mit rsync befassen und dann sehen, was mir eher passt.

Versteh ich den Algorithmus, dann werd ich nen Weg finden, wie ich das hinbekomme mit dem zusammenführen zweier Datei-Deltas. Mein Ansatz war eben inspiriert durch Sorcerer Linux, die früher beim Quellenupdate auch File-Deltas verwendeten - Zielsetzung ist es, einen multipurpose Auto-Updater in Java zu schreiben, der ohne zusätzliche Installation von Hilfspaketen auskommt am Ende, weil ich das dem Nutzer nicht zumuten möchte.

Denke, dass ich das mit euren Hinweisen nun eleganter lösen werde, deshalb:
Vielen Dank
sco


----------



## Jockel (17. Jan 2007)

Ich habe mir das Programm nicht näher angeschaut, aber David Scherfgen hat unter http://www.spieleprogrammierer.de/i...d=50&subcat=6&catid=23&limitstart=0&limit=256 einen Patch-Creator, inkl. C-Code, veröffentlicht, der scheinbar genau das macht, was du vor hast. Vielleicht hilft es ja weiter.


----------

