एक नेटवर्क पर कुशल DAG तुलना


11

में वितरित संस्करण नियंत्रण प्रणाली (जैसे एक मर्क्युरियल और 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+ नए परिवर्तन हो सकते हैं, जो इस बात पर निर्भर करता है कि बहुत पहले क्लाइंट ने सर्वर से अंतिम रूप से किसको खींचा था। । एक असममित समाधान को प्राथमिकता दी जाती है: एक केंद्रीकृत सर्वर को अपने ग्राहकों की तुलना में थोड़ी गणना करनी चाहिए।


Google Plus पर चर्चा थोड़ी जारी रही है ।
मार्टिन गेइस्लर

जवाबों:


13

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


उह, यह दिलचस्प लगता है! आप सही हैं कि परिवर्तनक आईडी की सीधी तुलना (हाँ, वे हैश मान हैं) काम करेंगे। हमने हमेशा ग्राफ़ संरचना का उपयोग करने का हमेशा प्रयास किया है: यदि हम दोनों एक्स को जानते हैं, तो मुझे यह भी पता है कि आप एक्स के सभी पूर्वजों को जानते हैं। यह महत्वपूर्ण जानकारी की तरह लगता है, लेकिन शायद यह नहीं है। मैं अब आपका पेपर पढ़ूंगा, पॉइंटर के लिए धन्यवाद!
मार्टिन गिस्लर

@ डेविड: एक सटीक (मैं वर्तमान में मर्क्यूरियल द्वारा उपयोग किए जाने वाले एल्गोरिथ्म के लेखक में से एक हूं)। हम वास्तव में "सामान्य" नोड्स के सेट के बारे में परवाह करते हैं, लापता नोड के मूल्य को जानने की कोई आवश्यकता नहीं है।
टनफा

1
यदि आप जानते हैं कि क्या अलग है, तो आप यह भी जानते हैं कि सामान्य रूप में क्या है: यह सब कुछ है जो आपके पास कॉपी है जो अंतर का हिस्सा नहीं है। लेकिन अंतर आम तौर पर बड़ा होने पर भी आम तौर पर छोटा होना चाहिए, इसलिए केवल अंतर के आनुपातिक डेटा की मात्रा का संचार करना पूरे इतिहास डीएजी या आम हिस्से को सूचित करने से बेहतर है।
डेविड एपस्टीन

@ डेविड: पूर्वज संबंध के कारण, हम वास्तव में सामान्य क्षेत्र के प्रमुखों (पत्ती नोड्स) की गणना करते हैं। तो यह अभी भी एक छोटी मात्रा में डेटा है, भले ही एक विशाल साझा इतिहास हो।
मार्टिन गेइस्लर

मैंने अपने उत्तर को अद्यतन करने के लिए उपयोग की गई राउंड ट्रिप की संख्या को भी शामिल किया (जो बहुत छोटी हो जाती है)।
डेविड एप्पस्टीन

3

मर्क्यूरियल के लिए हमने जो समाधान लागू किया, उसमें एक और चिंता विषमता की थी: क्लाइंट के लोड की कीमत पर, आउटगोइंग बैंडविड्थ और सीपीयू समय दोनों के लिए सर्वर का लोड कम से कम होना चाहिए।


1
धन्यवाद, मैंने इस सवाल को नोट करने के लिए थोड़ा अपडेट किया है।
मार्टिन गेइस्लर

0

मेरे लिए एक दो कदम की प्रक्रिया की तरह लगता है।

  1. सभी ग्राहकों से पूछें कि क्या उनके पास यह है कि माता-पिता सी कहां हैं
  2. यदि हां, ग के सभी childs खोजें

1. मुझे लगता है कि मुख्य रूप से क्लाइंट पक्ष पर कार्रवाई की जाती है, और सभी क्लाइंट को नेट पर कमिट हैश की आवश्यकता होती है।


आप किस परिदृश्य का वर्णन कर रहे हैं? मामला जहां मैंने बनाया है xऔर सर्वर से और yखींचने की आवश्यकता है ? जन्मजात समस्या यह है कि मैं (एक ग्राहक के रूप में) "शाखा बिंदु" नहीं जानता । edc
मार्टिन गीस्लर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.