चरण 1: मामलों और बाधाओं का उपयोग करें आवश्यकताओं को इकट्ठा करें और समस्या को हल करें। उपयोग के मामलों और बाधाओं को स्पष्ट करने के लिए प्रश्न पूछें। मान्यताओं पर चर्चा करें।
साक्षात्कारकर्ता के बिना स्पष्ट प्रश्नों को संबोधित करने के लिए, हम कुछ उपयोग मामलों और बाधाओं को परिभाषित करेंगे।
बक्सों का इस्तेमाल करें हम केवल निम्न उपयोग के मामले को संभालने के लिए समस्या को हल करेंगे सेवा श्रेणी के द्वारा पिछले सप्ताह के सबसे लोकप्रिय उत्पादों की गणना करती है उपयोगकर्ता पिछले सप्ताह के सबसे लोकप्रिय उत्पादों को श्रेणी से देखता है सेवा की उच्च उपलब्धता है दायरे से बाहर सामान्य ई-कॉमर्स साइट केवल बिक्री रैंक की गणना के लिए डिज़ाइन घटक अड़चनें और धारणाएँ राज्य की धारणाएँ यातायात समान रूप से वितरित नहीं किया जाता है आइटम कई श्रेणियों में हो सकते हैं आइटम श्रेणियां नहीं बदल सकते हैं कोई उपश्रेणी अर्थात फू / बार / बाज नहीं हैं परिणाम प्रति घंटा अपडेट किया जाना चाहिए अधिक लोकप्रिय उत्पादों को अधिक बार अद्यतन करने की आवश्यकता हो सकती है 10 मिलियन उत्पाद 1000 श्रेणियां प्रति माह 1 बिलियन लेनदेन प्रति माह 100 बिलियन रीड अनुरोध 100: 1 अनुपात लिखने के लिए पढ़ें उपयोग की गणना करें अपने साक्षात्कारकर्ता के साथ स्पष्ट करें कि क्या आपको बैक-ऑफ-द-लिफाफा उपयोग गणनाओं को चलाना चाहिए।
प्रति लेनदेन आकार: create_at - 5 बाइट्स product_id - 8 बाइट्स category_id - 4 बाइट्स seller_id - 8 बाइट्स क्रेता_द - 8 बाइट्स मात्रा - 4 बाइट्स Total_price - 5 बाइट्स कुल: ~ 40 बाइट्स प्रति माह नई लेनदेन सामग्री का 40 जीबी प्रति लेनदेन 40 बाइट्स * प्रति माह 1 बिलियन लेनदेन 3 साल में 1.44 टीबी नए लेनदेन की सामग्री मान लें कि मौजूदा वाले अपडेट के बजाय अधिकांश नए लेनदेन हैं औसतन प्रति सेकंड 400 लेनदेन औसतन प्रति सेकंड 40,000 रीड अनुरोध आसान रूपांतरण गाइड:
2.5 मिलियन सेकंड प्रति माह 1 प्रति सेकंड अनुरोध = प्रति माह 2.5 मिलियन अनुरोध 40 प्रति सेकंड अनुरोध = प्रति माह 100 मिलियन अनुरोध प्रति माह 400 अनुरोध = प्रति माह 1 बिलियन अनुरोध चरण 2: एक उच्च स्तरीय डिज़ाइन बनाएं सभी महत्वपूर्ण घटकों के साथ एक उच्च स्तरीय डिजाइन की रूपरेखा।
Imgur
चरण 3: डिजाइन कोर घटक प्रत्येक मुख्य घटक के लिए विवरण में गोता लगाएँ।
मामले का उपयोग करें: सेवा श्रेणी के द्वारा पिछले सप्ताह के सबसे लोकप्रिय उत्पादों की गणना करती है हम अपने स्वयं के वितरित फ़ाइल सिस्टम को प्रबंधित करने के बजाय किसी प्रबंधित ऑब्जेक्ट स्टोर पर कच्चे बिक्री एपीआई सर्वर लॉग फ़ाइलों को स्टोर कर सकते हैं, जैसे कि अमेजन एस 3।
अपने साक्षात्कारकर्ता के साथ स्पष्ट करें कि आपको कितने कोड लिखने की उम्मीद है।
हम मान लेंगे कि यह एक नमूना लॉग प्रविष्टि है, टैब सीमांकित:
टाइमस्टैम्प product_id category_id क्यूटी total_price seller_id खरीदार_id t1 उत्पाद 1 श्रेणी 1 2 20.00 1 1 t2 उत्पाद 1 श्रेणी 2 2 20.00 2 2 t2 उत्पाद 1 श्रेणी 2 1 10.00 2 3 t3 उत्पाद 2 श्रेणी 1 3 7.00 3 4 t4 उत्पाद 3 श्रेणी 2 7 2.00 4 5 t5 उत्पाद 4 श्रेणी 1 1 5.00 5 6 ... विक्रय रैंक सेवा MapReduce का उपयोग कर सकती है, Sales API सर्वर लॉग फ़ाइलों को इनपुट के रूप में उपयोग कर सकती है और परिणामों को एक SQL डेटाबेस में कुल तालिका sales_rank पर लिख सकती है। हमें SQL या NoSQL को चुनने के बीच उपयोग के मामलों और ट्रेडऑफ पर चर्चा करनी चाहिए।
हम एक बहु-चरणीय MapReduce का उपयोग करेंगे:
चरण 1 - डेटा को (श्रेणी, product_id), योग (मात्रा) में बदलें चरण 2 - एक वितरित प्रकार निष्पादित करें वर्ग विक्रेता (MRJob):
def_past_week (स्व, टाइमस्टैम्प): "" सही है अगर टाइमस्टैम्प पिछले सप्ताह के भीतर है, तो गलत अन्यथा। "" ...
डीएपी मैपर (स्वयं, _ रेखा): "" "प्रत्येक लॉग लाइन को पार्स करें, प्रासंगिक लाइनों को निकालें और बदल दें।
फॉर्म के मुख्य मूल्य जोड़े का उत्सर्जन करें:
(श्रेणी १, उत्पाद १), २ (श्रेणी २, उत्पाद १), २ (श्रेणी 2, उत्पाद 1), 1 (श्रेणी १, उत्पाद २), ३ (श्रेणी 2, उत्पाद 3), 7 (श्रेणी 1, उत्पाद 4), 1 "" " टाइमस्टैम्प, product_id, category_id, मात्रा, total_price, seller_id, \ क्रेता_ड = लाइन.स्प्लिट ('\ t') अगर स्व.विथिन_पस्त_वेक (टाइमस्टैम्प): उपज (श्रेणी_id, उत्पाद_आईडी), मात्रा
डीईएफ़ reducer (स्वयं, कुंजी, मूल्य): "" प्रत्येक कुंजी के लिए योग मान।
(श्रेणी १, उत्पाद १), २ (श्रेणी २, उत्पाद १), ३ (श्रेणी १, उत्पाद २), ३ (श्रेणी 2, उत्पाद 3), 7 (श्रेणी 1, उत्पाद 4), 1 "" " उपज कुंजी, योग (मान)
def mapper_sort (स्वयं, कुंजी, मूल्य): उचित छँटाई सुनिश्चित करने के लिए "" कुंजी का निर्माण करें।
फ़ॉर्म में कुंजी और मान बदलें:
(श्रेणी 1, 2), उत्पाद 1 (श्रेणी 2, 3), उत्पाद 1 (श्रेणी 1, 3), उत्पाद 2 (श्रेणी 2, 7), उत्पाद 3 (श्रेणी 1, 1), उत्पाद 4
MapReduce का फेरबदल / सॉर्ट चरण तब करेगा कुंजी पर वितरित प्रकार, जिसके परिणामस्वरूप:
(श्रेणी 1, 1), उत्पाद 4 (श्रेणी 1, 2), उत्पाद 1 (श्रेणी 1, 3), उत्पाद 2 (श्रेणी 2, 3), उत्पाद 1 (श्रेणी 2, 7), उत्पाद 3 "" " category_id, product_id = कुंजी मात्रा = मान उपज (श्रेणी_ राशि, मात्रा), उत्पाद_द


