2

一連の大きなバイナリ ファイルがあり、それぞれが前のファイルを変更して作成されています。それらはサーバーに保存されます (サーバーは単なるファイル ストアであり、プログラムを実行することはできません)。

スペースを節約するために、それらを差分として保存したいと思います。ファイルをダウンロードするときに問題が発生します。ファイルが大きすぎて、元のファイルと差分の両方を格納するのに十分なディスク領域がクライアントにありません。

元のファイルをディスクにダウンロードし、サーバーからストリーミングされたときにパッチを適所に適用できる差分アルゴリズムはありますか? AIUI では、xdelta と rdiff の両方が元のファイルを変更できず、新しいコピーを作成するだけです (これにはディスク容量がかかりすぎます)。

4

2 に答える 2

0

短い答えは残念ながらノーです。けれど...

インプレース パッチの問題は、古いデータへの挿入と参照が混在することです。挿入には、挿入するのに十分な場所を確保するために既存のデータを移動する必要があります。つまり、ファイルの末尾を逆方向にコピーします (一般的にはかなり遅くなり、最悪の場合はファイル自体のサイズになります)。古いデータへの参照は、最悪のケースを減らすために非常に慎重にする必要があります...

クライアントでこれを可能にするためのすべての制約により、パッチ適用中の占有スペースに関して実際の利点があるため、パッチはおそらく xdelta または rdiff が行うものよりもはるかに大きくなります。パッチ適用プロセスもはるかに遅くなります。

インテリジェント サーバーの 1 つの可能性は次のとおりです。

  • すべてのパッチを 1 つのメタパッチに構成する
  • オンザフライでパッチを適用した元のファイルをストリーミングします (したがって、ワイヤ上で再構成を行います)。
于 2012-08-28T07:41:28.010 に答える