1

ネットワーク経由でファイルを同期するプログラムがいくつかあることは知っています。それらのどれも、私が考えていたことをしません。私が達成したいことを説明させてください...

私のネットワークでは、複数のコンピュータが同じファイルを共有しています。たとえば、quickbooks ファイルは複数のコンピューターからアクセスされ、大きなファイルです。Outlook large からの pst ファイルもあります。毎晩、変更されたファイルのバックアップをネットワーク経由で作成します。わずかな変更があった場合、1 GB のファイル全体をコピーするのは適切ではないと思います。そのため、ファイルの一部を比較するアルゴリズムを考案したいと考えています。

たとえば、Outlook の pst ファイルがバイトで構成されているとします。

1, 2, 3, 4, 5, 6, 7, 8, 9    

メールを受信すると、バイトは次のようになります。

1, 2, 3, 4, 5, 6, 7, 8, 9, 10    for example

ファイル全体を送信する代わりに、バイト 10 だけを送信する方が簡単です。

実際には、ファイルには数千バイトあるため、ファイルのすべてのメガバイトのチェックサムを実行するため、テーブルは次のようになります。

aaa1, aaa2, aaa3, abf8, etc...   

メールを受信したときに、pst ファイルに次のようなテーブルがある場合:

aaa1, aaa2, aaa3,  7a8b, etc  ... then I know that the first 3 megabits are the same and I should send just one megabite instead of the entire file...

ファイルの末尾にコンテンツが追加された場合、このアルゴリズムはうまく機能すると思いますが、実際にはファイルの先頭でバイトが変更される可能性があり、私のアルゴリズムは機能しません。たとえば、ファイルの先頭に 1 バイトを追加すると、すべての 16 進コードが変更されます...

アルゴリズムをより効率的にするにはどうすればよいですか? ファイル全体ではなく、ファイルの一部を送っていただけると助かります

4

2 に答える 2

3

rsync プロトコルは、大きなファイルを小さな差分で効率的に同期します。これはあなたが想像しているスキームよりもはるかに賢いので、独自のソリューションに着手する前に Tridgell と Mackerras の記事を読むか、単にrsyncを使用する必要があります。ここに無料の Windows ラッパーがあります。

于 2011-12-05T21:35:39.653 に答える
2

ローリング チェックサムと、rsync が使用するアルゴリズムを調べることができます。

基本的に、チャンクで上記のようにハッシュを計算しますが、ローリング チェックサムも計算します。ローリング チェックサムには、ファイルの先頭に 1 バイトが追加されたことなどをより効率的にチェックできるプロパティがあります。

于 2011-12-05T21:42:21.903 に答える