मैं पेस्ट्री वितरित हैश टेबल को लागू करने की कोशिश कर रहा हूं, लेकिन कुछ चीजें मेरी समझ से बच रही हैं। मैं उम्मीद कर रहा था कि कोई स्पष्ट कर सकता है।
डिस्क्लेमर : मैं कंप्यूटर साइंस का छात्र नहीं हूं। मैंने अपने जीवन में ठीक-ठीक दो कंप्यूटर विज्ञान के पाठ्यक्रम लिए हैं, और न ही किसी जटिल चीज से निपटा है। मैंने वर्षों तक सॉफ्टवेयर के साथ काम किया है, इसलिए मुझे लगता है कि मैं कार्यान्वयन कार्य पर निर्भर हूं, अगर मैं सिर्फ विचारों के चारों ओर अपना सिर लपेट सकता हूं। इसलिए मुझे कुछ स्पष्ट याद आ रहा है।
मैंने वह पेपर पढ़ा है जिसे लेखकों ने प्रकाशित किया है [1], और मैंने कुछ अच्छी प्रगति की है, लेकिन मैं इस एक विशेष बिंदु पर लटका रहता हूं कि राउटिंग टेबल कैसे काम करता है:
कागज का दावा है कि
नोड का राउटिंग टेबल, , को प्रविष्टियों के साथ पंक्तियों में व्यवस्थित किया जाता है । पंक्ति में प्रविष्टियों मार्ग तालिका में से प्रत्येक के एक नोड जिसका nodeId शेयरों फाई में मौजूद नोड के nodeId पहला n अंक हैं, लेकिन जिनकी का उल्लेख वें अंकों में से एक है संभावित मान के अलावा अन्य वर्तमान नोड के आईडी में वें अंकों।⌈ लोग इन 2 ख एन ⌉ 2 ख - 1 2 ख - 1 एन एन + 1 2 ख - 1 n + 1
एक एप्लिकेशन-विशिष्ट चर, आम तौर पर के लिए खड़ा है । सरलता के लिए, b = 4 का उपयोग करते हैं । तो ऊपर है
नोड की रूटिंग टेबल, , को 15 प्रविष्टियों के साथ पंक्तियों में व्यवस्थित किया जाता है । 15 पंक्ति में प्रविष्टियों n मार्ग तालिका में से प्रत्येक के एक नोड जिसका nodeId शेयरों फाई में मौजूद नोड के nodeId पहला n अंक हैं, लेकिन जिनकी का उल्लेख n + 1 वें अंकों में से एक है 2 ^ ख - 1 के अलावा अन्य संभावित मान n वर्तमान नोड की आईडी में + 1 अंक।
मैं इतना ही समझता हूं। इसके अलावा, क्लस्टर में सर्वरों की संख्या है। मुझे वह भी मिलता है।
मेरा प्रश्न यह है कि यदि पंक्ति को प्रविष्टि में रखा जाता है, तो कुंजी की साझा लंबाई पर निर्भर करता है, पंक्तियों की संख्या पर प्रतीत होता है कि यादृच्छिक सीमा क्यों है? प्रत्येक नोडआईड में 32 अंक होते हैं, जब (128 बिट नोड्स बी बिट्स के अंकों में विभाजित होते हैं)। तो क्या होता है जब इतना उच्च हो जाता है कि ? मुझे लगता है कि इस परिदृश्य को हिट करने के लिए 340,282,366,920,938,463,374,607,431,768,211,457 (यदि मेरा गणित सही है) सर्वर लगेंगे, लेकिन यह सिर्फ एक अजीब समावेश की तरह लगता है, और सहसंबंध कभी भी समझाया नहीं गया है।
इसके अलावा, यदि आपके पास कम संख्या में सर्वर हैं तो क्या होगा? यदि मेरे पास 16 से कम सर्वर हैं, तो मेरे पास तालिका में केवल एक पंक्ति है। इसके अलावा, किसी भी परिस्थिति में पंक्ति में प्रत्येक प्रविष्टि के पास एक समान सर्वर नहीं होगा। क्या प्रविष्टियों को खाली छोड़ दिया जाना चाहिए? मुझे पता है कि मैं पत्ती सेट में सर्वर को खोजने में सक्षम हो जाएगा, कोई बात नहीं, जो कुछ सर्वरों को दिया जाता है, लेकिन दूसरी पंक्ति के लिए एक ही quandary उठाया जाता है - क्या होगा यदि मेरे पास एक सर्वर नहीं है जिसमें एक नोडआईड है ऐसा मैं nth अंक के हर संभावित क्रमांक को भर सकता हूँ? अंत में, अगर मेरे पास, चार सर्वर हैं, और मेरे पास दो नोड्स हैं जो शेयर करते हैं, कहते हैं, उनके 32 अंकों में से 20, कुछ यादृच्छिक अस्थायी द्वारा ... क्या मुझे उस नोड के लिए तालिका की 20 पंक्तियों को पॉप्युलेट करना चाहिए, भले ही वह है जितना मैं भरने के करीब आ सका उससे कहीं अधिक पंक्तियाँ?
यहाँ मैं इसके साथ अपना रास्ता बनाने की कोशिश कर रहा हूँ:
- यदि कोई नोड ठीक उपसर्ग से मेल नहीं खाता है तो प्रविष्टियाँ शून्य मान पर सेट की जानी हैं।
- खाली पंक्तियों को तब तक जोड़ा जाना चाहिए जब तक नोड्स की साझा लंबाई से मेल खाने के लिए पर्याप्त पंक्तियाँ मौजूद न हों।
- यदि, और केवल अगर, एक वांछित संदेश आईडी के लिए कोई मिलान प्रविष्टि नहीं है, तो नोड के लिए राउटिंग टेबल की खोज पर वापस जाएं, जिसकी साझा लंबाई वर्तमान नोड की तुलना में अधिक या बराबर है और जिसकी प्रविष्टि गणितीय रूप से वर्तमान से करीब है वांछित आईडी का नोडआईड।
- यदि कोई उपयुक्त नोड # 3 में नहीं पाया जा सकता है, तो मान लें कि यह गंतव्य है और संदेश वितरित करता है।
क्या इन चारों धारणाओं को पकड़ लिया है? क्या कहीं और है जो मुझे इस बारे में जानकारी की तलाश में होना चाहिए?
- पेस्ट्री: स्केलेबल, विकेन्द्रीकृत वस्तु स्थान और बड़े पैमाने पर सहकर्मी से सहकर्मी सिस्टम के लिए राउटिंग ए। रोस्ट्रॉन्ग और पी। ड्रूशेल (2001) - यहाँ डाउनलोड करें