ファイル バックアップのバージョン管理または最適化を行う場合、1 つのアイデアは、変更されたデルタまたはデータのみを使用することです。
これは最初は単純なアイデアのように思えますが、実際には、変更されていないデータがどこで終わり、新しいデータがどこから始まるかを判断するのは難しい作業です。
既にこのようなことを行っている既存のフレームワークや、効率的なファイル比較アルゴリズムはありますか?
ファイル バックアップのバージョン管理または最適化を行う場合、1 つのアイデアは、変更されたデルタまたはデータのみを使用することです。
これは最初は単純なアイデアのように思えますが、実際には、変更されていないデータがどこで終わり、新しいデータがどこから始まるかを判断するのは難しい作業です。
既にこのようなことを行っている既存のフレームワークや、効率的なファイル比較アルゴリズムはありますか?
独自に作成する代わりに、オープン ソースのバージョン管理システム (例: Subversion ) を活用することを検討してください。そうすれば、単なるデルタ バージョニング アルゴリズム以上のものを得ることができます。
差分ベースのストレージ スキームについて説明しているようです。ほとんどのソース コード管理システムでは、このようなシステムを使用してストレージ要件を最小限に抑えています。*nix "diff" コマンドは、独自に実装するために必要なデータを生成できます。
私の意見では、バイナリ ファイルには Bsdiff ツールが最適です。接尾辞の並べ替え (Larsson と定兼の qsufsort) を使用し、実行可能ファイルがどのように変化するかを利用します。Bsdiff は Colin Percival によって C++ で書かれました。Bsdiff によって作成される差分ファイルは、通常、Xdelta によって作成されるファイルよりも小さくなります。
Bsdiff が bzip2 圧縮アルゴリズムを使用していることも注目に値します。Bsdiff によって作成されたバイナリ パッチは、他の圧縮アルゴリズム (WinRAR アーカイバのものなど) を使用してさらに圧縮できる場合があります。
Bsdiff のドキュメントを見つけて Bsdiff を無料でダウンロードできるサイトは次のとおりです: http://www.daemonology.net/bsdiff/
2 つのプレーン テキスト ファイル間の差分を計算できる Java ライブラリを次に示します。
http://code.google.com/p/google-diff-match-patch/
ただし、バイナリ差分用のライブラリは知りません。「Javaバイナリ差分」をグーグルで検索してみてください;-)