Bagaimana sebagian besar program sinkronisasi memonitor perubahan file?

9

Apakah program sinkronisasi seperti Dropbox biasanya melacak perubahan file dengan melakukan perbandingan byte demi byte, atau menggunakan hash, atau menggunakan diff/ menjaga log komit lokal seperti kontrol versi, atau apa?

mcandre
sumber

Jawaban:

8

Pada Windows ada mekanisme untuk membuat OS mengingatkan Anda ketika ada perubahan pada struktur direktori 'diawasi' - FindFirstChangeNotification (). Ketika itu menunjukkan file telah berubah, aplikasi kemudian dapat membandingkan file dalam direktori yang diubah untuk menemukan file aktual yang telah diubah dengan melihat ukuran, tanggal modifikasi, hash, dll.

Ini (seperti yang ditunjukkan Michael di bawah) adalah sesuatu yang akan disediakan oleh setiap platform dengan cara tertentu. Saya tidak mengatakan hal semacam ini unik untuk Windows.

GrandmasterB
sumber
1
Dan ada yang tidak sah di Linux.
Michael
Tetapi bagaimana jika program sinkronisasi tidak berjalan pada saat perubahan file? Bukankah itu akan kehilangan kesempatan untuk diberitahu oleh hook?
mcandre
Anda menggunakan contoh khusus dropbox, yang umumnya berjalan di latar belakang. Jelas jika program tidak berjalan, itu tidak akan diberitahu. Maka harus menggunakan metode lain (tanggal modifikasi, mungkin). Saya tidak berpikir Anda akan mendapatkan jawaban konkret tentang apa metode khusus yang digunakan ADALAH, karena program yang berbeda melakukan hal-hal yang berbeda. Lebih baik bertanya kepada pembuat program tertentu yang dimaksud.
GrandmasterB
@mcandre Cukup banyak yang dikatakan GrandmasterB - jika Anda melewatkan pemberitahuan, Anda harus memindai folder. Tergantung pada seberapa "akurat" yang Anda inginkan, ini bisa berarti hanya mencari file baru dan timestamp / ukuran file yang dimodifikasi (ini relatif murah untuk dilakukan), atau dalam kasus terburuk, membandingkan seluruh file. Program-program seperti rsync biasanya meng-hash file dalam chunks, jadi perubahan sejak dini dalam data dapat dideteksi sebelumnya, tetapi dalam kasus terburuk (file identik), Anda akan membaca semuanya.
Daniel B
2

Pada akhirnya untuk membandingkan file, Anda perlu membandingkan setiap byte - bagaimana lagi Anda akan melihat perubahan satu byte?

Pada kenyataannya Anda membaca blok byte dan menghitung nilai hash, Anda kemudian memeriksa daftar hash. Contoh yang baik adalah " rsync "

Sejauh yang saya tahu dropbox hanya memotong seluruh file, jadi akan menghitung hash dari seluruh file untuk memeriksa dari file yang sama

Martin Beckett
sumber
1
pst pada beberapa sistem file ada tanggal yang dimodifikasi
ratchet freak
1
Tidakkah hashing membuat risiko tabrakan yang kecil namun nyata, menghasilkan file yang tidak disinkronkan? Dropbox rupanya menggunakan implementasi yang berbeda. dropbox.com/help/8/en
mcandre
1
@ mcandre sepertinya itu akan lebih baik sebagai pertanyaannya sendiri.
GrandmasterB
@ scratchetfreak: tanggal dimodifikasi, pada beberapa sistem, belum tentu dapat diandalkan untuk masalah seperti ini. Sentuhan sederhana akan menyebabkan tanggal yang diubah menjadi berbeda, di mana sinkronisasi mungkin sebenarnya tidak diperlukan.
Steven Evers
1
@SnOrfus kemudian periksa perubahan ketika tanggal yang diubah diubah
ratchet freak
1

.NET misalnya memiliki kelas FileSystemWatcher. Saya yakin bahasa dan runtimes tingkat rendah lainnya dapat memberikan kemampuan serupa.

Nik
sumber