MongoDB में मैप-रिड्यूस कार्यान्वयन
मैप-रिड्यूस बड़े डेटा वॉल्यूम को उपयोगी एग्रीगेटेड परिणामों में संघनित करने के लिए डेटा प्रोसेसिंग पैराडाइम है।
कलेक्शन बनाना
> db.demo280.insertOne({"CustomerName":"Chris","isMarried":true});
{ "acknowledged": true, "insertedId": ObjectId("5e49116edd099650a5401a62") }
> db.demo280.insertOne({"CustomerName":"Mike","isMarried":false});
{ "acknowledged": true, "insertedId": ObjectId("5e491170dd099650a5401a63") }
> db.demo280.insertOne({"CustomerName":"David","isMarried":false});
{ "acknowledged": true, "insertedId": ObjectId("5e491170dd099650a5401a64") }
> db.demo280.insertOne({"CustomerName":"Bob","isMarried":true});
{ "acknowledged": true, "insertedId": ObjectId("5e491171dd099650a5401a65") }
सभी डॉक्यूमेंट्स
> db.demo280.find();
मैप-रिड्यूस क्वेरी
> db.demo280.mapReduce( function() { emit(this.isMarried, true); }, function(key, values) { return Array.sum(values); }, { query: { isMarried: true }, out: "Output" } )परिणाम
व्याख्या
- map फंक्शन: प्रत्येक डॉक्यूमेंट के लिए emit(key, value) कॉल करता है
- key: this.isMarried (true/false)
- value: true (गिनती के लिए 1 के बराबर)
- reduce फंक्शन: समान कुंजी के लिए मानों को संयोजित करता है
- Array.sum(values): true मानों को जोड़ता है (true=1)
- query: केवल isMarried: true वाले डॉक्यूमेंट्स प्रोसेस करता है (2 डॉक्यूमेंट्स)
- out: "Output": परिणाम "Output" कलेक्शन में स्टोर करता है
परिणाम विश्लेषण
- input: 2: क्वेरी से मेल खाने वाले 2 डॉक्यूमेंट्स (Chris, Bob)
- emit: 2: 2 बार emit कॉल किया गया
- reduce: 1: एक बार रिड्यूस चला (दोनों true के लिए)
- output: 1: एक आउटपुट डॉक्यूमेंट (key: true, value: 2)
नोट
मैप-रिड्यूस विरलत: उपयोग किया जाता है लेकिन एग्रीगेशन पाइपलाइन ($group, $match, आदि) अधिकांश मामलों के लिए तेज और अधिक अभिव्यंजक है। मैप-रिड्यूस जटिल कस्टम लॉजिक के लिए आरक्षित रखें।