ほとんどの同期プログラムはどのようにファイルの変更を監視しますか?


9

Dropboxのような同期プログラムは通常、バイトごとの比較を行ったり、ハッシュを使用しdiffたり、バージョン管理などのローカルコミットログを使用/保持したりして、ファイルの変更を追跡しますか?

回答:


8

Windowsには、「監視された」ディレクトリ構造に変更があったときにOSが警告するメカニズムがあります-FindFirstChangeNotification()。これにより、ファイルが変更されたことが示されると、アプリケーションは変更されたディレクトリ内のファイルを比較して、サイズ、変更日、ハッシュなどを調べて変更された実際のファイルを見つけることができます。

これは(Michaelが以下で指摘するように)、各プラットフォームが何らかの方法で提供するものです。この種のことはWindowsに固有であるとは言わなかった。


1
Linuxにはinotifyがあります。
Michael

しかし、ファイルの変更時に同期プログラムが実行されていなかった場合はどうなりますか?フックで通知される機会を逃しませんか?
mcandre 2012年

Dropboxの特定の例を使用しましたが、これは通常バックグラウンドで実行されています。プログラムが実行されていない場合は、通知されません。次に、他の方法を使用する必要があります(変更された日付など)。プログラムによって処理が異なるため、特定のメソッドの使用方法について具体的な答えが得られるとは思いません。問題となっている特定のプログラムの作成者に質問することをお勧めします。
GrandmasterB 2012年

@mcandre GrandmasterBが言ったことのほとんど-通知を見逃した場合は、フォルダをスキャンする必要があります。どれほど「正確」になりたいかに応じて、これは単に新しいファイルと変更されたタイムスタンプ/ファイルサイズを探す(これらは比較的安価です)か、最悪の場合はファイル全体を比較することを意味します。rsyncのようなプログラムは、一般的にそう早期に検出することができるデータ内に早期に変化し、チャンクでファイルをハッシュが、最悪の場合(ファイルが同一である)で、あなたが全部を読んでするつもりだ。
ダニエルB

2

最終的にファイルを比較するには、すべてのバイトを比較する必要があります。他にどのようにして、1バイトの変更に気付きますか

実際には、バイトのブロックを読み取ってハッシュ値を計算し、ハッシュのリストと照合します。良い例は「rsync」です

私の知る限り、Dropboxはファイル全体を重複排除するだけなので、ファイル全体のハッシュを計算して同じファイルをチェックします


1
一部のファイルシステムでは、日付が変更されたpst
ラチェットフリーク

1
ハッシュ化は、小さいが実際に衝突のリスクを引き起こし、ファイルが同期されないのではないでしょうか?Dropboxは明らかに差分のような実装を使用しています。dropbox.com/help/8/en
mcandre

1
@mcandreは、独自の質問としてより優れているように思えます。
GrandmasterB 2012年

@ratchetfreak:一部のシステムでは、変更された日付がこの種の問題に対して必ずしも信頼できるとは限りません。単純なタッチでは、変更された日付が異なり、実際には同期が必要ない場合があります。
Steven Evers、

1
@SnOrfusは、変更された日付が変更されたときに変更を再確認します
ラチェットフリーク、

1

たとえば.NETにはFileSystemWatcherクラスがあります。他の低水準言語とランタイムが同様の機能を提供できると私は確信しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.