2009-12-13 8 views
12

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

धन्यवाद।

उत्तर

15

जब भी विकिपीडिया पर एक पृष्ठ संपादित किया जाता है, तो इसे पृष्ठभूमि कतार में रखा जाता है जो कुछ और प्रसंस्करण करता है। चीजें हैं जो वहाँ होने से कुछ हैं: अन्य पृष्ठों के लिए "क्या लिंक यहाँ" के लिए श्रेणी इंडेक्स पृष्ठों

  • अपडेट
  • मौजूदा पृष्ठों के वैश्विक कैश के लिए अद्यतन करने के लिए

    • अपडेट मदद करने के लिए प्रस्तुत करना "redlinks "अन्य पृष्ठों पर

    इस तरह की जानकारी को" सबमिट "करने पर तुरंत अपडेट होने की आवश्यकता नहीं है, इसलिए पृष्ठभूमि प्रोसेसिंग कतार इसकी देखभाल करती है। कभी-कभी यह कतार काफी बड़ी हो सकती है, लेकिन आमतौर पर इसे नियंत्रण में रखा जाता है।

    आप Help:Job Queue पर इसके बारे में अधिक जानकारी प्राप्त कर सकते हैं।

  • 1

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

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

    1

    यह एक लेख के "अद्यतन घटना" के लिए एक लिंक पार्सर ट्रिगर करने के लिए समझ में आता है क्योंकि यह एकमात्र समय बदलने वाला है। बदले में अपडेट इवेंट लिंक के लिए स्कैन करेगा, और विकिपीडिया के लिए आंतरिक लिंक के लिए डीबी से पूछताछ करेगा।

    मुझे लगता है कि प्रत्येक पृष्ठ की प्राथमिक कुंजी होती है और पेज पीके से जुड़े अन्य सभी पृष्ठों से संबंधित एक साधारण एसोसिएशन टेबल बनाई जाती है।

    ऐसी कुछ बड़ी बिट्स की संभावना है जो ऐसी बड़ी साइट पर सहायता के लिए जोड़े जाते हैं लेकिन यह मूल यांत्रिकी होगी।

    2

    आप इसे अधिक सामान्य समस्या के रूप में सोच सकते हैं। यदि आपके पास ए से बी से कोई लिंक (या पॉइंटर या जो भी) है, तो बी कैसे जान सकता है कि ए के पास एक लिंक है?

    उत्तर लक्ष्य स्थान पर संग्रहीत करना है। यही है, जब पृष्ठ ए संपादित किया जाता है और बी को एक लिंक बनाया जाता है, साथ ही लिंक स्रोत के बारे में जानकारी बी (एक रिवर्स लिंक) के बारे में जानकारी संग्रहीत करता है। किसी वेब पेज के मामले में, रिवर्स लिंक सीधे "यहां क्या लिंक" पृष्ठ में लिखा जा सकता है। एक स्थिर पृष्ठ में बस एक ही लिखें। किसी भी खोज या डेटाबेस क्वेरी करने की जरूरत नहीं है।

    2

    एक सरल एल्गोरिथ्म है कि क्या करना होगा के लिए छद्म कोड यह

    procedure updateChanges(editedPage): 
        for_each(link on editedPage): 
         if(link is not to another wikipedia page): continue 
         pageToUpdate = open(link): 
         if(pageToUpdate->whatLinksHere.contains(editedPage)): continue 
         pageToUpdate->whatLinksHere.insert(editedPage) 
    

    खेद है कि मैं सिर्फ इसलिए मैं छद्म कोड लिखने के लिए एक से आग्रह करता हूं मेरे एल्गोरिदम वर्ग समाप्त हो गया।इस संदर्भ में, updateChanges() प्रक्रिया को कुछ अन्य पृष्ठों के लिए "यहां अपडेट करें" के दौरान कहा जाता है, जिसे ग्रेग हेगिल ने संदर्भित किया था।

    संबंधित मुद्दे