में वितरित संस्करण नियंत्रण प्रणाली (जैसे एक मर्क्युरियल और Git ) कुशलता से निर्देशित तुलना अचक्रीय रेखांकन (DAGs) करने की जरूरत है। मैं एक मर्क्यूरियल डेवलपर हूं, और हम दो डीएजी की तुलना करने के समय और नेटवर्क-जटिलता की चर्चा करने वाले सैद्धांतिक काम के बारे में सुनने में बहुत रुचि रखते हैं।
विचाराधीन डीएजी रिकॉर्ड किए गए संशोधनों से बनते हैं। संशोधन एक हैश मूल्य द्वारा विशिष्ट रूप से पहचाने जाते हैं। प्रत्येक संशोधन पिछले संशोधनों के शून्य (प्रारंभिक प्रतिबद्ध), एक (सामान्य प्रतिबद्ध) या अधिक (मर्ज कमिट) पर निर्भर करते हैं। एक उदाहरण है जहाँ संशोधन है a
करने के लिए e
एक दूसरे को एक के बाद एक किए गए:
a --- b --- c --- d --- e
ग्राफ़ तुलना चित्र में आती है जब किसी के पास केवल इतिहास का हिस्सा होता है और लापता भाग को फिर से प्राप्त करना चाहता है। कल्पना कीजिए कि मुझे a
बनाना c
और बनाना था x
और उसके y
आधार पर c
:
a --- b --- c --- x --- y
मर्क्युरियल में, मैं क्या करना होगा hg pull
और डाउनलोड d
और e
:
a --- b --- c --- x --- y
\
d --- e
लक्ष्य की पहचान करना d
और e
कुशलता से करना है जब ग्राफ में कई (कहते हैं, 100,000 से अधिक) नोड्स हैं। दक्षता दोनों की चिंता है
- नेटवर्क जटिलता: स्थानांतरित बाइट्स की संख्या और आवश्यक नेटवर्क राउंड-ट्रिप की संख्या
- समय जटिलता: दो सर्वरों द्वारा किए गए अभिकलन की मात्रा जो परिवर्तनों का आदान-प्रदान करती है
विशिष्ट रेखांकन ऊपर की तरह कुछ समानांतर पटरियों के साथ संकीर्ण होंगे। आम तौर पर केवल एक मुट्ठी पत्ती के नोड्स होंगे (हम उन्हें मर्क्यूरियल में हेड कहते हैं) जैसे e
और y
ऊपर। अंत में, जब एक केंद्रीय सर्वर का उपयोग किया जाता है, तो ग्राहक के पास अक्सर कुछ बदलाव करने वाले सर्वर होते हैं जो सर्वर पर नहीं होते हैं, जबकि सर्वर में क्लाइंट के लिए 100+ नए परिवर्तन हो सकते हैं, जो इस बात पर निर्भर करता है कि बहुत पहले क्लाइंट ने सर्वर से अंतिम रूप से किसको खींचा था। । एक असममित समाधान को प्राथमिकता दी जाती है: एक केंद्रीकृत सर्वर को अपने ग्राहकों की तुलना में थोड़ी गणना करनी चाहिए।