एक विशाल डेटाबेस में क्वेरी नगण्य विलंबता के साथ कैसे लौटती है?


12

उदाहरण के लिए, जब Google में कुछ खोजते हैं, तो परिणाम शून्य-तुरन्त लौट आते हैं।

मैं समझता हूं कि Google एल्गोरिदम आदि के साथ पृष्ठों को अनुक्रमित और अनुक्रमित करता है, लेकिन मैं कल्पना करता हूं कि इसे अनुक्रमित किए जाने वाले हर संभव क्वेरी के परिणामों के लिए संभव है (और परिणाम व्यक्तिगत हैं, जो इसे और भी अधिक व्यावहारिक रूप से प्रस्तुत करता है)।

इसके अलावा, क्या Google के हार्डवेयर में हार्डवेयर विलंबता बहुत बड़ी नहीं होगी? यहां तक ​​कि अगर Google में डेटा सभी को टीबी / एसएसडी में संग्रहीत किया गया था, तो मुझे लगता है कि हार्डवेयर की विलंबता बहुत बड़ी है, इसे संसाधित करने के लिए डेटा की विशाल मात्रा को देखते हुए।

क्या MapReduce इस समस्या को हल करने में मदद करता है?

संपादित करें: ठीक है, इसलिए मैं समझता हूं कि लोकप्रिय खोजों को स्मृति में कैश्ड किया जा सकता है। लेकिन अलोकप्रिय खोजों के बारे में क्या? यहां तक ​​कि मैंने जो सबसे अस्पष्ट खोज की है, मुझे नहीं लगता कि खोज को कभी भी 5 सेकंड से बड़ा होने की सूचना दी गई है। यह कैसे संभव है?

जवाबों:


13

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

  1. वितरित कंप्यूटिंग: वितरित होने का मतलब यह नहीं है कि इंडेक्स केवल अलग-अलग मशीनों में वितरित किए जाते हैं, उन्हें वास्तव में अलग-अलग समूहों के साथ दोहराया जाता है, जो बहुत से उपयोगकर्ताओं को कम पुनर्प्राप्ति समय के साथ अलग-अलग प्रश्न करने की अनुमति देता है (हां, बड़ी कंपनियां उस के लिए खर्च कर सकती हैं। मशीनों की);
  2. कैशिंग: कैश्स निष्पादन समय को बहुत कम कर देते हैं, यह रेंगने वाले कदम के लिए हो, पृष्ठों की पुनः प्राप्ति के लिए, या परिणामों की रैंकिंग और निषेध के लिए;
  3. बहुत सारे ट्वीकिंग: उपरोक्त सभी और बहुत ही कुशल एल्गोरिदम / समाधान केवल तभी प्रभावी हो सकते हैं जब कार्यान्वयन भी कुशल हो। (हार्ड कोडित) अनुकूलन के टन हैं, जैसे कि संदर्भ, संपीड़न, कैशिंग का स्थानीयता; वे सभी आमतौर पर प्रसंस्करण के विभिन्न भागों के लिए सराहनीय हैं।

इसे देखते हुए, अपने प्रश्नों को हल करने का प्रयास करें:

लेकिन मैं इसकी कल्पना करता हूं कि हर संभव क्वेरी के परिणामों को अनुक्रमित किया जा सके

हां, यह होगा, और वास्तव में हर एक संभव क्वेरी के लिए परिणाम प्राप्त करना संभव है । दुनिया में शब्दों की एक अनंत संख्या है (भले ही आप मान लें कि केवल ठीक से वर्तनी की गई शर्तों को ही दर्ज किया जाएगा), और इन n -> infशब्दों ( 2^n) से प्रश्नों की एक घातीय संख्या है । तो क्या किया जाता है? भंडारित करता है। लेकिन अगर बहुत सारे प्रश्न / परिणाम हैं, तो कौन से कैश हैं? कैशिंग नीतियां। सबसे अक्सर / लोकप्रिय / प्रासंगिक-के लिए उपयोगकर्ता प्रश्न कैश किए गए हैं।

Google के हार्डवेयर में हार्डवेयर विलंबता बहुत बड़ी नहीं होगी? भले ही Google में डेटा सभी को TB / SSDs में संग्रहीत किया गया हो

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

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

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

क्या MapReduce इस समस्या को हल करने में मदद करता है?

हालाँकि मुझे नहीं लगता कि MapReduce का उपयोग करना या न करना Google के अंदर प्रतिबंधित जानकारी है, लेकिन मैं इस बिंदु के बारे में बात नहीं कर रहा हूँ। हालाँकि, Google के MapReduce के कार्यान्वयन (जो निश्चित रूप से Hadoop नहीं है ) में बहुत सारे अनुकूलन होने चाहिए, जिनमें से कई पहलुओं पर चर्चा की गई है। इसलिए, MapReduce की वास्तुकला संभवतः यह मार्गदर्शन करने में मदद करती है कि कम्प्यूटेशंस को भौतिक रूप से कैसे वितरित किया जाता है, लेकिन क्वेरी समय में ऐसी गति को सही ठहराने के लिए कई अन्य बिंदुओं पर विचार किया जाना चाहिए।

ठीक है, इसलिए मैं समझता हूं कि लोकप्रिय खोजों को स्मृति में कैश किया जा सकता है। लेकिन अलोकप्रिय खोजों के बारे में क्या?

नीचे दिया गया ग्राफ़ इस बात का एक वक्र प्रस्तुत करता है कि किस प्रकार के प्रश्न होते हैं। आप देख सकते हैं कि तीन मुख्य प्रकार की खोजें हैं, उनमें से प्रत्येक में लगभग 1/3 प्रश्न हैं (वक्र के नीचे का क्षेत्र)। कथानक शक्ति कानून को दर्शाता है, और इस तथ्य को पुष्ट करता है कि छोटे प्रश्न सबसे लोकप्रिय हैं। कुछ शब्द रखने के बाद से प्रश्नों की दूसरी तीसरी प्रक्रिया अभी भी संभव है। लेकिन तथाकथित अस्पष्ट प्रश्नों का सेट , जिसमें आमतौर पर गैर-अनुभवी उपयोगकर्ताओं के प्रश्न शामिल होते हैं, प्रश्नों का एक नगण्य हिस्सा नहीं होते हैं।

भारी पूंछ वाले वितरण

और उपन्यास समाधान के लिए जगह है। चूंकि यह सिर्फ एक या दो प्रश्न नहीं हैं (लेकिन उनमें से एक तिहाई), उनके पास प्रासंगिक परिणाम होने चाहिए । आप कुछ में लिखते हैं, तो बहुत अस्पष्ट एक गूगल खोज में, यह अब नहीं ले परिणामों की सूची पर लौटने के लिए होगा, लेकिन सबसे शायद आप कुछ यह दिखा देंगे inferred आप कहना चाहते हैं। या यह केवल यह कह सकता है कि इस तरह के शब्दों के साथ कोई दस्तावेज़ नहीं था - या यहां तक ​​कि आपकी खोज को 32 शब्दों में काट दिया (जो कि यहां एक यादृच्छिक परीक्षण में मेरे साथ हुआ था)।

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


मैंने एक और प्रश्न जोड़ने के लिए प्रश्न को संपादित किया।
रेग

@ यहीं मैंने आपके संपादन को संबोधित करने की कोशिश की; उम्मीद है कि यह सवाल का जवाब देने में मदद करता है।
रूबेन्स

10

MapReduce का वास्तविक समय के साथ कुछ लेना-देना नहीं है। यह ईटीएल और इंडेक्स बिल्डिंग जैसे कुछ ऑफ़लाइन कार्यों के लिए उपयुक्त बैच-उन्मुख प्रसंस्करण ढांचा है। Google अब अधिकांश नौकरियों के लिए MapReduce से हट गया है, और यहां तक ​​कि Hadoop पारिस्थितिकी तंत्र भी ऐसा कर रहा है।

कम विलंबता का उत्तर आम तौर पर स्मृति में पूर्वनिर्मित सूचकांक रखने के लिए है। कुछ भी जो डिस्क को छूता है, तेज और स्केल बनाना मुश्किल है। इस तरह इम्पाला जैसी नई पीढ़ी के Hadoop- आधारित SQL इंजनों को उदाहरण के लिए, Hive जैसे MapReduce- आधारित बुनियादी ढांचे की तुलना में बहुत अधिक गति मिलती है ।

खोज संरचना हर एक क्वेरी के परिणामों को कैश नहीं कर सकती है। लेकिन यह सुनिश्चित करता है कि इंटरमीडिएट के परिणामों को कैश कर सकते हैं, या, शीर्ष प्रश्नों के लिए अधिक पूर्ण परिणाम। थोड़ी कैशिंग के साथ आप सभी प्रश्नों के महत्वपूर्ण अल्पसंख्यक के लिए परिणाम दे सकते हैं।

खोज भी सर्वरों में विभाजित है। इसलिए एक मशीन 100 से प्रत्येक को सौंप सकती है और परिणाम का एक हिस्सा प्राप्त कर सकती है और फिर उन्हें जोड़ सकती है।

आप कुछ हद तक अंदाजे से भी दूर हो सकते हैं। Google सचमुच खोज परिणामों के एक हजार पृष्ठ नहीं बनाता है; यह सिर्फ सही के बारे में पहला पृष्ठ प्राप्त करने के लिए है।

ध्यान रखें कि Google के पास दुनिया भर में लाखों कंप्यूटर हैं। आपके प्रश्न भौगोलिक रूप से आपके निकट एक डेटा केंद्र में जा रहे हैं और यह केवल आपके भूगोल की सेवा कर रहा है। यह अधिकांश विलंबता को काटता है, जो नेटवर्क है और डेटा सेंटर में प्रसंस्करण का समय नहीं है।


सबसे पहले, मैंने एक और प्रश्न जोड़ने के लिए प्रश्न को संपादित किया। इसके अलावा: मैं पहले से गणना किए गए एक महत्वपूर्ण अल्पसंख्यक के साथ भी कल्पना करता हूं, बाकी क्वेरी को पूरा होने में अभी भी लंबा समय लगना चाहिए। इसके अलावा, जब इस प्रक्रिया को एक मशीन से 100 मशीनों में भेजा जाता है, तो क्या वास्तव में विलंबता नहीं बढ़ी है (मशीनों के बीच नेटवर्क विलंबता, और कुल विलंबता सभी मशीनों की विलंबता से अधिकतम है)?
resgh

मेरा मतलब है कि क्वेरी "स्पेगेटी डायमंड" का जवाब देना, जो एक अजीब दुर्लभ क्वेरी है, "स्पैगेटी" और "डायमंड" के लिए व्यक्तिगत रूप से पूर्व-जारी किए गए परिणामों से जासूसी हो सकती है। इंट्रा-डीसी कनेक्शन बहुत तेज और कम विलंबता हैं। आपके कंप्यूटर और DC के बीच ~ 20 hops की तुलना में एक अतिरिक्त हॉप या दो अंदर कुछ भी नहीं है। काम बांटने में हावी समस्या स्ट्रगलर समस्या है; यदि आपको समय पर जवाब नहीं मिलता है तो आपको कुछ सबसेट से परिणाम छोड़ना होगा। ये सभी सकल सामान्यीकरण हैं लेकिन सही दिशा में इंगित करते हैं।
सीन ओवेन

4

MapReduce का उपयोग खोज में नहीं किया जाता है। सूचकांक के निर्माण के लिए इसका उपयोग बहुत पहले किया गया था; लेकिन यह एक बैच प्रोसेसिंग फ्रेमवर्क है, और अधिकांश वेब में हर समय परिवर्तन नहीं होता है, इसलिए नए आर्किटेक्चर बैच उन्मुख के बजाय सभी वृद्धिशील हैं ।

Google में खोज काफी हद तक वही काम करेगी जो लुसीनी और इलास्टिक सर्च में काम करती है, सिवाय ढेर सारे ठीक-ठाक अतिरिक्त वज़न और अनुकूलन के। लेकिन बहुत दिल से, वे एक औंधा सूचकांक के कुछ रूप का उपयोग करेंगे । दूसरे शब्दों में, जब आप कोई खोज क्वेरी दर्ज करते हैं (तब भी जब वह कैश नहीं होती है) तो वे कई टेराबाइट्स नहीं खोजते हैं। वे संभवत: वास्तविक दस्तावेजों को बिल्कुल नहीं देखते हैं। लेकिन वे एक लुकअप तालिका का उपयोग करते हैं जो यह सूची देती है कि कौन से दस्तावेज़ आपके क्वेरी शब्द से मेल खाते हैं (स्टेमिंग, गलत वर्तनी, समानार्थक आदि सभी पूर्वप्रक्रम के साथ)। वे शायद प्रत्येक शब्द के लिए शीर्ष 10000 दस्तावेजों की सूची को पुनः प्राप्त करते हैं (10k पूर्णांक - बस कुछ केबी!) और उसी से सर्वश्रेष्ठ मैचों की गणना करते हैं। केवल अगर इन सूचियों में अच्छे मैच नहीं हैं, तो वे अगले ऐसे ब्लॉकों आदि में विस्तार करते हैं।

सामान्य शब्दों की क्वेरी को आसानी से कैश किया जा सकता है; और प्रीप्रोसेसिंग के माध्यम से आप शीर्ष 10k परिणामों की सूची बना सकते हैं और फिर उपयोगकर्ता प्रोफ़ाइल के अनुसार उन्हें फिर से चलाएँ। "सटीक" उत्तर की गणना करके भी कुछ हासिल नहीं किया जा सकता है। शीर्ष 10k परिणामों को देखते हुए पर्याप्त संभावना है; कोई सही उत्तर नहीं है; और अगर 10001 की स्थिति में कहीं बेहतर परिणाम याद आता है, तो किसी को पता नहीं चलेगा या नोटिस (या देखभाल) नहीं होगा। यह संभावना पहले से ही प्रीप्रोसेसिंग में नीचे रैंक की गई थी और इसे शीर्ष 10 में नहीं बनाया होगा जो अंत में उपयोगकर्ता को प्रस्तुत किया जाता है (या शीर्ष 3, उपयोगकर्ता वास्तव में दिखता है)

दूसरी ओर दुर्लभ शर्तें या तो बहुत चुनौती नहीं हैं - सूचियों में से कुछ में केवल कुछ मिलान वाले दस्तावेज़ हैं, और आप तुरंत अन्य सभी को त्याग सकते हैं।

मैं इस लेख को पढ़ने की सलाह देता हूं:

एक बड़े पैमाने पर हाइपरटेक्स्टल वेब सर्च इंजन
सर्गेई ब्रिन और लॉरेंस पेज
कंप्यूटर विज्ञान विभाग, स्टैनफोर्ड विश्वविद्यालय, स्टैनफोर्ड, CA 94305
http://infolab.stanford.edu/~backrub-google.html

और हाँ, यह Google के संस्थापक हैं जिन्होंने इसे लिखा है। यह नवीनतम स्थिति नहीं है, लेकिन यह पहले से ही काफी बड़े पैमाने पर काम करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.