अधिकांश सिंक प्रोग्राम फ़ाइल परिवर्तनों की निगरानी कैसे करते हैं?


9

क्या ड्रॉपबॉक्स जैसे सिंक प्रोग्राम आम तौर पर बाइट तुलना, या हैश का उपयोग करके, या diffसंस्करण नियंत्रण जैसे स्थानीय कमिट लॉग, या क्या का उपयोग करके फ़ाइल परिवर्तनों को ट्रैक करते हैं?

जवाबों:


8

विंडोज पर, 'वॉचड' डायरेक्टरी स्ट्रक्चर - FindFirstChangeNotification () में बदलाव होने पर OS को अलर्ट करने की एक प्रणाली है। जब वह इंगित करता है कि एक फ़ाइल बदल गई है, तो कोई एप्लिकेशन बदल दी गई फ़ाइलों की तुलना करने के लिए बदल सकती है ताकि वास्तविक फ़ाइलों को आकार, संशोधित तिथि, हैश, आदि को देखकर बदल सकें।

यह (जैसा कि माइकल नीचे बताते हैं) कुछ ऐसा है जो प्रत्येक मंच को किसी न किसी तरीके से प्रदान करेगा। मैं कह रहा था कि इस तरह की चीज विंडोज के लिए अद्वितीय थी।


1
और वहाँ लिनक्स पर inotify है।
माइकल

लेकिन क्या होगा अगर फाइल बदलने के समय सिंक प्रोग्राम नहीं चल रहा था? क्या यह हुक द्वारा अधिसूचित किए जाने का अवसर नहीं खोएगा?
mcandre

आपने ड्रॉपबॉक्स के विशिष्ट उदाहरण का उपयोग किया, जो आम तौर पर पृष्ठभूमि में चल रहा है। जाहिर है अगर प्रोग्राम चल नहीं रहा है, तो यह अधिसूचित नहीं होगा। फिर इसे अन्य तरीकों (संशोधित तिथि, शायद) का उपयोग करना होगा। मुझे नहीं लगता कि आप विशिष्ट तरीकों का उपयोग करने के बारे में एक ठोस जवाब प्राप्त करने जा रहे हैं, क्योंकि विभिन्न कार्यक्रम अलग-अलग चीजें करते हैं। प्रश्न में विशिष्ट कार्यक्रमों के रचनाकारों से पूछना बेहतर है।
ग्रैंडमास्टरबी

@mcandre बहुत ज्यादा ग्रैंडमास्टरबी ने क्या कहा - यदि आप अधिसूचना से चूक गए हैं, तो आपको फ़ोल्डर को स्कैन करना होगा। आप कितने "सटीक" होना चाहते हैं, इस पर निर्भर करते हुए, इसका मतलब केवल नई फ़ाइलों और संशोधित टाइमस्टैम्प्स / फ़ाइल आकारों (ये करने के लिए अपेक्षाकृत सस्ती हैं), या सबसे खराब स्थिति में, संपूर्ण फ़ाइल की तुलना कर सकते हैं। Rsync जैसे कार्यक्रमों में आमतौर पर फ़ाइल को चंक्स में रखा जाता है, इसलिए डेटा में जल्दी बदलाव से पहले पता लगाया जा सकता है, लेकिन सबसे खराब स्थिति में (फ़ाइलें समान हैं), आप पूरी बात पढ़ने जा रहे हैं।
डैनियल बी

2

अंततः हर बाइट की तुलना करने के लिए आपको उन फ़ाइलों की तुलना करने की आवश्यकता है - आप किसी एक बाइट को कैसे बदलेंगे?

वास्तव में आप बाइट्स के ब्लॉक पढ़ते हैं और हैश मान की गणना करते हैं, तो आप हैश की सूची के खिलाफ जांच करते हैं। एक अच्छा उदाहरण " rsync " है

जहां तक ​​मुझे पता है कि ड्रॉपबॉक्स केवल संपूर्ण फ़ाइलों को काटता है, इसलिए उसी फ़ाइल की जांच करने के लिए पूरी फ़ाइल का एक हैश गणना करेगा


1
कुछ फ़ाइल सिस्टम पर pst संशोधित है
शाफ़्ट फ्रीक

1
हैशिंग टकराव का एक छोटा लेकिन वास्तविक जोखिम पैदा नहीं करेगा, जिसके परिणामस्वरूप एक फ़ाइल को सिंक नहीं किया जा सकता है? ड्रॉपबॉक्स स्पष्ट रूप से एक अलग तरह के कार्यान्वयन का उपयोग करता है। dropbox.com/help/8/en
mcandre

1
@mcandre जो लगता है कि यह अपने प्रश्न के रूप में बेहतर होगा।
ग्रैंडमास्टरबी

@ratchetfreak: दिनांक, कुछ प्रणालियों पर, इस तरह की समस्या के लिए जरूरी विश्वसनीय नहीं है। एक साधारण स्पर्श के कारण संशोधित तिथि भिन्न होगी, जहां एक सिंक की वास्तव में आवश्यकता नहीं हो सकती है।
स्टीवन एवर्स

1
@SnOrfus तब परिवर्तन की दोबारा जाँच करें जब तारीख बदली जाती है
शाफ़्ट सनकी

1

उदाहरण के लिए .NET में एक FileSystemWatcher वर्ग है। मुझे यकीन है कि अन्य निम्न-स्तरीय भाषाएं और रनटाइम समान क्षमताएं प्रदान कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.