चरण 1: मामलों और बाधाओं का उपयोग करें आवश्यकताओं को इकट्ठा करें और समस्या को हल करें। उपयोग के मामलों और बाधाओं को स्पष्ट करने के लिए प्रश्न पूछें। मान्यताओं पर चर्चा करें।
साक्षात्कारकर्ता के बिना स्पष्ट प्रश्नों को संबोधित करने के लिए, हम कुछ उपयोग मामलों और बाधाओं को परिभाषित करेंगे।
बक्सों का इस्तेमाल करें हम केवल निम्नलिखित उपयोग के मामलों को संभालने के लिए समस्या को हल करेंगे सेवा यूआरएल की सूची को क्रॉल करती है: खोज शब्दों वाले पृष्ठों के लिए शब्दों का रिवर्स इंडेक्स बनाता है पृष्ठों के लिए शीर्षक और स्निपेट्स बनाता है शीर्षक और स्निपेट स्थिर हैं, वे खोज क्वेरी के आधार पर नहीं बदलते हैं उपयोगकर्ता इनपुट खोज शब्द और संबंधित पेजों की सूची देखता है, जिसमें क्रॉलर उत्पन्न होते हैं इस उपयोग के मामले के लिए केवल उच्च स्तरीय घटकों और इंटरैक्शन को स्केच करें, गहराई में जाने की आवश्यकता नहीं है सेवा की उच्च उपलब्धता है दायरे से बाहर एनालिटिक्स खोजें वैयक्तिकृत खोज परिणाम पृष्ठ स्तर अड़चनें और धारणाएँ राज्य की धारणाएँ यातायात समान रूप से वितरित नहीं किया जाता है कुछ खोज बहुत लोकप्रिय हैं, जबकि अन्य केवल एक बार निष्पादित होती हैं केवल अनाम उपयोगकर्ताओं का समर्थन करें खोज परिणाम उत्पन्न करना तेज होना चाहिए वेब क्रॉलर को अनंत लूप में नहीं फंसना चाहिए हम एक अनंत लूप में फंस जाते हैं यदि ग्राफ़ में एक चक्र होता है क्रॉल करने के लिए 1 बिलियन लिंक ताजगी सुनिश्चित करने के लिए पृष्ठों को नियमित रूप से क्रॉल करने की आवश्यकता है सप्ताह में लगभग एक बार की औसत ताज़ा दर, लोकप्रिय साइटों के लिए अधिक लगातार हर महीने 4 बिलियन लिंक क्रॉल किया गया वेब पेज प्रति औसत संग्रहीत आकार: 500 KB सरलता के लिए, गिनती नए पृष्ठों के समान ही बदलती है प्रति माह 100 बिलियन की खोज अधिक पारंपरिक प्रणालियों के उपयोग का अभ्यास करें - मौजूदा सिस्टम जैसे कि सॉल या नच का उपयोग न करें।
उपयोग की गणना करें अपने साक्षात्कारकर्ता के साथ स्पष्ट करें कि क्या आपको बैक-ऑफ-द-लिफाफा उपयोग गणनाओं को चलाना चाहिए।
प्रति माह संग्रहित पृष्ठ सामग्री के 2 पीबी 500 KB प्रति पृष्ठ * 4 बिलियन लिंक प्रति माह क्रॉल किया गया 3 वर्षों में संग्रहित पृष्ठ सामग्री के 72 पीबी 1,600 प्रति सेकंड अनुरोध लिखें प्रति सेकंड 40,000 खोज अनुरोध आसान रूपांतरण गाइड:
2.5 मिलियन सेकंड प्रति माह 1 प्रति सेकंड अनुरोध = प्रति माह 2.5 मिलियन अनुरोध 40 प्रति सेकंड अनुरोध = प्रति माह 100 मिलियन अनुरोध प्रति माह 400 अनुरोध = प्रति माह 1 बिलियन अनुरोध चरण 2: एक उच्च स्तरीय डिज़ाइन बनाएं सभी महत्वपूर्ण घटकों के साथ एक उच्च स्तरीय डिजाइन की रूपरेखा।
Imgur
चरण 3: डिजाइन कोर घटक प्रत्येक मुख्य घटक के लिए विवरण में गोता लगाएँ।
मामले का उपयोग करें: सेवा यूआरएल की सूची को क्रॉल करती है हम मान लेंगे कि हमारे पास प्रारंभिक साइट लोकप्रियता के आधार पर शुरू में रैंक किए गए links_to_crawl की प्रारंभिक सूची है। यदि यह एक उचित धारणा नहीं है, तो हम क्रॉलर को लोकप्रिय साइटों से जोड़ सकते हैं, जो बाहरी सामग्री जैसे याहू, डीएमओजेड, आदि से लिंक करते हैं।
हम संसाधित लिंक और उनके पृष्ठ हस्ताक्षरों को संग्रहीत करने के लिए एक टेबल क्रॉल किए गए_लिंक का उपयोग करेंगे।
हम एक महत्वपूर्ण मान NoSQL डेटाबेस में links_to_crawl और crawled_links स्टोर कर सकते हैं। Links_to_crawl में रैंक किए गए लिंक के लिए, हम पृष्ठ लिंक की रैंकिंग बनाए रखने के लिए सॉर्ट किए गए सेट के साथ Redis का उपयोग कर सकते हैं। हमें SQL या NoSQL को चुनने के बीच उपयोग के मामलों और ट्रेडऑफ पर चर्चा करनी चाहिए।
क्रॉलर सेवा प्रत्येक पृष्ठ लिंक को एक लूप में निम्न करके संसाधित करती है: क्रॉल करने के लिए शीर्ष रैंक पेज लिंक लेता है समान पृष्ठ हस्ताक्षर के साथ प्रविष्टि के लिए NoSQL डेटाबेस में क्रॉल किए गए_लिंक चेक करता है यदि हमारे पास एक समान पृष्ठ है, तो पृष्ठ लिंक की प्राथमिकता कम कर देता है यह हमें एक चक्र में जाने से रोकता है जारी रखें एल्स, लिंक को क्रॉल करता है रिवर्स इंडेक्स बनाने के लिए रिवर्स इंडेक्स सर्विस कतार में नौकरी जोड़ता है एक स्थिर शीर्षक और स्निपेट बनाने के लिए दस्तावेज़ सेवा कतार में नौकरी जोड़ता है पेज हस्ताक्षर बनाता है NoSQL डेटाबेस में links_to_crawl से लिंक हटाता है पृष्ठ लिंक और हस्ताक्षर को NoSQL डेटाबेस में crawled_links में सम्मिलित करता है अपने साक्षात्कारकर्ता के साथ स्पष्ट करें कि आपको कितने कोड लिखने की उम्मीद है।
PagesDataStore क्रॉलर सेवा के भीतर एक अमूर्त है जो NoSQL डेटाबेस का उपयोग करता है:
क्लास पेजडैस्टस्टोर (ऑब्जेक्ट):
def __init __ (स्व, डीबी); self.db = db ...
def add_link_to_crawl (स्वयं, url): "" "दिए गए लिंक को` links_to_crawl` "से जोड़ें।" " ...
def_link_to_crawl (स्वयं, url) को हटाएं: "" "दिए गए लिंक को` links_to_crawl` से हटा दें। "" ...
डीईएफ़_पायरिटी_लिंक_टो_क्रॉल (स्वयं, यूआरएल) "" "चक्र से बचने के लिए` links_to_crawl` में एक लिंक की प्राथमिकता को कम करें। "" " ...
def_max_priority_page (स्वयं): "" "Links_to_crawl`" में सर्वोच्च प्राथमिकता वाला लिंक लौटाएँ। "" ...
डीएनएस_क्रॉल्ड_लिंक (स्वयं, यूआरएल, हस्ताक्षर) को परिभाषित करें: "" "दिए गए लिंक को 'क्रॉल किए गए_लिंक्स' में जोड़ें।" " ...
डीएल क्रॉल_स्मिलर (स्व, हस्ताक्षर): "" निर्धारित करें कि क्या हमने पहले ही दिए गए हस्ताक्षर से मेल खाते पृष्ठ को क्रॉल किया है "" ... पृष्ठ क्रॉलर सेवा के भीतर एक अमूर्तता है जो एक पृष्ठ, इसकी सामग्री, बच्चे के यूआरएल, और हस्ताक्षर को समाप्त करता है:
वर्ग पृष्ठ (ऑब्जेक्ट):
def __init __ (स्वयं, url, सामग्री, child_urls, हस्ताक्षर): self.url = url self.contents = सामग्री self.child_urls = child_urls self.signature = हस्ताक्षर क्रॉलर, क्रॉलर सेवा के भीतर का मुख्य वर्ग है, जो पृष्ठ और PagesD से बना है


