Senkronizasyon programlarının çoğu dosya değişikliklerini nasıl izler?


9

Dropbox gibi senkronizasyon programları genellikle bayt bayt karşılaştırmaları yaparak veya karmaları kullanarak veya diffsürüm kontrolü gibi yerel tamamlama günlüklerini kullanarak / saklayarak dosya değişikliklerini izler mi?

Yanıtlar:


8

Windows'da, 'izlenen' dizin yapısında bir değişiklik olduğunda işletim sisteminin sizi uyarmasını sağlayan bir mekanizma vardır - FindFirstChangeNotification (). Bu, bir dosyanın değiştiğini gösterdiğinde, uygulama, boyut, değiştirilme tarihi, karma vb. Konularına bakarak değişen gerçek dosyaları bulmak için değiştirilen dizindeki dosyaları karşılaştırmaya devam edebilir.

Bu (Michael'ın aşağıda belirttiği gibi) her platformun bir şekilde sağlayacağı bir şeydir. Bu tür şeylerin Windows'a özgü olduğunu söylemedim.


1
Ve Linux'ta inotify var.
Michael

Peki ya dosya değişikliği sırasında senkronizasyon programı çalışmıyorsa? Kanca tarafından bilgilendirilme fırsatını kaçırmaz mı?
mcandre

Genellikle arka planda çalışan özel dropbox örneğini kullandınız. Açıkçası program çalışmıyorsa, bildirim almayacak. O zaman başka yöntemler kullanmak zorundadır (belki de değiştirilme tarihi). Belirli yöntemlerin ne olduğu konusunda somut bir cevap alacağınızı sanmıyorum, çünkü farklı programlar farklı şeyler yapıyor. Söz konusu programların içerik oluşturucularına sormak daha iyidir.
GrandmasterB

@mcandre GrandmasterB'nin söylediklerine çok benziyor - bildirimi kaçırırsanız klasörü taramanız gerekir. Ne kadar "doğru" olmak istediğinize bağlı olarak, bu sadece yeni dosyaları ve değiştirilmiş zaman damgalarını / dosya boyutlarını (bunlar yapmak nispeten ucuzdur) veya en kötü durumda tüm dosyayı karşılaştırmak anlamına gelebilir. Rsync gibi programlar genellikle parçalara ayırır, bu nedenle verilerdeki erken değişiklikler daha erken tespit edilebilir, ancak en kötü durumda (dosyalar aynıdır), her şeyi okuyacaksınız.
Daniel B

2

Sonuçta dosyaları karşılaştırmak için her baytı karşılaştırmanız gerekir - başka bir bayt değişikliğini nasıl fark edersiniz?

Gerçekte, bayt bloklarını okur ve bir karma değeri hesaplarsınız, daha sonra bir karma listesine karşı kontrol edersiniz. İyi bir örnek " rsync "

Bildiğim kadarıyla dropbox sadece tüm dosyaları tekilleştiriyor, bu yüzden aynı dosyayı kontrol etmek için tüm dosyanın bir karmasını hesaplayacak


1
bazı dosya sistemlerinde pst değiştirilmiş bir tarih var
cırcır ucube

1
Karma, küçük ama gerçek bir çarpışma riski oluşturmaz ve bir dosyanın senkronize edilmemesine neden olmaz mı? Dropbox görünüşe göre fark benzeri bir uygulama kullanıyor. dropbox.com/help/8/tr
mcandre

1
mcandre, kendi sorusu olarak daha iyi gibi gözüküyor.
GrandmasterB

@ ratchetfreak: tarih değiştirildi, bazı sistemlerde, bu tür bir sorun için mutlaka güvenilir değildir. Basit bir dokunuş, değiştirilen tarihin farklı olmasına neden olur; burada senkronizasyon gerekli olmayabilir.
Steven Evers

1
@SnOrfus daha sonra değiştirilen tarih değiştiğinde değişiklikleri iki kez kontrol edin
cırcır ucube

1

Örneğin .NET, bir FileSystemWatcher sınıfına sahiptir. Eminim diğer düşük seviyeli diller ve çalışma zamanları benzer özellikler sağlayabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.