यदि MapReduce आपका पसंदीदा रहा है, तो अब जटिल संचालन से निपटने के लिए MongoDB की एकत्रीकरण पाइपलाइन में संक्रमण का समय हो सकता है।
MongoDB में जटिल प्रश्नों को चलाने के लिए एकत्रीकरण पाइपलाइन अनुशंसित तरीका है। यदि आप MongoDB के MapReduce का उपयोग कर रहे हैं, तो बेहतर होगा कि आप अधिक कुशल गणनाओं के लिए एकत्रीकरण पाइपलाइन पर स्विच करें।
MongoDB में एकत्रीकरण क्या है और यह कैसे काम करता है?
एकत्रीकरण पाइपलाइन उन्नत चलाने के लिए एक बहु-चरणीय प्रक्रिया है MongoDB में प्रश्न. यह डेटा को विभिन्न चरणों के माध्यम से संसाधित करता है जिसे पाइपलाइन कहा जाता है। आप एक स्तर से उत्पन्न परिणामों को दूसरे स्तर पर ऑपरेशन टेम्पलेट के रूप में उपयोग कर सकते हैं।
उदाहरण के लिए, जब तक आपको वांछित आउटपुट नहीं मिल जाता, तब तक आप मैच ऑपरेशन के परिणाम को उस क्रम में क्रमबद्ध करने के लिए दूसरे चरण में भेज सकते हैं।
एकत्रीकरण पाइपलाइन के प्रत्येक चरण में एक MongoDB ऑपरेटर होता है और एक या अधिक रूपांतरित दस्तावेज़ तैयार करता है। आपकी क्वेरी के आधार पर, एक स्तर पाइपलाइन में कई बार दिखाई दे सकता है। उदाहरण के लिए, आपको इसका उपयोग करने की आवश्यकता हो सकती है
$गिनती या $सॉर्ट एकत्रीकरण पाइपलाइन में ऑपरेटर एक से अधिक बार चरणबद्ध होता है।एकत्रीकरण पाइपलाइन के चरण
एकत्रीकरण पाइपलाइन एक ही क्वेरी में कई चरणों से डेटा पास करती है। कई चरण हैं और आप उनका विवरण यहां पा सकते हैं MongoDB दस्तावेज़ीकरण.
आइए नीचे सबसे अधिक उपयोग किए जाने वाले कुछ को परिभाषित करें।
$मैच चरण
यह चरण अन्य एकत्रीकरण चरणों को शुरू करने से पहले विशिष्ट फ़िल्टरिंग स्थितियों को परिभाषित करने में आपकी सहायता करता है। आप इसका उपयोग उस मिलान डेटा का चयन करने के लिए कर सकते हैं जिसे आप एकत्रीकरण पाइपलाइन में शामिल करना चाहते हैं।
$ग्रुप स्टेज
समूह चरण कुंजी-मूल्य जोड़े का उपयोग करके विशिष्ट मानदंडों के आधार पर डेटा को अलग-अलग समूहों में अलग करता है। प्रत्येक समूह आउटपुट दस्तावेज़ में एक कुंजी का प्रतिनिधित्व करता है।
उदाहरण के लिए, निम्नलिखित पर विचार करें बिक्री नमूना डेटा:
एकत्रीकरण पाइपलाइन का उपयोग करके, आप प्रत्येक उत्पाद अनुभाग के लिए कुल बिक्री संख्या और शीर्ष बिक्री की गणना कर सकते हैं:
{
$group: {
_id: $Section,
total_sales_count: {$sum: $Sold},
top_sales: {$max: $Amount},
}
}
_आईडी: $सेक्शन जोड़ी अनुभागों के आधार पर आउटपुट दस्तावेज़ को समूहित करती है। निर्दिष्ट करके टॉप_सेल्स_काउंट और सबसे ज्यादा बिक्री फ़ील्ड्स, MongoDB एग्रीगेटर द्वारा परिभाषित ऑपरेशन के आधार पर ताज़ा कुंजी बनाता है; यह हो सकता है $योग, $मिनट, $अधिकतम, या $औसत.
$छोड़ें चरण
आप इसका उपयोग कर सकते हैं $छोड़ें आउटपुट में दस्तावेज़ों की एक निर्दिष्ट संख्या को छोड़ने का चरण। यह आमतौर पर ग्रुप चरण के बाद आता है। उदाहरण के लिए, यदि आप दो आउटपुट दस्तावेज़ों की अपेक्षा करते हैं लेकिन एक को छोड़ देते हैं, तो एकत्रीकरण केवल दूसरे दस्तावेज़ को आउटपुट करेगा।
स्किप स्टेज जोड़ने के लिए, डालें $छोड़ें एकत्रीकरण पाइपलाइन में संचालन:
...,
{
$skip: 1
},
$सॉर्ट चरण
सॉर्टिंग चरण आपको डेटा को अवरोही या आरोही क्रम में व्यवस्थित करने देता है। उदाहरण के लिए, हम यह निर्धारित करने के लिए कि किस अनुभाग में सबसे अधिक बिक्री है, पिछले क्वेरी उदाहरण में डेटा को अवरोही क्रम में क्रमबद्ध कर सकते हैं।
जोड़ें $सॉर्ट पिछली क्वेरी के लिए ऑपरेटर:
...,
{
$sort: {top_sales: -1}
},
$ सीमा चरण
सीमा संचालन उन आउटपुट दस्तावेज़ों की संख्या को कम करने में मदद करता है जिन्हें आप एकत्रीकरण पाइपलाइन में दिखाना चाहते हैं। उदाहरण के लिए, का उपयोग करें $सीमा ऑपरेटर को पिछले चरण में उच्चतम बिक्री वाला अनुभाग प्राप्त करने के लिए:
...,
{
$sort: {top_sales: -1}
},
{"$limit": 1}
उपरोक्त केवल पहला दस्तावेज़ लौटाता है; यह सबसे अधिक बिक्री वाला अनुभाग है, क्योंकि यह क्रमबद्ध आउटपुट के शीर्ष पर दिखाई देता है।
$प्रोजेक्ट स्टेज
$परियोजना चरण आपको आउटपुट दस्तावेज़ को अपनी इच्छानुसार आकार देने की अनुमति देता है। का उपयोग $परियोजना ऑपरेटर, आप निर्दिष्ट कर सकते हैं कि आउटपुट में कौन सा फ़ील्ड शामिल करना है और उसके कुंजी नाम को कस्टमाइज़ करना है।
उदाहरण के लिए, बिना एक नमूना आउटपुट $परियोजना मंच ऐसा दिखता है:
आइए देखें कि यह कैसा दिखता है $परियोजना अवस्था। जोड़ने के लिए $परियोजना पाइपलाइन के लिए:
...,{
"$project": {
"_id": 0,
"Section": "$_id",
"TotalSold": "$total_sales_count",
"TopSale": "$top_sales",
}
}
चूंकि हमने पहले डेटा को उत्पाद अनुभागों के आधार पर समूहीकृत किया है, इसलिए उपरोक्त में आउटपुट दस्तावेज़ में प्रत्येक उत्पाद अनुभाग शामिल है। यह यह भी सुनिश्चित करता है कि आउटपुट में कुल बिक्री गणना और शीर्ष बिक्री की सुविधा हो कुल बिक गया और टॉपसेल.
अंतिम आउटपुट पिछले वाले की तुलना में काफी साफ-सुथरा है:
$अनविंड स्टेज
$खोलना चरण किसी दस्तावेज़ के भीतर एक सरणी को अलग-अलग दस्तावेज़ों में तोड़ देता है। निम्नलिखित लीजिए आदेश डेटा, उदाहरण के लिए:
उपयोग $खोलना पुनर्निर्माण के लिए चरण सामान अन्य एकत्रीकरण चरणों को लागू करने से पहले सरणी। उदाहरण के लिए, खोलना सामान यदि आप प्रत्येक उत्पाद के लिए कुल राजस्व की गणना करना चाहते हैं तो सरणी समझ में आती है:
db.Orders.aggregate(
[
{
"$unwind": "$items"
},
{
"$group": {
"_id": "$items.product",
"total_revenue": { "$sum": { "$multiply": ["$items.quantity", "$items.price"] } }
}
},
{
"$sort": { "total_revenue": -1 }
},{
"$project": {
"_id": 0,
"Product": "$_id",
"TotalRevenue": "$total_revenue",
}
}
])
उपरोक्त एकत्रीकरण क्वेरी का परिणाम यहां दिया गया है:
MongoDB में एग्रीगेशन पाइपलाइन कैसे बनाएं
जबकि एकत्रीकरण पाइपलाइन में कई ऑपरेशन शामिल हैं, पहले दिखाए गए चरण आपको प्रत्येक के लिए मूल क्वेरी सहित पाइपलाइन में उन्हें लागू करने का एक विचार देते हैं।
पिछले का उपयोग करना बिक्री डेटा नमूना, आइए एकत्रीकरण पाइपलाइन के व्यापक दृश्य के लिए ऊपर चर्चा किए गए कुछ चरणों को एक टुकड़े में देखें:
db.sales.aggregate([
{
"$match": {
"Sold": { "$gte": 5 }
}
},{
"$group": {
"_id": "$Section",
"total_sales_count": { "$sum": "$Sold" },
"top_sales": { "$max": "$Amount" },
}},
{
"$sort": { "top_sales": -1 }
},{"$skip": 0},
{
"$project": {
"_id": 0,
"Section": "$_id",
"TotalSold": "$total_sales_count",
"TopSale": "$top_sales",
}
}
])
अंतिम आउटपुट कुछ ऐसा दिखता है जैसा आपने पहले देखा है:
एकत्रीकरण पाइपलाइन बनाम मानचित्र छोटा करना
MongoDB 5.0 से इसकी समाप्ति तक, MongoDB में डेटा एकत्र करने का पारंपरिक तरीका MapReduce के माध्यम से था। हालांकि MapReduce के व्यापक अनुप्रयोग हैं MongoDB से परे, यह एकत्रीकरण पाइपलाइन की तुलना में कम कुशल है, मानचित्र लिखने और कार्यों को अलग से कम करने के लिए तृतीय-पक्ष स्क्रिप्टिंग की आवश्यकता होती है।
दूसरी ओर, एकत्रीकरण पाइपलाइन केवल MongoDB के लिए विशिष्ट है। लेकिन यह जटिल प्रश्नों को निष्पादित करने का एक साफ़ और अधिक कुशल तरीका प्रदान करता है। सादगी और क्वेरी स्केलेबिलिटी के अलावा, विशेष पाइपलाइन चरण आउटपुट को अधिक अनुकूलन योग्य बनाते हैं।
और भी बहुत कुछ हैं एकत्रीकरण पाइपलाइन और MapReduce के बीच अंतर. जैसे ही आप MapReduce से एकत्रीकरण पाइपलाइन पर स्विच करेंगे, आप उन्हें देखेंगे।
MongoDB में बिग डेटा क्वेरीज़ को कुशल बनाएं
यदि आप MongoDB में जटिल डेटा पर गहन गणना चलाना चाहते हैं तो आपकी क्वेरी यथासंभव कुशल होनी चाहिए। एकत्रीकरण पाइपलाइन उन्नत क्वेरी के लिए आदर्श है। अलग-अलग ऑपरेशनों में डेटा में हेरफेर करने के बजाय, जो अक्सर प्रदर्शन को कम कर देता है, एकत्रीकरण आपको उन सभी को एक ही परफॉर्मेंट पाइपलाइन के अंदर पैक करने और उन्हें एक बार निष्पादित करने की अनुमति देता है।
जबकि एकत्रीकरण पाइपलाइन MapReduce की तुलना में अधिक कुशल है, आप अपने डेटा को अनुक्रमित करके एकत्रीकरण को तेज़ और अधिक कुशल बना सकते हैं। यह प्रत्येक एकत्रीकरण चरण के दौरान MongoDB को स्कैन करने के लिए आवश्यक डेटा की मात्रा को सीमित करता है।