MapReduce डेटा क्वेरी को समानांतर करने का एक स्थापित तरीका है, लेकिन क्या यह विकल्प और भी अधिक लाभ प्रदान कर सकता है?
चाबी छीनना
- MongoDB में जटिल डेटा प्रोसेसिंग के लिए MapReduce और एकत्रीकरण पाइपलाइन दो विधियाँ हैं। एकत्रीकरण ढांचा नया और अधिक कुशल है।
- MapReduce में जावास्क्रिप्ट का उपयोग करके अलग मानचित्र निर्दिष्ट करना और फ़ंक्शन को कम करना शामिल है, जबकि एकत्रीकरण पाइपलाइन अंतर्निहित MongoDB ऑपरेटरों का उपयोग करती है।
- बेहतर प्रदर्शन के लिए MongoDB द्वारा एकत्रीकरण पाइपलाइन की अनुशंसा की जाती है, लेकिन MapReduce अधिक लचीलापन प्रदान करता है और Hadoop जैसे वितरित फ़ाइल सिस्टम के लिए उपयुक्त है।
MapReduce और एकत्रीकरण पाइपलाइन दो विधियाँ हैं जिनका उपयोग आप MongoDB में जटिल डेटा प्रोसेसिंग से निपटने के लिए कर सकते हैं। एकत्रीकरण ढांचा नया है और अपनी दक्षता के लिए जाना जाता है। लेकिन कुछ डेवलपर्स अभी भी MapReduce पर टिके रहना पसंद करते हैं, जिसे वे अधिक आरामदायक मानते हैं।
व्यावहारिक रूप से, आप इन जटिल क्वेरी विधियों में से एक को चुनना चाहेंगे क्योंकि वे समान लक्ष्य प्राप्त करते हैं। लेकिन वे कैसे काम करते हैं? वे कैसे भिन्न हैं, और आपको किसका उपयोग करना चाहिए?
MongoDB में MapReduce कैसे काम करता है
MongoDB में MapReduce आपको बड़ी मात्रा में डेटा पर जटिल गणना चलाने और परिणाम को अधिक व्यापक खंड में एकत्रित करने की अनुमति देता है। MapReduce विधि में दो कार्य हैं: मानचित्र और कम करें।
MongoDB में MapReduce के साथ काम करते समय, आप जावास्क्रिप्ट का उपयोग करके मानचित्र और कम फ़ंक्शन को अलग-अलग निर्दिष्ट करेंगे और प्रत्येक को अंतर्निहित में डालेंगे मानचित्र छोटा करना सवाल।
मैप फ़ंक्शन पहले आने वाले डेटा को कुंजी-मूल्य जोड़े में विभाजित करता है - आमतौर पर मैप किए गए ग्रुपिंग पर आधारित होता है। यह वह जगह है जहां आप निर्दिष्ट करते हैं कि आप डेटा को कैसे समूहित करना चाहते हैं। फिर कम करने वाला फ़ंक्शन प्रत्येक डेटा समूह में मानों पर कस्टम गणना चलाता है और परिणाम को डेटाबेस में संग्रहीत एक अलग संग्रह में एकत्रित करता है।
MongoDB में एकत्रीकरण पाइपलाइन कैसे काम करती है
MongoDB में एकत्रीकरण पाइपलाइन MapReduce का एक बेहतर विकल्प है। MapReduce की तरह, यह आपको सीधे डेटाबेस के अंदर जटिल गणना और डेटा परिवर्तन करने की अनुमति देता है। लेकिन एकत्रीकरण के लिए समर्पित जावास्क्रिप्ट फ़ंक्शंस लिखने की आवश्यकता नहीं होती है जो क्वेरी प्रदर्शन को कम कर सकते हैं।
इसके बजाय, यह डेटा में हेरफेर, समूह और गणना करने के लिए अंतर्निहित MongoDB ऑपरेटरों का उपयोग करता है। यह प्रत्येक क्वेरी के बाद परिणामों को एकत्रित करता है। इस प्रकार, एकत्रीकरण पाइपलाइन अधिक अनुकूलन योग्य है क्योंकि आप अपनी इच्छानुसार आउटपुट की संरचना कर सकते हैं।
MapReduce और एकत्रीकरण के बीच क्वेरीज़ कैसे भिन्न हैं
मान लें कि आप उत्पाद श्रेणियों के आधार पर वस्तुओं की कुल बिक्री की गणना करना चाहते हैं। MapReduce और एकत्रीकरण के मामले में, उत्पाद श्रेणियां कुंजी बन जाती हैं, जबकि प्रत्येक श्रेणी के अंतर्गत आइटमों का योग संबंधित मान बन जाता है।
वर्णित समस्या कथन के लिए कुछ उदाहरण कच्चे डेटा लें, जो इस तरह दिखता है:
आइए उनके प्रश्नों और समस्या-समाधान विधियों के बीच अंतर करने के लिए MapReduce और एक एकत्रीकरण पाइपलाइन का उपयोग करके इस समस्या परिदृश्य को हल करें।
मैपरिड्यूस विधि
बेस प्रोग्रामिंग भाषा के रूप में पायथन का उपयोग करना मानचित्र छोटा करना पहले वर्णित समस्या परिदृश्य की क्वेरी इस तरह दिखती है:
import pymongo
client = pymongo.MongoClient(
"mongodb://localhost/"
)db = client.my_database
sales = db["sales"]
map_function =
function() {
emit(this.Section, this.Sold);
}reduce_function =
function(key, values) {
return Array.sum(values);
}result = db.command(
"mapReduce",
"sales",
map=map_function,
reduce=reduce_function,
out="section_totals"
)
doc = [doc for doc in db.section_totals.find()]
print(doc)
यदि आप इसे मूल नमूना डेटा के विरुद्ध चलाते हैं, तो आपको इस तरह आउटपुट दिखाई देगा:
[{
'_id': 'Adidas',
'value': 9.0
},{
'_id': 'Nike',
'value': 12.0
}]
बारीकी से देखें, और आपको देखना चाहिए कि मानचित्र और कम प्रोसेसर हैं जावास्क्रिप्ट कार्य पायथन वेरिएबल्स के अंदर। कोड इन्हें पास कर देता है मानचित्र छोटा करना क्वेरी, जो एक समर्पित आउटपुट संग्रह निर्दिष्ट करती है (अनुभाग_कुल).
एक एकत्रीकरण पाइपलाइन का उपयोग करना
सहज आउटपुट देने के अलावा, एकत्रीकरण पाइपलाइन क्वेरी अधिक प्रत्यक्ष है। एकत्रीकरण पाइपलाइन के साथ पिछला ऑपरेशन इस प्रकार दिखता है:
import pymongo
client = pymongo.MongoClient("mongodb://localhost/")
db = client.funmi
sales = db["sales"]pipeline = [
{
"$group": {
"_id": "$Section",
"totalSold": { "$sum": "$Sold" }
}
},
{
"$project": {
"_id": 0,
"Section": "$_id",
"TotalSold": "$totalSold"
}
}
]
result = list(sales.aggregate(pipeline))
print(result)
इस एकत्रीकरण क्वेरी को चलाने से निम्नलिखित परिणाम मिलेंगे, जो MapReduce दृष्टिकोण के परिणामों के समान हैं:
[{
'Section': 'Nike',
'TotalSold': 12
},{
'Section': 'Adidas',
'TotalSold': 9
}]
क्वेरी प्रदर्शन और गति
एकत्रीकरण पाइपलाइन MapReduce का एक अद्यतन संस्करण है। MongoDB MapReduce के बजाय एकत्रीकरण पाइपलाइन का उपयोग करने की अनुशंसा करता है, क्योंकि पूर्व अधिक कुशल है।
हमने पिछले अनुभाग में क्वेरीज़ चलाते समय इस दावे पर ज़ोर देने का प्रयास किया था। और जब 12 जीबी रैम मशीन पर साथ-साथ निष्पादित किया गया, तो एकत्रीकरण पाइपलाइन निष्पादन के दौरान औसतन 0.014 सेकंड तेज दिखाई दी। MapReduce क्वेरी को चलाने में उसी मशीन को औसतन 0.058 सेकंड का समय लगा।
यह उनके प्रदर्शन पर निष्कर्ष निकालने का पैमाना नहीं है, लेकिन ऐसा प्रतीत होता है कि यह MongoDB की अनुशंसा का समर्थन करता है। आप इस समय के अंतर को महत्वहीन मान सकते हैं, लेकिन यह हजारों या लाखों प्रश्नों में काफी बढ़ जाएगा।
MapReduce के फायदे और नुकसान
डेटा प्रोसेसिंग में यह कहां उत्कृष्ट है, यह निर्धारित करने के लिए MapReduce के फायदे और नुकसान पर विचार करें।
पेशेवरों
- यह अनुकूलन के लिए अधिक लचीलापन देता है क्योंकि आप मानचित्र लिखते हैं और कार्यों को अलग से कम करते हैं।
- आप आउटपुट को डेटाबेस के अंदर एक नए MongoDB संग्रह में आसानी से सहेज सकते हैं।
- आप उपयोग कर सकते हैं वितरित फ़ाइल सिस्टम में MapReduce Hadoop की तरह, जो MongoDB के साथ आसानी से एकीकृत हो जाता है।
- तृतीय-पक्ष स्क्रिप्टिंग के लिए इसका समर्थन इसे एकत्रीकरण पाइपलाइन की तुलना में अधिक स्केलेबल और सीखने में आसान बनाता है। तो जावास्क्रिप्ट विकास पृष्ठभूमि वाला कोई व्यक्ति MapReduce को कार्यान्वित कर सकता है।
दोष
- इसके लिए तृतीय-पक्ष स्क्रिप्टिंग की आवश्यकता होती है; यह एकत्रीकरण पाइपलाइन की तुलना में इसके कम प्रदर्शन में योगदान देता है।
- MapReduce मेमोरी अक्षम हो सकती है, जिसके लिए कई नोड्स की आवश्यकता होती है, खासकर जब अत्यधिक जटिल डेटा से निपटते हैं।
- यह वास्तविक समय डेटा प्रोसेसिंग के लिए उपयुक्त नहीं है क्योंकि क्वेरी धीमी हो सकती है।
एकत्रीकरण पाइपलाइन के पक्ष और विपक्ष
एकत्रीकरण पाइपलाइन के बारे में क्या ख्याल है? इसकी ताकत और कमजोरियों पर विचार करने से अधिक जानकारी मिलती है।
पेशेवरों
- क्वेरी बहुस्तरीय होती है, आमतौर पर छोटी, अधिक संक्षिप्त और अधिक पठनीय होती है।
- एकत्रीकरण पाइपलाइन अधिक कुशल है, जो MapReduce पर एक महत्वपूर्ण सुधार प्रदान करती है।
- यह अंतर्निहित MongoDB ऑपरेटरों का समर्थन करता है जो आपको अपनी क्वेरी को लचीले ढंग से डिज़ाइन करने देता है।
- यह रीयल-टाइम डेटा प्रोसेसिंग का समर्थन करता है।
- एकत्रीकरण पाइपलाइन आसानी से MongoDB में शामिल हो जाती है और इसके लिए तीसरे पक्ष की स्क्रिप्टिंग की आवश्यकता नहीं होती है।
- तुम कर सकते हो एक नया MongoDB संग्रह बनाएं आउटपुट के लिए यदि आपको उन्हें सहेजने की आवश्यकता है।
दोष
- अधिक जटिल डेटा संरचनाओं से निपटने के दौरान यह MapReduce जितना लचीला नहीं हो सकता है। चूँकि यह तृतीय-पक्ष स्क्रिप्टिंग का उपयोग नहीं करता है, यह आपको डेटा एकत्र करने की एक विशिष्ट विधि से जोड़ता है।
- MongoDB के साथ बहुत कम या कोई अनुभव नहीं रखने वाले डेवलपर्स के लिए इसका कार्यान्वयन और सीखने की अवस्था चुनौतीपूर्ण हो सकती है।
आपको MapReduce या एकत्रीकरण पाइपलाइन का उपयोग कब करना चाहिए?
आम तौर पर, MapReduce और एकत्रीकरण पाइपलाइन के बीच चयन करते समय अपनी डेटा प्रोसेसिंग आवश्यकताओं पर विचार करना सबसे अच्छा होता है।
आदर्श रूप से, यदि आपका डेटा अधिक जटिल है, जिसके लिए वितरित फ़ाइल सिस्टम में उन्नत तर्क और एल्गोरिदम की आवश्यकता होती है, तो MapReduce काम आ सकता है। ऐसा इसलिए है क्योंकि आप मैप-रिड्यूस फ़ंक्शंस को आसानी से कस्टमाइज़ कर सकते हैं और उन्हें कई नोड्स में इंजेक्ट कर सकते हैं। यदि आपके डेटा प्रोसेसिंग कार्य को दक्षता से अधिक क्षैतिज स्केलेबिलिटी की आवश्यकता है तो MapReduce का विकल्प चुनें।
दूसरी ओर, एकत्रीकरण पाइपलाइन जटिल डेटा की गणना के लिए अधिक उपयुक्त है जिसके लिए कस्टम तर्क या एल्गोरिदम की आवश्यकता नहीं होती है। यदि आपका डेटा केवल MongoDB में रहता है, तो एकत्रीकरण पाइपलाइन का उपयोग करना समझ में आता है क्योंकि इसमें कई अंतर्निहित ऑपरेटर होते हैं।
एकत्रीकरण पाइपलाइन वास्तविक समय डेटा प्रोसेसिंग के लिए भी सर्वोत्तम है। यदि आपकी गणना आवश्यकता अन्य कारकों पर दक्षता को प्राथमिकता देती है, तो आप एकत्रीकरण पाइपलाइन का विकल्प चुनना चाहते हैं।
MongoDB में जटिल संगणनाएँ चलाएँ
हालाँकि दोनों MongoDB विधियाँ बड़ी डेटा प्रोसेसिंग क्वेरी हैं, लेकिन उनमें बहुत सारे अंतर हैं। गणना करने से पहले डेटा पुनर्प्राप्त करने के बजाय, जो धीमा हो सकता है, दोनों विधियां सीधे डेटाबेस में संग्रहीत डेटा पर गणना करती हैं, जिससे क्वेरी अधिक कुशल हो जाती हैं।
हालाँकि, प्रदर्शन में एक दूसरे से आगे निकल जाता है, और आपने सही अनुमान लगाया है। एकत्रीकरण पाइपलाइन दक्षता और प्रदर्शन में MapReduce को मात देती है। लेकिन जब आप हर कीमत पर MapReduce को एकत्रीकरण पाइपलाइन से बदलना चाहेंगे, तब भी एप्लिकेशन के कुछ विशिष्ट क्षेत्र हैं जहां MapReduce का उपयोग करना अधिक समझ में आता है।