2011-12-05 10 views
1

ネットワーク経由でファイルを同期するいくつかのプログラムがあります。彼らのうちの何人かは、私が考えていることをしません。達成したいことを説明しましょう...ネットワークを介してファイルを効率的にコピーするためのアルゴリズム

私のネットワークでは、複数のコンピュータが同じファイルを共有しています。例えば、quickbooksファイルは複数のコンピュータからアクセスされ、大きなファイルです。また、Outlookからのpstファイルも大きくなっています。毎晩、変更されたファイルのネットワーク上でバックアップを作成します。私はいくつかのマイナーな変更があった場合、1GBのファイル全体をコピーすることはサンスとは思わないと思う。だから私は、ファイルの部分を比較するアルゴリズムを考え出したいと思います。例えば

のは、見通しのPSTファイルは、バイトで構成されていることを言わせて:私は、電子メールを受信した場合

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

バイトが今のようになります。

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

の代わりに、ファイル全体を送信することバイトだけを送信するのがより簡単になります。

実際にファイルには何千バイトものバイトがありますので、ファイルの各メガバイトのチェックサムを実行します。 :

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

今電子メールを受信したときのように、PSTファイルは、テーブルを持っている場合:私は、コンテンツがファイルの終わりに向かって現実aに追加された場合、このアルゴリズムは素晴らしい仕事だろうと思い

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進コードはすべて変更されます。

アルゴリズムをより効率的にするにはどうすればよいですか?

答えて

3

rsyncプロトコルは大きなファイルを小さな違いで効率的に同期させます。あなたが想像しているスキームよりもはるかに洗練されているので、あなた自身の解決に着手する前にTridgellとMackerrasのwrite-upを読んだり、rsyncを使ってください。無料のWindowsラッパーhereがあります。

2

rolling checksumsalgorithm rsync usesを調べるとよいでしょう。

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

関連する問題