नाम समान होने के कारण यह कुछ भ्रमित करने वाला है, लेकिन group()
कमांड $group
. से एक अलग विशेषता और कार्यान्वयन है एग्रीगेशन फ्रेमवर्क में पाइपलाइन ऑपरेटर।
Group() कमांड, एग्रीगेशन फ्रेमवर्क, और MapReduce सामूहिक रूप से एग्रीगेशन फीचर्स हैं मोंगोडीबी का। सुविधाओं में कुछ ओवरलैप है, लेकिन मैं MongoDB 2.2.0 के अनुसार प्रत्येक के अंतर और सीमाओं को समझाने का प्रयास करूंगा।
नोट:इनलाइन परिणाम सेट नीचे उल्लिखित प्रश्नों को संदर्भित करता है जो फ़ंक्शन कॉल के अंत में लौटाए गए परिणामों के साथ स्मृति में संसाधित होते हैं। वैकल्पिक आउटपुट विकल्प (वर्तमान में केवल MapReduce के साथ उपलब्ध) में परिणामों को नए या मौजूदा संग्रह में सहेजना शामिल हो सकता है।
group()
कमांड
-
ग्रुपिंग के लिए सरल सिंटैक्स और कार्यक्षमता ..
GROUP BY
. के अनुरूप एसक्यूएल में। -
रिटर्न परिणाम सेट इनलाइन (समूहीकृत वस्तुओं की एक सरणी के रूप में)।
-
जावास्क्रिप्ट इंजन का उपयोग करके कार्यान्वित किया गया; कस्टम
reduce()
फ़ंक्शन जावास्क्रिप्ट में लिखे जा सकते हैं। -
वर्तमान सीमाएं
-
20,000 से अधिक कुंजियों वाले परिणाम सेट में समूहित नहीं होगा।
-
परिणाम बीएसओएन दस्तावेज़ (वर्तमान में 16 एमबी) की सीमाओं के भीतर फिट होने चाहिए।
-
रीड लॉक लेता है और किसी अन्य थ्रेड को चलने के दौरान जावास्क्रिप्ट को निष्पादित करने की अनुमति नहीं देता है।
-
शार्प किए गए संग्रह के साथ काम नहीं करता है।
-
-
यह भी देखें:group() कमांड उदाहरण ।
MapReduce
-
बड़े डेटा सेट को संसाधित करने के लिए MapReduce मॉडल को लागू करता है।
-
कई आउटपुट विकल्पों में से एक चुन सकते हैं (इनलाइन, नया संग्रह, मर्ज, बदलें, कम करें)
-
MapReduce फ़ंक्शन जावास्क्रिप्ट में लिखे गए हैं।
-
गैर-शार्ड और शार्प किए गए इनपुट संग्रह का समर्थन करता है।
-
बड़े संग्रह पर वृद्धिशील एकत्रीकरण के लिए इस्तेमाल किया जा सकता है।
-
MongoDB 2.2 शार्प्ड मैप के आउटपुट को कम करने के लिए बेहतर समर्थन को लागू करता है।
-
वर्तमान सीमाएं
-
एक एकल उत्सर्जन MongoDB के अधिकतम BSON दस्तावेज़ आकार (16MB) का केवल आधा ही धारण कर सकता है।
-
एक जावास्क्रिप्ट लॉक है, इसलिए एक मोंगॉड सर्वर एक समय में केवल एक जावास्क्रिप्ट फ़ंक्शन को निष्पादित कर सकता है .. हालांकि, मैपरेडस के अधिकांश चरण बहुत कम हैं इसलिए लॉक अक्सर प्राप्त किए जा सकते हैं।
-
MapReduce फ़ंक्शंस को डीबग करना मुश्किल हो सकता है। आप
print()
. का उपयोग कर सकते हैं औरprintjson()
डायग्नोस्टिक आउटपुट कोmongod
. में शामिल करने के लिए लॉग। -
MapReduce आमतौर पर रिलेशनल क्वेरी एग्रीगेशन अनुभव का अनुवाद करने की कोशिश कर रहे प्रोग्रामर के लिए सहज नहीं है।
-
-
यह भी देखें:मानचित्र/उदाहरण कम करें ।
एकत्रीकरण फ्रेमवर्क
-
MongoDB 2.2.0 प्रोडक्शन रिलीज़ (अगस्त, 2012) में नई सुविधा।
-
प्रदर्शन और उपयोगिता में सुधार के विशिष्ट लक्ष्यों के साथ बनाया गया है।
-
परिणाम सेट इनलाइन लौटाता है।
-
गैर-शार्ड और शार्प किए गए इनपुट संग्रह का समर्थन करता है।
-
एक "पाइपलाइन" दृष्टिकोण का उपयोग करता है जहां वस्तुओं को परिवर्तित किया जाता है क्योंकि वे पाइपलाइन ऑपरेटरों की एक श्रृंखला से गुजरते हैं जैसे मिलान, प्रोजेक्टिंग, सॉर्टिंग और ग्रुपिंग।
-
पाइपलाइन ऑपरेटरों को प्रत्येक इनपुट दस्तावेज़ के लिए एक आउटपुट दस्तावेज़ प्रस्तुत करने की आवश्यकता नहीं है:ऑपरेटर नए दस्तावेज़ भी उत्पन्न कर सकते हैं या दस्तावेज़ों को फ़िल्टर कर सकते हैं।
-
अनुमानों का उपयोग करके आप परिकलित फ़ील्ड जोड़ सकते हैं, नए आभासी उप-ऑब्जेक्ट बना सकते हैं, और उप-फ़ील्ड को परिणामों के शीर्ष-स्तर में निकाल सकते हैं।
-
पाइपलाइन ऑपरेटरों को आवश्यकतानुसार दोहराया जा सकता है (उदाहरण के लिए, एकाधिक
$project
या$group
कदम। -
वर्तमान सीमाएं
-
परिणाम इनलाइन लौटाए जाते हैं, इसलिए सर्वर द्वारा समर्थित अधिकतम दस्तावेज़ आकार तक सीमित हैं (16MB)
-
MapReduce जितने आउटपुट विकल्पों का समर्थन नहीं करता
-
एग्रीगेशन फ्रेमवर्क द्वारा समर्थित ऑपरेटरों और अभिव्यक्तियों तक सीमित (यानी कस्टम फ़ंक्शन नहीं लिख सकते)
-
एकत्रीकरण के लिए नवीनतम सर्वर सुविधा, इसलिए दस्तावेज़ीकरण, सुविधा सेट और उपयोग के मामले में परिपक्व होने के लिए अधिक जगह है।
-
-
यह भी देखें:एकत्रीकरण फ्रेमवर्क उदाहरण ।
क्या कोई एक उदाहरण प्रस्तुत कर सकता है या मुझे एक लिंक के लिए मार्गदर्शन कर सकता है जहां एक ही नमूना डेटा लेते हुए इन तीन अवधारणाओं को एक साथ समझाया गया है, ताकि मैं उनकी तुलना आसानी से कर सकूं?
आपको आम तौर पर ऐसे उदाहरण नहीं मिलेंगे जहां तीनों दृष्टिकोणों की तुलना करना उपयोगी होगा, लेकिन यहां पिछले स्टैक ओवरफ्लो प्रश्न हैं जो विविधता दिखाते हैं:
- ग्रुप () बनाम एग्रीगेशन फ्रेमवर्क
- MapReduce बनाम एग्रीगेशन फ्रेमवर्क